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 }
|