/* * Copyright (c) 2019, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package jdk.internal.misc; /** * A class used to expose details of the underlying hardware that * configure the operation of class Unsafe. This class is * package-private as the only intended client is class Unsafe. * All fields in this class must be static final constants. * * @since 13 * * @implNote * * The JVM injects hardware-specific values into all the static fields * of this class during JVM initialization. The static initialization * block exists to prevent the fields from being considered constant * variables, so the field values will be not be compiled directly into * any class that uses them. */ final class UnsafeConstants { /** * This constructor is private because the class is not meant to * be instantiated. */ private UnsafeConstants() {} /** * The size in bytes of a native pointer, as stored via {@link * #putAddress}. This value will be either 4 or 8. Note that the * sizes of other primitive types (as stored in native memory * blocks) is determined fully by their information content. * * @implNote * The actual value for this field is injected by the JVM. */ static final int ADDRESS_SIZE0; /** * The size in bytes of a native memory page (whatever that is). * This value will always be a power of two. * * @implNote * The actual value for this field is injected by the JVM. */ static final int PAGE_SIZE; /** * Flag whose value is true if and only if the native endianness * of this platform is big. * * @implNote * The actual value for this field is injected by the JVM. */ static final boolean BE; /** * Flag whose value is true if and only if the platform can * perform unaligned accesses * * @implNote * The actual value for this field is injected by the JVM. */ static final boolean UNALIGNED_ACCESS; static { ADDRESS_SIZE0 = 0; PAGE_SIZE = 0; BE = false; UNALIGNED_ACCESS = false; } }