< prev index next >

src/java.base/share/classes/sun/nio/ch/NativeObject.java

Print this page
8200131: Improve lazy init of InetAddress.canonicalHostName and NativeObject.pageSize
Reviewed-by: alanb


 371      */
 372     static ByteOrder byteOrder() {
 373         if (byteOrder != null)
 374             return byteOrder;
 375         long a = unsafe.allocateMemory(8);
 376         try {
 377             unsafe.putLong(a, 0x0102030405060708L);
 378             byte b = unsafe.getByte(a);
 379             switch (b) {
 380             case 0x01: byteOrder = ByteOrder.BIG_ENDIAN;     break;
 381             case 0x08: byteOrder = ByteOrder.LITTLE_ENDIAN;  break;
 382             default:
 383                 assert false;
 384             }
 385         } finally {
 386             unsafe.freeMemory(a);
 387         }
 388         return byteOrder;
 389     }
 390 
 391     // Cache for page size



 392     private static int pageSize = -1;
 393 
 394     /**
 395      * Returns the page size of the underlying hardware.
 396      *
 397      * @return  The page size, in bytes
 398      */
 399     static int pageSize() {
 400         if (pageSize == -1)
 401             pageSize = unsafe.pageSize();
 402         return pageSize;

 403     }
 404 
 405 }


 371      */
 372     static ByteOrder byteOrder() {
 373         if (byteOrder != null)
 374             return byteOrder;
 375         long a = unsafe.allocateMemory(8);
 376         try {
 377             unsafe.putLong(a, 0x0102030405060708L);
 378             byte b = unsafe.getByte(a);
 379             switch (b) {
 380             case 0x01: byteOrder = ByteOrder.BIG_ENDIAN;     break;
 381             case 0x08: byteOrder = ByteOrder.LITTLE_ENDIAN;  break;
 382             default:
 383                 assert false;
 384             }
 385         } finally {
 386             unsafe.freeMemory(a);
 387         }
 388         return byteOrder;
 389     }
 390 
 391     /**
 392      * Cache for page size.
 393      * Lazily initialized via a data race; safe because ints are atomic.
 394      */
 395     private static int pageSize = -1;
 396 
 397     /**
 398      * Returns the page size of the underlying hardware.
 399      *
 400      * @return  The page size, in bytes
 401      */
 402     static int pageSize() {
 403         int value = pageSize;
 404         if (value == -1)
 405             pageSize = value = unsafe.pageSize();
 406         return value;
 407     }
 408 
 409 }
< prev index next >