< prev index next >
src/java.base/share/classes/java/net/InetAddress.java
Print this page
8200131: Improve lazy init of InetAddress.canonicalHostName and NativeObject.pageSize
Reviewed-by: alanb
@@ -288,11 +288,14 @@
}
/* Used to store the name service provider */
private static transient NameService nameService = null;
- /* Used to store the best available hostname */
+ /**
+ * Used to store the best available hostname.
+ * Lazily initialized via a data race; safe because Strings are immutable.
+ */
private transient String canonicalHostName = null;
/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = 3286316764910316507L;
@@ -620,15 +623,15 @@
* @see SecurityManager#checkConnect
*
* @since 1.4
*/
public String getCanonicalHostName() {
- if (canonicalHostName == null) {
- canonicalHostName =
+ String value = canonicalHostName;
+ if (value == null)
+ canonicalHostName = value =
InetAddress.getHostFromNameService(this, true);
- }
- return canonicalHostName;
+ return value;
}
/**
* Returns the hostname for this address.
*
< prev index next >