Full list of intrinsic functions in HotSpot in JDK 7, 8, 9 and 10
An intrinsic or intrinsic function is a function that the JIT compiler can embed instead of calling Java and JNI code for optimization purposes. An important conclusion from this is that intrinsic functions are not available in interpreter mode. By default, HotSpot uses two JIT compilers C1 and C2, so an implementation of the intrinsic function for each of the JIT compilers may be available . Differences in the implementation of intrinsic functions for different JIT compilers are due to different internal representation of the code ( intermediate representation - IR ).
HotSpot implements several hundred intrinsics(their number is growing from release to release). A description of all intrinsic functions can be found in the OpenJDK sources in the file
The description is as follows:
Abstract was added in JDK 9
I will add that a bug was launched with a proposal to rename the annotation to
In JDK 10, the number of intrinsics has not changed and completely coincides with JDK 9.
Интринсик предпочтительнее Java-кода в плане производительности по двум основным причинам: во-первых, нет необходимости в дополнительных проверках (проверки на null, границы массивов и прочее), которые приводят к различным RuntimeException, во-вторых, в intrinsic-функции могут быть реализованы
По сравнению с JNI-вызовами отсутствуют накладные расходы, связанные с копированием данных (в native и обратно) и дополнительной прослойкой для контроля за Java-объектами, используемыми в native-коде.
Чтобы посмотреть, какие интринсики были подставлены, можно воспользоваться опцией
To make sure that intrification is possible (using intrinsic functions ) only in JIT compilation mode, you can run it together with the option
To disable the use of a specific intrinsic function , you can use the option
Important note from apangin :
At the same time, with JDK 9, the method is
HotSpot implements several hundred intrinsics(their number is growing from release to release). A description of all intrinsic functions can be found in the OpenJDK sources in the file
vmSymbols.hpp
. Below are the complete lists of intrinsics for JDK 7 ( vmSymbols.hpp ), JDK 8 ( vmSymbols.hpp ), JDK 9 ( vmSymbols.hpp ) and JDK 10 ( vmSymbols.hpp ). The description is as follows:
<название интринсика> .<заменяемый метод класса>
Intrinsic Functions in JDK 7
Intrinsic Functions in JDK 7
java.lang.Object
_hashCode java.lang.Object.hashCode()
_getClass java.lang.Object.getClass()
_clone java.lang.Object.clone()
_Object_init java.lang.Object()
java.lang.Math
_dabs java.lang.Math.abs(double)
_dsin java.lang.Math.sin(double)
_dcos java.lang.Math.cos(double)
_dtan java.lang.Math.tan(double)
_datan2 java.lang.Math.atan2(double, double)
_dsqrt java.lang.Math.sqrt(double)
_dlog java.lang.Math.log(double)
_dlog10 java.lang.Math.log10(double)
_dpow java.lang.Math.pow(double, double)
_dexp java.lang.Math.exp(double)
_min java.lang.Math.min(int, int)
_max java.lang.Math.max(int, int)
Double Float
_floatToRawIntBits java.lang.Float.floatToRawIntBits(float)
_floatToIntBits java.lang.Float.floatToIntBits(float)
_intBitsToFloat java.lang.Float.intBitsToFloat(int)
_doubleToRawLongBits java.lang.Double.doubleToRawLongBits(double)
_doubleToLongBits java.lang.Double.doubleToLongBits(double)
_longBitsToDouble java.lang.Double.longBitsToDouble(long)
Integer, Long, Character, Short
_numberOfLeadingZeros_i java.lang.Integer.numberOfLeadingZeros(int)
_numberOfLeadingZeros_l java.lang.Long.numberOfLeadingZeros(long)
_numberOfTrailingZeros_i java.lang.Integer.numberOfTrailingZeros(int)
_numberOfTrailingZeros_l java.lang.Long.numberOfTrailingZeros(long)
_bitCount_i java.lang.Integer.bitCount(int)
_bitCount_l java.lang.Long.bitCount(long)
_reverseBytes_i java.lang.Integer.reverseBytes(int)
_reverseBytes_l java.lang.Long.reverseBytes(long)
_reverseBytes_c java.lang.Character.reverseBytes(char)
_reverseBytes_s java.lang.Short.reverseBytes(short)
_Integer_toString java.lang.Integer.toString(int)
java.lang.System
_identityHashCode java.lang.System.identityHashCode(Object)
_currentTimeMillis java.lang.System.currentTimeMillis()
_nanoTime java.lang.System.nanoTime()
_arraycopy java.lang.System.arraycopy(Object, int, Object, int, int)
java.lang.Thread
_isInterrupted java.lang.Thread.isInterrupted(boolean)
_currentThread java.lang.Thread.currentThread()
java.lang.Class
_isAssignableFrom java.lang.Class.isAssignableFrom(Class)
_isInstance java.lang.Class.isInstance(Object)
_getModifiers java.lang.Class.getModifiers()
_isInterface java.lang.Class.isInterface()
_isArray java.lang.Class.isArray()
_isPrimitive java.lang.Class.isPrimitive()
_getSuperclass java.lang.Class.getSuperclass()
_getComponentType java.lang.Class.getComponentType()
Reflection
_getClassAccessFlags sun.reflect.Reflection.getClassAccessFlags(Class)
_getCallerClass sun.reflect.Reflection.getCallerClass(int)
_getLength java.lang.reflect.Array.getLength(Object)
_newArray java.lang.reflect.Array.newArray(Class, int)
_invoke java.lang.reflect.Method.invoke(Object, Object...)
java.util.Arrays
_copyOf java.util.Arrays.copyOf(Object[], int, Class)
_copyOfRange java.util.Arrays.copyOfRange(Object[], int, int, Class)
_equalsC java.util.Arrays.equals(char[], char[])
java.lang.String
_compareTo java.lang.String.compareTo(String)
_indexOf java.lang.String.indexOf(String)
_equals java.lang.String.equals(Object)
_String_String java.lang.String(String)
java.nio.Buffer
_checkIndex java.nio.Buffer.checkIndex(int)
java.lang.ref.Reference
_Reference_get java.lang.ref.Reference.get()
Cryptography
_aescrypt_encryptBlock com.sun.crypto.provider.AESCrypt.encryptBlock(byte[], in, byte[], int)
_aescrypt_decryptBlock com.sun.crypto.provider.AESCrypt.decryptBlock(byte[], in, byte[], int)
_cipherBlockChaining_encryptAESCrypt com.sun.crypto.provider.CipherBlockChaining.encrypt(byte[], int, int, byte[], int)
_cipherBlockChaining_decryptAESCrypt com.sun.crypto.provider.CipherBlockChaining.decrypt(byte[], int, int, byte[], int)
sun.misc.Unsafe
_allocateInstance sun.misc.Unsafe.allocateInstance(Class)
_copyMemory sun.misc.Unsafe.copyMemory(Object, long, Object, long, long)
_park sun.misc.Unsafe.park(boolean, long)
_unpark sun.misc.Unsafe.unpark(Object)
_getObject sun.misc.Unsafe.getObject(Object, long)
_getBoolean sun.misc.Unsafe.getBoolean(Object, long)
_getByte sun.misc.Unsafe.getByte(Object, long)
_getShort sun.misc.Unsafe.getShort(Object, long)
_getChar sun.misc.Unsafe.getChar(Object, long)
_getInt sun.misc.Unsafe.getInt(Object, long)
_getLong sun.misc.Unsafe.getLong(Object, long)
_getFloat sun.misc.Unsafe.getFloat(Object, long)
_getDouble sun.misc.Unsafe.getDouble(Object, long)
_putObject sun.misc.Unsafe.putObject(Object, long, Object)
_putBoolean sun.misc.Unsafe.putBoolean(Object, long, boolean)
_putByte sun.misc.Unsafe.putByte(Object, long, byte)
_putShort sun.misc.Unsafe.putShort(Object, long, short)
_putChar sun.misc.Unsafe.putChar(Object, long, char)
_putInt sun.misc.Unsafe.putInt(Object, long, int)
_putLong sun.misc.Unsafe.putLong(Object, long, long)
_putFloat sun.misc.Unsafe.putFloat(Object, long, float)
_putDouble sun.misc.Unsafe.putDouble(Object, long, double)
_getObjectVolatile sun.misc.Unsafe.getObjectVolatile(Object, long)
_getBooleanVolatile sun.misc.Unsafe.getBooleanVolatile(Object, long)
_getByteVolatile sun.misc.Unsafe.getByteVolatile(Object, long)
_getShortVolatile sun.misc.Unsafe.getShortVolatile(Object, long)
_getCharVolatile sun.misc.Unsafe.getCharVolatile(Object, long)
_getIntVolatile sun.misc.Unsafe.getIntVolatile(Object, long)
_getLongVolatile sun.misc.Unsafe.getLongVolatile(Object, long)
_getFloatVolatile sun.misc.Unsafe.getFloatVolatile(Object, long)
_getDoubleVolatile sun.misc.Unsafe.getDoubleVolatile(Object, long)
_putObjectVolatile sun.misc.Unsafe.putObjectVolatile(Object, long, Object)
_putBooleanVolatile sun.misc.Unsafe.putBooleanVolatile(Object, long, boolean)
_putByteVolatile sun.misc.Unsafe.putByteVolatile(Object, long, byte)
_putShortVolatile sun.misc.Unsafe.putShortVolatile(Object, long, short)
_putCharVolatile sun.misc.Unsafe.putCharVolatile(Object, long, char)
_putIntVolatile sun.misc.Unsafe.putIntVolatile(Object, long, int)
_putLongVolatile sun.misc.Unsafe.putLongVolatile(Object, long, long)
_putFloatVolatile sun.misc.Unsafe.putFloatVolatile(Object, long, float)
_putDoubleVolatile sun.misc.Unsafe.putDoubleVolatile(Object, long, double)
_getByte_raw sun.misc.Unsafe.getByte(long)
_getShort_raw sun.misc.Unsafe.getShort(long)
_getChar_raw sun.misc.Unsafe.getChar(long)
_getInt_raw sun.misc.Unsafe.getInt(long)
_getLong_raw sun.misc.Unsafe.getLong(long)
_getFloat_raw sun.misc.Unsafe.getFloat(long)
_getDouble_raw sun.misc.Unsafe.getDouble(long)
_getAddress_raw sun.misc.Unsafe.getAddress(long)
_putByte_raw sun.misc.Unsafe.putByte(long, byte)
_putShort_raw sun.misc.Unsafe.putShort(long, short)
_putChar_raw sun.misc.Unsafe.putChar(long, char)
_putInt_raw sun.misc.Unsafe.putInt(long, int)
_putLong_raw sun.misc.Unsafe.putLong(long, long)
_putFloat_raw sun.misc.Unsafe.putFloat(long, float)
_putDouble_raw sun.misc.Unsafe.putDouble(long, double)
_putAddress_raw sun.misc.Unsafe.putAddress(long, long)
_compareAndSwapObject sun.misc.Unsafe.compareAndSwapObject(Object, long, Object, Object)
_compareAndSwapLong sun.misc.Unsafe.compareAndSwapLong(Object, long, long, long)
_compareAndSwapInt sun.misc.Unsafe.compareAndSwapInt(Object, long, int, int)
_putOrderedObject sun.misc.Unsafe.putOrderedObject(Object, long, Object)
_putOrderedLong sun.misc.Unsafe.putOrderedLong(Object, long, long)
_putOrderedInt sun.misc.Unsafe.putOrderedInt(Object, long, int)
_getAndAddInt sun.misc.Unsafe.getAndAddInt(Object, long, int)
_getAndAddLong sun.misc.Unsafe.getAndAddLong(Object, long, long)
_getAndSetInt sun.misc.Unsafe.getAndSet(Object, long, int)
_getAndSetLong sun.misc.Unsafe.getAndSet(Object, long, long)
_getAndSetObject sun.misc.Unsafe.getAndSet(Object, long, Object)
_prefetchRead sun.misc.Unsafe.prefetchRead(Object, long)
_prefetchWrite sun.misc.Unsafe.prefetchWrite(Object, long)
_prefetchReadStatic sun.misc.Unsafe.prefetchReadStatic(Object, long)
_prefetchWriteStatic sun.misc.Unsafe.prefetchWriteStatic(Object, long)
lava.lang.Throwable
_fillInStackTrace java.lang.Throwable.fillInStackTrace()
java.lang.StringBuilder
_StringBuilder_void java.lang.StringBuilder()
_StringBuilder_int java.lang.StringBuilder(int)
_StringBuilder_String java.lang.StringBuilder(String)
_StringBuilder_append_char java.lang.StringBuilder.append(char)
_StringBuilder_append_int java.lang.StringBuilder.append(int)
_StringBuilder_append_String java.lang.StringBuilder.append(String)
_StringBuilder_toString java.lang.StringBuilder.toString()
java.lang.StringBuffer
_StringBuffer_void java.lang.StringBuffer()
_StringBuffer_int java.lang.StringBuffer(int)
_StringBuffer_String java.lang.StringBuffer(String)
_StringBuffer_append_char java.lang.StringBuffer.append(char)
_StringBuffer_append_int java.lang.StringBuffer.append(int)
_StringBuffer_append_String java.lang.StringBuffer.append(String)
_StringBuffer_toString java.lang.StringBuffer.toString()
java.lang.invoke.MethodHandle
_invokeGeneric java.lang.invoke.MethodHandle.invoke*
_invokeBasic java.lang.invoke.MethodHandle.invokeBasic*
_linkToVirtual java.lang.invoke.MethodHandle.linkToVirtual*
_linkToStatic java.lang.invoke.MethodHandle.linkToStatic*
_linkToSpecial java.lang.invoke.MethodHandle.linkToSpecial*
_linkToInterface java.lang.invoke.MethodHandle.linkToInterface*
_compiledLambdaForm java.lang.invoke.MethodHandle.*
Boxing and Unboxing
_booleanValue java.lang.Boolean.booleanValue()
_byteValue java.lang.Byte.byteValue()
_charValue java.lang.Character.charValue()
_shortValue java.lang.Short.shortValue()
_intValue java.lang.Integer.intValue()
_longValue java.lang.Long.longValue()
_floatValue java.lang.Float.floatValue()
_doubleValue java.lang.Double.doubleValue()
_Boolean_valueOf java.lang.Boolean.valueOf(boolean)
_Byte_valueOf java.lang.Byte.valueOf(byte)
_Character_valueOf java.lang.Character.valueOf(char)
_Short_valueOf java.lang.Short.valueOf(short)
_Integer_valueOf java.lang.Integer.valueOf(int)
_Long_valueOf java.lang.Long.valueOf(long)
_Float_valueOf java.lang.Float.valueOf(float)
_Double_valueOf java.lang.Double.valueOf(double)
Intrinsic Functions in JDK 8
Intrinsic Functions in JDK 8
В JDK 8 в класс
В JDK 8 метод
В класс
Для нескольких методов
Только в JDK 8 появились интринсики для
Два интринсика для ранее существовавших метода
Три новых метода
Новый метод
java.lang.Object
_hashCode java.lang.Object.hashCode()
_getClass java.lang.Object.getClass()
_clone java.lang.Object.clone()
_Object_init java.lang.Object()
java.lang.Math
_dabs java.lang.Math.abs(double)
_dsin java.lang.Math.sin(double)
_dcos java.lang.Math.cos(double)
_dtan java.lang.Math.tan(double)
_datan2 java.lang.Math.atan2(double, double)
_dsqrt java.lang.Math.sqrt(double)
_dlog java.lang.Math.log(double)
_dlog10 java.lang.Math.log10(double)
_dpow java.lang.Math.pow(double, double)
_dexp java.lang.Math.exp(double)
_min java.lang.Math.min(int, int)
_max java.lang.Math.max(int, int)
_addExactI java.lang.Math.addExact(int, int)
_addExactL java.lang.Math.addExact(long, long)
_decrementExactI java.lang.Math.decrementExact(int)
_decrementExactL java.lang.Math.decrementExact(long)
_incrementExactI java.lang.Math.incrementExact(int)
_incrementExactL java.lang.Math.incrementExact(long)
_multiplyExactI java.lang.Math.multiplyExact(int, int)
_multiplyExactL java.lang.Math.multiplyExact(long, long)
_negateExactI java.lang.Math.negateExact(int)
_negateExactL java.lang.Math.negateExact(long)
_subtractExactI java.lang.Math.subtractExact(int, int)
_subtractExactL java.lang.Math.subtractExact(long, long)
В JDK 8 в класс
java.lang.Math
были добавлены новые методы и для них соответствующие intrinsic-функции.Double, Float
_floatToRawIntBits java.lang.Float.floatToRawIntBits(float)
_floatToIntBits java.lang.Float.floatToIntBits(float)
_intBitsToFloat java.lang.Float.intBitsToFloat(int)
_doubleToRawLongBits java.lang.Double.doubleToRawLongBits(double)
_doubleToLongBits java.lang.Double.doubleToLongBits(double)
_longBitsToDouble java.lang.Double.longBitsToDouble(long)
Integer, Long, Character, Short
_numberOfLeadingZeros_i java.lang.Integer.numberOfLeadingZeros(int)
_numberOfLeadingZeros_l java.lang.Long.numberOfLeadingZeros(long)
_numberOfTrailingZeros_i java.lang.Integer.numberOfTrailingZeros(int)
_numberOfTrailingZeros_l java.lang.Long.numberOfTrailingZeros(long)
_bitCount_i java.lang.Integer.bitCount(int)
_bitCount_l java.lang.Long.bitCount(long)
_reverseBytes_i java.lang.Integer.reverseBytes(int)
_reverseBytes_l java.lang.Long.reverseBytes(long)
_reverseBytes_c java.lang.Character.reverseBytes(char)
_reverseBytes_s java.lang.Short.reverseBytes(short)
_Integer_toString java.lang.Integer.toString(int)
java.lang.System
_identityHashCode java.lang.System.identityHashCode(Object)
_currentTimeMillis java.lang.System.currentTimeMillis()
_nanoTime java.lang.System.nanoTime()
_arraycopy java.lang.System.arraycopy(Object, int, Object, int, int)
java.lang.Thread
_isInterrupted java.lang.Thread.isInterrupted(boolean)
_currentThread java.lang.Thread.currentThread()
java.lang.Class
_isAssignableFrom java.lang.Class.isAssignableFrom(Class)
_isInstance java.lang.Class.isInstance(Object)
_getModifiers java.lang.Class.getModifiers()
_isInterface java.lang.Class.isInterface()
_isArray java.lang.Class.isArray()
_isPrimitive java.lang.Class.isPrimitive()
_getSuperclass java.lang.Class.getSuperclass()
_getComponentType java.lang.Class.getComponentType()
Reflection
_getClassAccessFlags sun.reflect.Reflection.getClassAccessFlags(Class)
_getCallerClass sun.reflect.Reflection.getCallerClass()
_getLength java.lang.reflect.Array.getLength(Object)
_newArray java.lang.reflect.Array.newArray(Class, int)
_invoke java.lang.reflect.Method.invoke(Object, Object...)
В JDK 8 метод
sun.reflect.reflection.getCallerClass(int)
помечен как @Deprecated
, вмеcто него используется метод sun.reflect.Reflection.getCallerClass()
.java.util.Arrays
_copyOf java.util.Arrays.copyOf(Object[], int, Class)
_copyOfRange java.util.Arrays.copyOfRange(Object[], int, int, Class)
_equalsC java.util.Arrays.equals(char[], char[])
java.lang.String
_compareTo java.lang.String.compareTo(String)
_indexOf java.lang.String.indexOf(String)
_equals java.lang.String.equals(Object)
_String_String java.lang.String(String)
java.nio.Buffer
_checkIndex java.nio.Buffer.checkIndex(int)
sun.nio.cs.ISO_8859_1$Encoder
_encodeISOArray sun.nio.cs.ISO_8859_1.Encoder.encodeISOArray(char[], int, byte[], int, int)
В класс
sun.nio.cs.ISO_8859_1$Encoder
был добавлен новый метод encodeISOArray
.java.math.BigInteger
_multiplyToLen java.math.BigInteger.multiplyToLen(int[], int, int[], int, int[])
_squareToLen java.math.BigInteger.squareToLen(int[], int, int[], int)
_mulAdd java.math.BigInteger.mulAdd(int[], int[], int, int, int)
_montgomeryMultiply java.math.BigInteger.montgomeryMultiply(int[], int[], int[], int, long, int[])
_montgomerySquare java.math.BigInteger.montgomerySquare(int[], int[], int, long, int[])
Для нескольких методов
java.math.BigInteger
в JDK 8 появились свои интринсики.java.lang.ref.Reference
_Reference_get java.lang.ref.Reference.get()
Cryptography
_aescrypt_encryptBlock com.sun.crypto.provider.AESCrypt.encryptBlock(byte[], in, byte[], int)
_aescrypt_decryptBlock com.sun.crypto.provider.AESCrypt.decryptBlock(byte[], in, byte[], int)
_cipherBlockChaining_encryptAESCrypt com.sun.crypto.provider.CipherBlockChaining.encrypt(byte[], int, int, byte[], int)
_cipherBlockChaining_decryptAESCrypt com.sun.crypto.provider.CipherBlockChaining.decrypt(byte[], int, int, byte[], int)
sun.security.provider.*
_sha_implCompress sun.security.provider.SHA.implCompress(byte[], int)
_sha2_implCompress sun.security.provider.SHA2.implCompress(byte[], int)
_sha5_implCompress sun.security.provider.SHA5.implCompress(byte[], int)
_digestBase_implCompressMB sun.security.provider.Digestbase.implCompressMultiBlock(byte[], int, int)
Только в JDK 8 появились интринсики для
implCompress()
. Добавлен новый метод sun.security.provider.DigestBase.implCompressMultiBlock()
.java.util.zip.CRC32
_updateCRC32 java.util.zip.CRC32.update(int, int)
_updateBytesCRC32 java.util.zip.CRC32.updateBytes(int, byte[], int, int)
_updateByteBufferCRC32 java.util.zip.CRC32.updateByteBuffer(int, long, int, int)
Два интринсика для ранее существовавших метода
update
и updateBytes
. Метод updateByteBuffer
появился только в JDK 8.sun.misc.Unsafe
_allocateInstance sun.misc.Unsafe.allocateInstance(Class)
_copyMemory sun.misc.Unsafe.copyMemory(Object, long, Object, long, long)
_park sun.misc.Unsafe.park(boolean, long)
_unpark sun.misc.Unsafe.unpark(Object)
_loadFence sun.misc.Unsafe.loadFence()
_storeFence sun.misc.Unsafe.storeFence()
_fullFence sun.misc.Unsafe.fullFence()
_getObject sun.misc.Unsafe.getObject(Object, long)
_getBoolean sun.misc.Unsafe.getBoolean(Object, long)
_getByte sun.misc.Unsafe.getByte(Object, long)
_getShort sun.misc.Unsafe.getShort(Object, long)
_getChar sun.misc.Unsafe.getChar(Object, long)
_getInt sun.misc.Unsafe.getInt(Object, long)
_getLong sun.misc.Unsafe.getLong(Object, long)
_getFloat sun.misc.Unsafe.getFloat(Object, long)
_getDouble sun.misc.Unsafe.getDouble(Object, long)
_putObject sun.misc.Unsafe.putObject(Object, long, Object)
_putBoolean sun.misc.Unsafe.putBoolean(Object, long, boolean)
_putByte sun.misc.Unsafe.putByte(Object, long, byte)
_putShort sun.misc.Unsafe.putShort(Object, long, short)
_putChar sun.misc.Unsafe.putChar(Object, long, char)
_putInt sun.misc.Unsafe.putInt(Object, long, int)
_putLong sun.misc.Unsafe.putLong(Object, long, long)
_putFloat sun.misc.Unsafe.putFloat(Object, long, float)
_putDouble sun.misc.Unsafe.putDouble(Object, long, double)
_getObjectVolatile sun.misc.Unsafe.getObjectVolatile(Object, long)
_getBooleanVolatile sun.misc.Unsafe.getBooleanVolatile(Object, long)
_getByteVolatile sun.misc.Unsafe.getByteVolatile(Object, long)
_getShortVolatile sun.misc.Unsafe.getShortVolatile(Object, long)
_getCharVolatile sun.misc.Unsafe.getCharVolatile(Object, long)
_getIntVolatile sun.misc.Unsafe.getIntVolatile(Object, long)
_getLongVolatile sun.misc.Unsafe.getLongVolatile(Object, long)
_getFloatVolatile sun.misc.Unsafe.getFloatVolatile(Object, long)
_getDoubleVolatile sun.misc.Unsafe.getDoubleVolatile(Object, long)
_putObjectVolatile sun.misc.Unsafe.putObjectVolatile(Object, long, Object)
_putBooleanVolatile sun.misc.Unsafe.putBooleanVolatile(Object, long, boolean)
_putByteVolatile sun.misc.Unsafe.putByteVolatile(Object, long, byte)
_putShortVolatile sun.misc.Unsafe.putShortVolatile(Object, long, short)
_putCharVolatile sun.misc.Unsafe.putCharVolatile(Object, long, char)
_putIntVolatile sun.misc.Unsafe.putIntVolatile(Object, long, int)
_putLongVolatile sun.misc.Unsafe.putLongVolatile(Object, long, long)
_putFloatVolatile sun.misc.Unsafe.putFloatVolatile(Object, long, float)
_putDoubleVolatile sun.misc.Unsafe.putDoubleVolatile(Object, long, double)
_getByte_raw sun.misc.Unsafe.getByte(long)
_getShort_raw sun.misc.Unsafe.getShort(long)
_getChar_raw sun.misc.Unsafe.getChar(long)
_getInt_raw sun.misc.Unsafe.getInt(long)
_getLong_raw sun.misc.Unsafe.getLong(long)
_getFloat_raw sun.misc.Unsafe.getFloat(long)
_getDouble_raw sun.misc.Unsafe.getDouble(long)
_getAddress_raw sun.misc.Unsafe.getAddress(long)
_putByte_raw sun.misc.Unsafe.putByte(long, byte)
_putShort_raw sun.misc.Unsafe.putShort(long, short)
_putChar_raw sun.misc.Unsafe.putChar(long, char)
_putInt_raw sun.misc.Unsafe.putInt(long, int)
_putLong_raw sun.misc.Unsafe.putLong(long, long)
_putFloat_raw sun.misc.Unsafe.putFloat(long, float)
_putDouble_raw sun.misc.Unsafe.putDouble(long, double)
_putAddress_raw sun.misc.Unsafe.putAddress(long, long)
_compareAndSwapObject sun.misc.Unsafe.compareAndSwapObject(Object, long, Object, Object)
_compareAndSwapLong sun.misc.Unsafe.compareAndSwapLong(Object, long, long, long)
_compareAndSwapInt sun.misc.Unsafe.compareAndSwapInt(Object, long, int, int)
_putOrderedObject sun.misc.Unsafe.putOrderedObject(Object, long, Object)
_putOrderedLong sun.misc.Unsafe.putOrderedLong(Object, long, long)
_putOrderedInt sun.misc.Unsafe.putOrderedInt(Object, long, int)
_getAndAddInt sun.misc.Unsafe.getAndAddInt(Object, long, int)
_getAndAddLong sun.misc.Unsafe.getAndAddLong(Object, long, long)
_getAndSetInt sun.misc.Unsafe.getAndSet(Object, long, int)
_getAndSetLong sun.misc.Unsafe.getAndSet(Object, long, long)
_getAndSetObject sun.misc.Unsafe.getAndSet(Object, long, Object)
_prefetchRead sun.misc.Unsafe.prefetchRead(Object, long)
_prefetchWrite sun.misc.Unsafe.prefetchWrite(Object, long)
_prefetchReadStatic sun.misc.Unsafe.prefetchReadStatic(Object, long)
_prefetchWriteStatic sun.misc.Unsafe.prefetchWriteStatic(Object, long)
Три новых метода
sun.misc.Unsafe.*fence()
(memory barriers).lava.lang.Throwable
_fillInStackTrace java.lang.Throwable.fillInStackTrace()
java.lang.StringBuilder
_StringBuilder_void java.lang.StringBuilder()
_StringBuilder_int java.lang.StringBuilder(int)
_StringBuilder_String java.lang.StringBuilder(String)
_StringBuilder_append_char java.lang.StringBuilder.append(char)
_StringBuilder_append_int java.lang.StringBuilder.append(int)
_StringBuilder_append_String java.lang.StringBuilder.append(String)
_StringBuilder_toString java.lang.StringBuilder.toString()
java.lang.StringBuffer
_StringBuffer_void java.lang.StringBuffer()
_StringBuffer_int java.lang.StringBuffer(int)
_StringBuffer_String java.lang.StringBuffer(String)
_StringBuffer_append_char java.lang.StringBuffer.append(char)
_StringBuffer_append_int java.lang.StringBuffer.append(int)
_StringBuffer_append_String java.lang.StringBuffer.append(String)
_StringBuffer_toString java.lang.StringBuffer.toString()
java.lang.invoke.MethodHandle
_invokeGeneric java.lang.invoke.MethodHandle.invoke*
_invokeBasic java.lang.invoke.MethodHandle.invokeBasic*
_linkToVirtual java.lang.invoke.MethodHandle.linkToVirtual*
_linkToStatic java.lang.invoke.MethodHandle.linkToStatic*
_linkToSpecial java.lang.invoke.MethodHandle.linkToSpecial*
_linkToInterface java.lang.invoke.MethodHandle.linkToInterface*
_compiledLambdaForm java.lang.invoke.MethodHandle.*
_profileBoolean java.lang.invoke.MethodHandleImpl.profileBoolean(boolean, int[])
Новый метод
java.lang.invoke.MethodHandleImpl.profileBoolean()
. Комментарий разработчиков над этим методом: Intrinsified by C2. Counters are used during parsing to calculate branch frequencies.
.Boxing и Unboxing
_booleanValue java.lang.Boolean.booleanValue()
_byteValue java.lang.Byte.byteValue()
_charValue java.lang.Character.charValue()
_shortValue java.lang.Short.shortValue()
_intValue java.lang.Integer.intValue()
_longValue java.lang.Long.longValue()
_floatValue java.lang.Float.floatValue()
_doubleValue java.lang.Double.doubleValue()
_Boolean_valueOf java.lang.Boolean.valueOf(boolean)
_Byte_valueOf java.lang.Byte.valueOf(byte)
_Character_valueOf java.lang.Character.valueOf(char)
_Short_valueOf java.lang.Short.valueOf(short)
_Integer_valueOf java.lang.Integer.valueOf(int)
_Long_valueOf java.lang.Long.valueOf(long)
_Float_valueOf java.lang.Float.valueOf(float)
_Double_valueOf java.lang.Double.valueOf(double)
Intrinsic-функции в JDK 9
Abstract was added in JDK 9
jdk.internal.HotSpotIntrinsicCandidate
, which represents that method call marked @HotSpotIntrinsicCandidate
, it can be replaced intrinsikom . “Maybe” in this context means that having an intrinsic function for the corresponding method does not guarantee that the JIT compiler will use the intrinsic . I will add that a bug was launched with a proposal to rename the annotation to
@IntrinsicCandidate
and not produce VM-specific entities, as it was with sun.misc
.Intrinsic Functions in JDK 9
In JDK 9, for
В JDK 9 в класс
В JDK 9 появился новый метод
Удалена intrinsic-функция для
В JDK 9 добавлен интринсик для метода
В JDK 9 добавлен intrinsic для
В связи с изменениями в классе
Новый класс в JDK 9 с разными вспомогательными методами. Интринсик добавлен для метода проверки попадания значения в заданные границы.
Ещё один новый класс в JDK 9.
Удалены прочие intrinsic-функции (
В JDK 9 подвергся рефакторингу класс
Новый класс в JDK 9.
В JDK 9 реализация метода
Рефакторинг
Ещё код, подвергшийся рефакторингу в JDK 9.
Новый класс
Класс
Из JDK 9 удалена intrinsic-функция для
Новый метод
Intrinsic for the method appeared in JDK 9
java.lang.Object
_hashCode java.lang.Object.hashCode()
_getClass java.lang.Object.getClass()
_clone java.lang.Object.clone()
_notify java.lang.Object.notify()
_notifyAll java.lang.Object.notifyAll()
_Object_init java.lang.Object()
In JDK 9, for
Object
added a couple of intrinsic functions : _notify
and _notifyAll
.java.lang.Math
_dabs java.lang.Math.abs(double)
_dsin java.lang.Math.sin(double)
_dcos java.lang.Math.cos(double)
_dtan java.lang.Math.tan(double)
_datan2 java.lang.Math.atan2(double, double)
_dsqrt java.lang.Math.sqrt(double)
_dlog java.lang.Math.log(double)
_dlog10 java.lang.Math.log10(double)
_dpow java.lang.Math.pow(double, double)
_dexp java.lang.Math.exp(double)
_min java.lang.Math.min(int, int)
_max java.lang.Math.max(int, int)
_addExactI java.lang.Math.addExact(int, int)
_addExactL java.lang.Math.addExact(long, long)
_decrementExactI java.lang.Math.decrementExact(int)
_decrementExactL java.lang.Math.decrementExact(long)
_incrementExactI java.lang.Math.incrementExact(int)
_incrementExactL java.lang.Math.incrementExact(long)
_multiplyExactI java.lang.Math.multiplyExact(int, int)
_multiplyExactL java.lang.Math.multiplyExact(long, long)
_negateExactI java.lang.Math.negateExact(int)
_negateExactL java.lang.Math.negateExact(long)
_subtractExactI java.lang.Math.subtractExact(int, int)
_subtractExactL java.lang.Math.subtractExact(long, long)
_fmaD java.lang.Math.fma(double, double, double)
_fmaF java.lang.Math.fma(float, float, float)
В JDK 9 в класс
java.lang.Math
добавили пару методов fma
(~ a * b + c
) и для них соответствующие intrinsic-функции.Double, Float
_floatToRawIntBits java.lang.Float.floatToRawIntBits(float)
_floatToIntBits java.lang.Float.floatToIntBits(float)
_intBitsToFloat java.lang.Float.intBitsToFloat(int)
_doubleToRawLongBits java.lang.Double.doubleToRawLongBits(double)
_doubleToLongBits java.lang.Double.doubleToLongBits(double)
_longBitsToDouble java.lang.Double.longBitsToDouble(long)
Integer, Long, Character, Short
_numberOfLeadingZeros_i java.lang.Integer.numberOfLeadingZeros(int)
_numberOfLeadingZeros_l java.lang.Long.numberOfLeadingZeros(long)
_numberOfTrailingZeros_i java.lang.Integer.numberOfTrailingZeros(int)
_numberOfTrailingZeros_l java.lang.Long.numberOfTrailingZeros(long)
_bitCount_i java.lang.Integer.bitCount(int)
_bitCount_l java.lang.Long.bitCount(long)
_reverseBytes_i java.lang.Integer.reverseBytes(int)
_reverseBytes_l java.lang.Long.reverseBytes(long)
_reverseBytes_c java.lang.Character.reverseBytes(char)
_reverseBytes_s java.lang.Short.reverseBytes(short)
_Integer_toString java.lang.Integer.toString(int)
java.lang.System
_identityHashCode java.lang.System.identityHashCode(Object)
_currentTimeMillis java.lang.System.currentTimeMillis()
_nanoTime java.lang.System.nanoTime()
_arraycopy java.lang.System.arraycopy(Object, int, Object, int, int)
java.lang.Thread
_isInterrupted java.lang.Thread.isInterrupted(boolean)
_currentThread java.lang.Thread.currentThread()
_onSpinWait java.lang.Thread.onSpinWait()
В JDK 9 появился новый метод
onSpinWait
— реализация busy waiting.java.lang.Class
_isAssignableFrom java.lang.Class.isAssignableFrom(Class)
_isInstance java.lang.Class.isInstance(Object)
_getModifiers java.lang.Class.getModifiers()
_isInterface java.lang.Class.isInterface()
_isArray java.lang.Class.isArray()
_isPrimitive java.lang.Class.isPrimitive()
_getSuperclass java.lang.Class.getSuperclass()
_Class_cast java.lang.Class.cast(Object)
Удалена intrinsic-функция для
java.lang.Class.getComponentType()
(getComponentType
перестал быть native-методом).В JDK 9 добавлен интринсик для метода
cast
.Reflection
_getClassAccessFlags sun.reflect.Reflection.getClassAccessFlags(Class)
_getCallerClass sun.reflect.Reflection.getCallerClass()
_getLength java.lang.reflect.Array.getLength(Object)
_newArray java.lang.reflect.Array.newArray(Class, int)
_invoke java.lang.reflect.Method.invoke(Object, Object...)
java.util.Arrays
_copyOf java.util.Arrays.copyOf(Object[], int, Class)
_copyOfRange java.util.Arrays.copyOfRange(Object[], int, int, Class)
_equalsC java.util.Arrays.equals(char[], char[])
_equalsB java.util.Arrays.equals(boolean[], boolean[])
В JDK 9 добавлен intrinsic для
java.util.Arrays.equals(boolean[], boolean[])
.StringUTF16 и StringLatin1
_compressStringC java.lang.StringUTF16.compress(char[], int, byte[], int, int)
_compressStringB java.lang.StringUTF16.compress(byte[], int, byte[], int, int)
_inflateStringC java.lang.StringLatin1.inflate(byte[], int, char[], int, int)
_inflateStringB java.lang.StringLatin1.inflate(byte[], int, byte[], int, int)
_toBytesStringU java.lang.StringUTF16.toBytes(char[], int, int)
_getCharsStringU java.lang.StringUTF16.getChars(byte[], int, int, char[], int)
_getCharStringU java.lang.StringUTF16.getChar(byte[], int)
_putCharStringU java.lang.StringUTF16.putChar(byte[] int, int)
_compareToL java.lang.StringLatin1.compareTo(byte[], byte[])
_compareToU java.lang.StringUTF16.compareTo(byte[], byte[])
_compareToLU java.lang.StringLatin1.compareToUTF16(byte[], byte[])
_compareToUL java.lang.StringUTF16.compareToLatin1(byte[], byte[])
_indexOfL java.lang.StringLatin1.indexOf(byte[], byte[])
_indexOfU java.lang.StringUTF16.indexOf(byte[], byte[])
_indexOfUL java.lang.StringUTF16.indexOfLatin1(byte[], byte[])
_indexOfIL java.lang.StringLatin1.indexOf(byte[], int, byte[], int, int)
_indexOfIU java.lang.StringUTF16.indexOf(byte[], int, byte[], int, int)
_indexOfIUL java.lang.StringUTF16.indexOfLatin1(byte[], int, byte[], int, int)
_indexOfU_char java.lang.StringUTF16.indexOfChar(byte[], int, int, int)
_equalsL java.lang.StringLatin1.equals(byte[], byte[])
_equalsU java.lang.StringUTF16.equals(byte[], byte[])
В связи с изменениями в классе
String
в JDK 9 — JEP-254, появились два новых класса StringUTF16
и StringLatin1
.jdk.internal.util.Preconditions
_Preconditions_checkIndex jdk.internal.util.Preconditions.checkIndex(int, int, java.util.function.BiFunction)
Новый класс в JDK 9 с разными вспомогательными методами. Интринсик добавлен для метода проверки попадания значения в заданные границы.
java.lang.StringCoding
_hasNegatives java.lang.StringCoding.hasNegatives(byte[], int, int)
_encodeByteISOArray java.lang.StringCoding.encodeISOArray(byte[], int, byte[], int, int)
Ещё один новый класс в JDK 9.
java.lang.String
_String_String java.lang.String(String)
Удалены прочие intrinsic-функции (
_compareTo
, _equals
, _indexOf
), т.к. реализация соответствующих методов перешла к классам StringUTF16
и StringLatin1
. Подробнее об изменениях в классе String
в JEP-254.java.nio.Buffer
_checkIndex java.nio.Buffer.checkIndex(int)
sun.nio.cs.ISO_8859_1$Encoder
_encodeISOArray sun.nio.cs.ISO_8859_1.Encoder.encodeISOArray(char[], int, byte[], int, int)
В JDK 9 подвергся рефакторингу класс
sun.nio.cs.ISO_8859_1$Encoder
: был добавлен новый метод implEncodeISOArray
, старый интринсик привязан к новому методу.java.math.BigInteger
_multiplyToLen java.math.BigInteger.multiplyToLen(int[], int, int[], int, int[])
_squareToLen java.math.BigInteger.squareToLen(int[], int, int[], int)
_mulAdd java.math.BigInteger.mulAdd(int[], int[], int, int, int)
_montgomeryMultiply java.math.BigInteger.montgomeryMultiply(int[], int[], int[], int, long, int[])
_montgomerySquare java.math.BigInteger.montgomerySquare(int[], int[], int, long, int[])
java.util.ArraysSupport
_vectorizedMismatch java.util.ArraysSupport.vectorizedMismatch(Object, long, Object, long, int, int)
Новый класс в JDK 9.
java.lang.ref.Reference
_Reference_get java.lang.ref.Reference.get()
Cryptography
_aescrypt_encryptBlock com.sun.crypto.provider.AESCrypt.encryptBlock(byte[], in, byte[], int)
_aescrypt_decryptBlock com.sun.crypto.provider.AESCrypt.decryptBlock(byte[], in, byte[], int)
_cipherBlockChaining_encryptAESCrypt com.sun.crypto.provider.CipherBlockChaining.encrypt(byte[], int, int, byte[], int)
_cipherBlockChaining_decryptAESCrypt com.sun.crypto.provider.CipherBlockChaining.decrypt(byte[], int, int, byte[], int)
_counterMode_AESCrypt com.sun.crypto.provider.CounterMode.implCrypt(byte[], int, int, byte[], int)
_ghash_processBlocks com.sun.crypto.provider.GHASH.processBlocks(byte[], int, int, long[], long[])
В JDK 9 реализация метода
CounterMode.crypt()
вынесена в метод implCrypt
с добавлением интринсика. Аналогичным образом отрефакторен GHASH
.sun.security.provider.*
_sha_implCompress sun.security.provider.SHA.implCompress(byte[], int)
_sha2_implCompress sun.security.provider.SHA2.implCompress(byte[], int)
_sha5_implCompress sun.security.provider.SHA5.implCompress(byte[], int)
_digestBase_implCompressMB sun.security.provider.DigestBase.implCompressMultiBlock0(byte[], int, int)
Рефакторинг
DigestBase
в JDK 9.java.util.zip.CRC32 и java.util.zip.CRC32C
_updateCRC32 java.util.zip.CRC32.update(int2_int_signature)
_updateBytesCRC32 java.util.zip.CRC32.updateBytes0(updateBytes_signature)
_updateByteBufferCRC32 java.util.zip.CRC32.updateByteBuffer0(updateByteBuffer_signature)
_updateBytesCRC32C java.util.zip.CRC32C.updateBytes(int, byte[], int, int)
_updateDirectByteBufferCRC32C java.util.zip.CRC32C.updateDirectByteBuffer(int, long, int, int)
_updateBytesAdler32 java.util.zip.Adler32.updateBytes(int, byte[], int, int)
_updateByteBufferAdler32 java.util.zip.Adler32.updateByteBuffer(int, long, int, int)
Ещё код, подвергшийся рефакторингу в JDK 9.
Новый класс
java.util.zip.CRC32C
.jdk.internal.misc.Unsafe
_allocateInstance jdk.internal.misc.Unsafe.allocateInstance(Class)
_allocateUninitializedArray jdk.internal.misc.Unsafe.allocateUninitializedArray0(Class, int)
_copyMemory jdk.internal.misc.Unsafe.copyMemory0(Object, long, Object, long, long)
_park jdk.internal.misc.Unsafe.park(boolean, long)
_unpark jdk.internal.misc.Unsafe.unpark(Object)
_loadFence jdk.internal.misc.Unsafe.loadFence()
_storeFence jdk.internal.misc.Unsafe.storeFence()
_fullFence jdk.internal.misc.Unsafe.fullFence()
_getObject jdk.internal.misc.Unsafe.getObject(Object, long)
_getBoolean jdk.internal.misc.Unsafe.getBoolean(Object, long)
_getByte jdk.internal.misc.Unsafe.getByte(Object, long)
_getShort jdk.internal.misc.Unsafe.getShort(Object, long)
_getChar jdk.internal.misc.Unsafe.getChar(Object, long)
_getInt jdk.internal.misc.Unsafe.getInt(Object, long)
_getLong jdk.internal.misc.Unsafe.getLong(Object, long)
_getFloat jdk.internal.misc.Unsafe.getFloat(Object, long)
_getDouble jdk.internal.misc.Unsafe.getDouble(Object, long)
_putObject jdk.internal.misc.Unsafe.putObject(Object, long, Object)
_putBoolean jdk.internal.misc.Unsafe.putBoolean(Object, long, boolean)
_putByte jdk.internal.misc.Unsafe.putByte(Object, long, byte)
_putShort jdk.internal.misc.Unsafe.putShort(Object, long, short)
_putChar jdk.internal.misc.Unsafe.putChar(Object, long, char)
_putInt jdk.internal.misc.Unsafe.putInt(Object, long, int)
_putLong jdk.internal.misc.Unsafe.putLong(Object, long, long)
_putFloat jdk.internal.misc.Unsafe.putFloat(Object, long, float)
_putDouble jdk.internal.misc.Unsafe.putDouble(Object, long, double)
_getObjectVolatile jdk.internal.misc.Unsafe.getObjectVolatile(Object, long)
_getBooleanVolatile jdk.internal.misc.Unsafe.getBooleanVolatile(Object, long)
_getByteVolatile jdk.internal.misc.Unsafe.getByteVolatile(Object, long)
_getShortVolatile jdk.internal.misc.Unsafe.getShortVolatile(Object, long)
_getCharVolatile jdk.internal.misc.Unsafe.getCharVolatile(Object, long)
_getIntVolatile jdk.internal.misc.Unsafe.getIntVolatile(Object, long)
_getLongVolatile jdk.internal.misc.Unsafe.getLongVolatile(Object, long)
_getFloatVolatile jdk.internal.misc.Unsafe.getFloatVolatile(Object, long)
_getDoubleVolatile jdk.internal.misc.Unsafe.getDoubleVolatile(Object, long)
_putObjectVolatile jdk.internal.misc.Unsafe.putObjectVolatile(Object, long, Object)
_putBooleanVolatile jdk.internal.misc.Unsafe.putBooleanVolatile(Object, long, boolean)
_putByteVolatile jdk.internal.misc.Unsafe.putByteVolatile(Object, long, byte)
_putShortVolatile jdk.internal.misc.Unsafe.putShortVolatile(Object, long, short)
_putCharVolatile jdk.internal.misc.Unsafe.putCharVolatile(Object, long, char)
_putIntVolatile jdk.internal.misc.Unsafe.putIntVolatile(Object, long, int)
_putLongVolatile jdk.internal.misc.Unsafe.putLongVolatile(Object, long, long)
_putFloatVolatile jdk.internal.misc.Unsafe.putFloatVolatile(Object, long, float)
_putDoubleVolatile jdk.internal.misc.Unsafe.putDoubleVolatile(Object, long, double)
_getObjectOpaque jdk.internal.misc.Unsafe.getObjectOpaque(Object, long)
_getBooleanOpaque jdk.internal.misc.Unsafe.getBooleanOpaque(Object, long)
_getByteOpaque jdk.internal.misc.Unsafe.getByteOpaque(Object, long)
_getShortOpaque jdk.internal.misc.Unsafe.getShortOpaque(Object, long)
_getCharOpaque jdk.internal.misc.Unsafe.getCharOpaque(Object, long)
_getIntOpaque jdk.internal.misc.Unsafe.getIntOpaque(Object, long)
_getLongOpaque jdk.internal.misc.Unsafe.getLongOpaque(Object, long)
_getFloatOpaque jdk.internal.misc.Unsafe.getFloatOpaque(Object, long)
_getDoubleOpaque jdk.internal.misc.Unsafe.getDoubleOpaque(Object, long)
_putObjectOpaque jdk.internal.misc.Unsafe.putObjectOpaque(Object, long, Object)
_putBooleanOpaque jdk.internal.misc.Unsafe.putBooleanOpaque(Object, long, boolean)
_putByteOpaque jdk.internal.misc.Unsafe.putByteOpaque(Object, long, byte)
_putShortOpaque jdk.internal.misc.Unsafe.putShortOpaque(Object, long, short)
_putCharOpaque jdk.internal.misc.Unsafe.putCharOpaque(Object, long, char)
_putIntOpaque jdk.internal.misc.Unsafe.putIntOpaque(Object, long, int)
_putLongOpaque jdk.internal.misc.Unsafe.putLongOpaque(Object, long, long)
_putFloatOpaque jdk.internal.misc.Unsafe.putFloatOpaque(Object, long, float)
_putDoubleOpaque jdk.internal.misc.Unsafe.putDoubleOpaque(Object, long, double)
_getObjectAcquire jdk.internal.misc.Unsafe.getObjectAcquire(Object, long)
_getBooleanAcquire jdk.internal.misc.Unsafe.getBooleanAcquire(Object, long)
_getByteAcquire jdk.internal.misc.Unsafe.getByteAcquire(Object, long)
_getShortAcquire jdk.internal.misc.Unsafe.getShortAcquire(Object, long)
_getCharAcquire jdk.internal.misc.Unsafe.getCharAcquire(Object, long)
_getIntAcquire jdk.internal.misc.Unsafe.getIntAcquire(Object, long)
_getLongAcquire jdk.internal.misc.Unsafe.getLongAcquire(Object, long)
_getFloatAcquire jdk.internal.misc.Unsafe.getFloatAcquire(Object, long)
_getDoubleAcquire jdk.internal.misc.Unsafe.getDoubleAcquire(Object, long)
_putObjectAcquire jdk.internal.misc.Unsafe.putObjectAcquire(Object, long, Object)
_putBooleanAcquire jdk.internal.misc.Unsafe.putBooleanAcquire(Object, long, boolean)
_putByteAcquire jdk.internal.misc.Unsafe.putByteAcquire(Object, long, byte)
_putShortAcquire jdk.internal.misc.Unsafe.putShortAcquire(Object, long, short)
_putCharAcquire jdk.internal.misc.Unsafe.putCharAcquire(Object, long, char)
_putIntAcquire jdk.internal.misc.Unsafe.putIntAcquire(Object, long, int)
_putLongAcquire jdk.internal.misc.Unsafe.putLongAcquire(Object, long, long)
_putFloatAcquire jdk.internal.misc.Unsafe.putFloatAcquire(Object, long, float)
_putDoubleAcquire jdk.internal.misc.Unsafe.putDoubleAcquire(Object, long, double)
_getShortUnaligned jdk.internal.misc.Unsafe.getShortUnaligned(Object, long)
_getCharUnaligned jdk.internal.misc.Unsafe.getCharUnaligned(Object, long)
_getIntUnaligned jdk.internal.misc.Unsafe.getIntUnaligned(Object, long)
_getLongUnaligned jdk.internal.misc.Unsafe.getLongUnaligned(Object, long)
_putShortUnaligned jdk.internal.misc.Unsafe.putShortUnaligned(Object, long, short)
_putCharUnaligned jdk.internal.misc.Unsafe.putCharUnaligned(Object, long, char)
_putIntUnaligned jdk.internal.misc.Unsafe.putIntUnaligned(Object, long, int)
_putLongUnaligned jdk.internal.misc.Unsafe.putLongUnaligned(Object, long, long)
_compareAndSetObject jdk.internal.misc.Unsafe.compareAndSetObject(Object, long, Object, Object)
_compareAndExchangeObject jdk.internal.misc.Unsafe.compareAndExchangeObject(Object, long, Object, Object)
_compareAndExchangeObjectAcquire jdk.internal.misc.Unsafe.compareAndExchangeObjectAcquire(Object, long, Object, Object)
_compareAndExchangeObjectRelease jdk.internal.misc.Unsafe.compareAndExchangeObjectRelease(Object, long, Object, Object)
_compareAndSetLong jdk.internal.misc.Unsafe.compareAndSetLong(Object, long, long, long)
_compareAndExchangeLong jdk.internal.misc.Unsafe.compareAndExchangeLong(Object, long, long, long)
_compareAndExchangeLongAcquire jdk.internal.misc.Unsafe.compareAndExchangeLongAcquire(Object, long, long, long)
_compareAndExchangeLongRelease jdk.internal.misc.Unsafe.compareAndExchangeLongRelease(Object, long, long, long)
_compareAndSetInt jdk.internal.misc.Unsafe.compareAndSetInt(Object, long, int, int)
_compareAndExchangeInt jdk.internal.misc.Unsafe.compareAndExchangeInt(Object, long, int, int)
_compareAndExchangeIntAcquire jdk.internal.misc.Unsafe.compareAndExchangeIntAcquire(Object, long, int, int)
_compareAndExchangeIntRelease jdk.internal.misc.Unsafe.compareAndExchangeIntRelease(Object, long, int, int)
_compareAndSetByte jdk.internal.misc.Unsafe.compareAndSetByte(Object, long, byte, byte)
_compareAndExchangeByte jdk.internal.misc.Unsafe.compareAndExchangeByte(Object, long, byte, byte)
_compareAndExchangeByteAcquire jdk.internal.misc.Unsafe.compareAndExchangeByteAcquire(Object, long, byte, byte)
_compareAndExchangeByteRelease jdk.internal.misc.Unsafe.compareAndExchangeByteRelease(Object, long, byte, byte)
_compareAndSetShort jdk.internal.misc.Unsafe.compareAndSetShort(Object, long, short, short)
_compareAndExchangeShort jdk.internal.misc.Unsafe.compareAndExchangeShort(Object, long, short, short)
_compareAndExchangeShortAcquire jdk.internal.misc.Unsafe.compareAndExchangeShortAcquire(Object, long, short, short)
_compareAndExchangeShortRelease jdk.internal.misc.Unsafe.compareAndExchangeShortRelease(Object, long, short, short)
_weakCompareAndSetObjectPlain jdk.internal.misc.Unsafe.weakCompareAndSetObjectPlain(Object, long, Object, Object)
_weakCompareAndSetObjectAcquire jdk.internal.misc.Unsafe.weakCompareAndSetObjectAcquire(Object, long, Object, Object)
_weakCompareAndSetObjectRelease jdk.internal.misc.Unsafe.weakCompareAndSetObjectRelease(Object, long, Object, Object)
_weakCompareAndSetObject jdk.internal.misc.Unsafe.weakCompareAndSetObject(Object, long, Object, Object)
_weakCompareAndSetLongPlain jdk.internal.misc.Unsafe.weakCompareAndSetLongPlain(Object, long, long, long)
_weakCompareAndSetLongAcquire jdk.internal.misc.Unsafe.weakCompareAndSetLongAcquire(Object, long, long, long)
_weakCompareAndSetLongRelease jdk.internal.misc.Unsafe.weakCompareAndSetLongRelease(Object, long, long, long)
_weakCompareAndSetLong jdk.internal.misc.Unsafe.weakCompareAndSetLong(Object, long, long, long)
_weakCompareAndSetIntPlain jdk.internal.misc.Unsafe.weakCompareAndSetIntPlain(Object, long, int, int)
_weakCompareAndSetIntAcquire jdk.internal.misc.Unsafe.weakCompareAndSetIntAcquire(Object, long, int, int)
_weakCompareAndSetIntRelease jdk.internal.misc.Unsafe.weakCompareAndSetIntRelease(Object, long, int, int)
_weakCompareAndSetInt jdk.internal.misc.Unsafe.weakCompareAndSetInt(Object, long, int, int)
_weakCompareAndSetBytePlain jdk.internal.misc.Unsafe.weakCompareAndSetBytePlain(Object, long, byte, byte)
_weakCompareAndSetByteAcquire jdk.internal.misc.Unsafe.weakCompareAndSetByteAcquire(Object, long, byte, byte)
_weakCompareAndSetByteRelease jdk.internal.misc.Unsafe.weakCompareAndSetByteRelease(Object, long, byte, byte)
_weakCompareAndSetByte jdk.internal.misc.Unsafe.weakCompareAndSetByte(Object, long, byte, byte)
_weakCompareAndSetShortPlain jdk.internal.misc.Unsafe.weakCompareAndSetShortPlain(Object, long, short, short)
_weakCompareAndSetShortAcquire jdk.internal.misc.Unsafe.weakCompareAndSetShortAcquire(Object, long, short, short)
_weakCompareAndSetShortRelease jdk.internal.misc.Unsafe.weakCompareAndSetShortRelease(Object, long, short, short)
_weakCompareAndSetShort jdk.internal.misc.Unsafe.weakCompareAndSetShort(Object, long, short, short)
_getAndAddInt jdk.internal.misc.Unsafe.getAndAddInt(Object, long, int)
_getAndAddLong jdk.internal.misc.Unsafe.getAndAddLong(Object, long, long)
_getAndAddByte jdk.internal.misc.Unsafe.getAndAddByte(Object, long, byte)
_getAndAddShort jdk.internal.misc.Unsafe.getAndAddShort(Object, long, short)
_getAndSetInt jdk.internal.misc.Unsafe.getAndSetInt(Object, long, int)
_getAndSetLong jdk.internal.misc.Unsafe.getAndSetLong(Object, long, int)
_getAndSetByte jdk.internal.misc.Unsafe.getAndSetByte(Object, long, byte)
_getAndSetShort jdk.internal.misc.Unsafe.getAndSetShort(Object, long, short)
_getAndSetObject jdk.internal.misc.Unsafe.getAndSetObject(Object, long, Object)
Класс
sun.misc.Unsafe
переехал в другой пакет — jdk.internal.misc.Unsafe
, также был сильно переработан. Добавлено большое число интринсиков.lava.lang.Throwable
Из JDK 9 удалена intrinsic-функция для
Throwable.fillInStackTrace()
.java.lang.StringBuilder
_StringBuilder_void java.lang.StringBuilder()
_StringBuilder_int java.lang.StringBuilder(int)
_StringBuilder_String java.lang.StringBuilder(String)
_StringBuilder_append_char java.lang.StringBuilder.append(char)
_StringBuilder_append_int java.lang.StringBuilder.append(int)
_StringBuilder_append_String java.lang.StringBuilder.append(String)
_StringBuilder_toString java.lang.StringBuilder.toString()
java.lang.StringBuffer
_StringBuffer_void java.lang.StringBuffer()
_StringBuffer_int java.lang.StringBuffer(int)
_StringBuffer_String java.lang.StringBuffer(String)
_StringBuffer_append_char java.lang.StringBuffer.append(char)
_StringBuffer_append_int java.lang.StringBuffer.append(int)
_StringBuffer_append_String java.lang.StringBuffer.append(String)
_StringBuffer_toString java.lang.StringBuffer.toString()
java.lang.invoke.MethodHandle
_invokeGeneric java.lang.invoke.MethodHandle.invoke*
_invokeBasic java.lang.invoke.MethodHandle.invokeBasic*
_linkToVirtual java.lang.invoke.MethodHandle.linkToVirtual*
_linkToStatic java.lang.invoke.MethodHandle.linkToStatic*
_linkToSpecial java.lang.invoke.MethodHandle.linkToSpecial*
_linkToInterface java.lang.invoke.MethodHandle.linkToInterface*
_compiledLambdaForm java.lang.invoke.MethodHandle.*
_profileBoolean java.lang.invoke.MethodHandleImpl.profileBoolean(boolean, int[])
_isCompileConstant java.lang.invoke.MethodHandleImpl.isCompileConstant(Object)
Новый метод
java.lang.invoke.MethodHandleImpl.isCompileConstant()
.Boxing и Unboxing
_booleanValue java.lang.Boolean.booleanValue()
_byteValue java.lang.Byte.byteValue()
_charValue java.lang.Character.charValue()
_shortValue java.lang.Short.shortValue()
_intValue java.lang.Integer.intValue()
_longValue java.lang.Long.longValue()
_floatValue java.lang.Float.floatValue()
_doubleValue java.lang.Double.doubleValue()
_Boolean_valueOf java.lang.Boolean.valueOf(boolean)
_Byte_valueOf java.lang.Byte.valueOf(byte)
_Character_valueOf java.lang.Character.valueOf(char)
_Short_valueOf java.lang.Short.valueOf(short)
_Integer_valueOf java.lang.Integer.valueOf(int)
_Long_valueOf java.lang.Long.valueOf(long)
_Float_valueOf java.lang.Float.valueOf(float)
_Double_valueOf java.lang.Double.valueOf(double)
java.util.stream.StreamsRangeIntSpliterator
_forEachRemaining java_util_stream_StreamsRangeIntSpliterator.forEachRemaining(java.util.function.IntConsumer)
Intrinsic for the method appeared in JDK 9
StreamRangeIntSpliterator.forEachRemaining
.Intrinsic Functions in JDK 10
In JDK 10, the number of intrinsics has not changed and completely coincides with JDK 9.
Intrinsic Functions in JDK 10
java.lang.Object
_hashCode java.lang.Object.hashCode()
_getClass java.lang.Object.getClass()
_clone java.lang.Object.clone()
_notify java.lang.Object.notify()
_notifyAll java.lang.Object.notifyAll()
_Object_init java.lang.Object()
java.lang.Math
_dabs java.lang.Math.abs(double)
_dsin java.lang.Math.sin(double)
_dcos java.lang.Math.cos(double)
_dtan java.lang.Math.tan(double)
_datan2 java.lang.Math.atan2(double, double)
_dsqrt java.lang.Math.sqrt(double)
_dlog java.lang.Math.log(double)
_dlog10 java.lang.Math.log10(double)
_dpow java.lang.Math.pow(double, double)
_dexp java.lang.Math.exp(double)
_min java.lang.Math.min(int, int)
_max java.lang.Math.max(int, int)
_addExactI java.lang.Math.addExact(int, int)
_addExactL java.lang.Math.addExact(long, long)
_decrementExactI java.lang.Math.decrementExact(int)
_decrementExactL java.lang.Math.decrementExact(long)
_incrementExactI java.lang.Math.incrementExact(int)
_incrementExactL java.lang.Math.incrementExact(long)
_multiplyExactI java.lang.Math.multiplyExact(int, int)
_multiplyExactL java.lang.Math.multiplyExact(long, long)
_negateExactI java.lang.Math.negateExact(int)
_negateExactL java.lang.Math.negateExact(long)
_subtractExactI java.lang.Math.subtractExact(int, int)
_subtractExactL java.lang.Math.subtractExact(long, long)
_fmaD java.lang.Math.fma(double, double, double)
_fmaF java.lang.Math.fma(float, float, float)
Double Float
_floatToRawIntBits java.lang.Float.floatToRawIntBits(float)
_floatToIntBits java.lang.Float.floatToIntBits(float)
_intBitsToFloat java.lang.Float.intBitsToFloat(int)
_doubleToRawLongBits java.lang.Double.doubleToRawLongBits(double)
_doubleToLongBits java.lang.Double.doubleToLongBits(double)
_longBitsToDouble java.lang.Double.longBitsToDouble(long)
Integer, Long, Character, Short
_numberOfLeadingZeros_i java.lang.Integer.numberOfLeadingZeros(int)
_numberOfLeadingZeros_l java.lang.Long.numberOfLeadingZeros(long)
_numberOfTrailingZeros_i java.lang.Integer.numberOfTrailingZeros(int)
_numberOfTrailingZeros_l java.lang.Long.numberOfTrailingZeros(long)
_bitCount_i java.lang.Integer.bitCount(int)
_bitCount_l java.lang.Long.bitCount(long)
_reverseBytes_i java.lang.Integer.reverseBytes(int)
_reverseBytes_l java.lang.Long.reverseBytes(long)
_reverseBytes_c java.lang.Character.reverseBytes(char)
_reverseBytes_s java.lang.Short.reverseBytes(short)
_Integer_toString java.lang.Integer.toString(int)
java.lang.System
_identityHashCode java.lang.System.identityHashCode(Object)
_currentTimeMillis java.lang.System.currentTimeMillis()
_nanoTime java.lang.System.nanoTime()
_arraycopy java.lang.System.arraycopy(Object, int, Object, int, int)
java.lang.Thread
_isInterrupted java.lang.Thread.isInterrupted(boolean)
_currentThread java.lang.Thread.currentThread()
_onSpinWait java.lang.Thread.onSpinWait()
java.lang.Class
_isAssignableFrom java.lang.Class.isAssignableFrom(Class)
_isInstance java.lang.Class.isInstance(Object)
_getModifiers java.lang.Class.getModifiers()
_isInterface java.lang.Class.isInterface()
_isArray java.lang.Class.isArray()
_isPrimitive java.lang.Class.isPrimitive()
_getSuperclass java.lang.Class.getSuperclass()
_Class_cast java.lang.Class.cast(Object)
Reflection
_getClassAccessFlags sun.reflect.Reflection.getClassAccessFlags(Class)
_getCallerClass sun.reflect.Reflection.getCallerClass()
_getLength java.lang.reflect.Array.getLength(Object)
_newArray java.lang.reflect.Array.newArray(Class, int)
_invoke java.lang.reflect.Method.invoke(Object, Object...)
java.util.Arrays
_copyOf java.util.Arrays.copyOf(Object[], int, Class)
_copyOfRange java.util.Arrays.copyOfRange(Object[], int, int, Class)
_equalsC java.util.Arrays.equals(char[], char[])
_equalsB java.util.Arrays.equals(boolean[], boolean[])
StringUTF16 and StringLatin1
_compressStringC java.lang.StringUTF16.compress(char[], int, byte[], int, int)
_compressStringB java.lang.StringUTF16.compress(byte[], int, byte[], int, int)
_inflateStringC java.lang.StringLatin1.inflate(byte[], int, char[], int, int)
_inflateStringB java.lang.StringLatin1.inflate(byte[], int, byte[], int, int)
_toBytesStringU java.lang.StringUTF16.toBytes(char[], int, int)
_getCharsStringU java.lang.StringUTF16.getChars(byte[], int, int, char[], int)
_getCharStringU java.lang.StringUTF16.getChar(byte[], int)
_putCharStringU java.lang.StringUTF16.putChar(byte[] int, int)
_compareToL java.lang.StringLatin1.compareTo(byte[], byte[])
_compareToU java.lang.StringUTF16.compareTo(byte[], byte[])
_compareToLU java.lang.StringLatin1.compareToUTF16(byte[], byte[])
_compareToUL java.lang.StringUTF16.compareToLatin1(byte[], byte[])
_indexOfL java.lang.StringLatin1.indexOf(byte[], byte[])
_indexOfU java.lang.StringUTF16.indexOf(byte[], byte[])
_indexOfUL java.lang.StringUTF16.indexOfLatin1(byte[], byte[])
_indexOfIL java.lang.StringLatin1.indexOf(byte[], int, byte[], int, int)
_indexOfIU java.lang.StringUTF16.indexOf(byte[], int, byte[], int, int)
_indexOfIUL java.lang.StringUTF16.indexOfLatin1(byte[], int, byte[], int, int)
_indexOfU_char java.lang.StringUTF16.indexOfChar(byte[], int, int, int)
_equalsL java.lang.StringLatin1.equals(byte[], byte[])
_equalsU java.lang.StringUTF16.equals(byte[], byte[])
jdk.internal.util.Preconditions
_Preconditions_checkIndex jdk.internal.util.Preconditions.checkIndex(int, int, java.util.function.BiFunction)
java.lang.StringCoding
_hasNegatives java.lang.StringCoding.hasNegatives(byte[], int, int)
_encodeByteISOArray java.lang.StringCoding.encodeISOArray(byte[], int, byte[], int, int)
java.lang.String
_String_String java.lang.String(String)
java.nio.Buffer
_checkIndex java.nio.Buffer.checkIndex(int)
sun.nio.cs.ISO_8859_1 $ Encoder
_encodeISOArray sun.nio.cs.ISO_8859_1.Encoder.encodeISOArray(char[], int, byte[], int, int)
java.math.BigInteger
_multiplyToLen java.math.BigInteger.multiplyToLen(int[], int, int[], int, int[])
_squareToLen java.math.BigInteger.squareToLen(int[], int, int[], int)
_mulAdd java.math.BigInteger.mulAdd(int[], int[], int, int, int)
_montgomeryMultiply java.math.BigInteger.montgomeryMultiply(int[], int[], int[], int, long, int[])
_montgomerySquare java.math.BigInteger.montgomerySquare(int[], int[], int, long, int[])
java.util.ArraysSupport
_vectorizedMismatch java.util.ArraysSupport.vectorizedMismatch(Object, long, Object, long, int, int)
java.lang.ref.Reference
_Reference_get java.lang.ref.Reference.get()
Cryptography
_aescrypt_encryptBlock com.sun.crypto.provider.AESCrypt.encryptBlock(byte[], in, byte[], int)
_aescrypt_decryptBlock com.sun.crypto.provider.AESCrypt.decryptBlock(byte[], in, byte[], int)
_cipherBlockChaining_encryptAESCrypt com.sun.crypto.provider.CipherBlockChaining.encrypt(byte[], int, int, byte[], int)
_cipherBlockChaining_decryptAESCrypt com.sun.crypto.provider.CipherBlockChaining.decrypt(byte[], int, int, byte[], int)
_counterMode_AESCrypt com.sun.crypto.provider.CounterMode.implCrypt(byte[], int, int, byte[], int)
_ghash_processBlocks com.sun.crypto.provider.GHASH.processBlocks(byte[], int, int, long[], long[])
sun.security.provider. *
_sha_implCompress sun.security.provider.SHA.implCompress(byte[], int)
_sha2_implCompress sun.security.provider.SHA2.implCompress(byte[], int)
_sha5_implCompress sun.security.provider.SHA5.implCompress(byte[], int)
_digestBase_implCompressMB sun.security.provider.DigestBase.implCompressMultiBlock0(byte[], int, int)
java.util.zip.CRC32 and java.util.zip.CRC32C
_updateCRC32 java.util.zip.CRC32.update(int2_int_signature)
_updateBytesCRC32 java.util.zip.CRC32.updateBytes0(updateBytes_signature)
_updateByteBufferCRC32 java.util.zip.CRC32.updateByteBuffer0(updateByteBuffer_signature)
_updateBytesCRC32C java.util.zip.CRC32C.updateBytes(int, byte[], int, int)
_updateDirectByteBufferCRC32C java.util.zip.CRC32C.updateDirectByteBuffer(int, long, int, int)
_updateBytesAdler32 java.util.zip.Adler32.updateBytes(int, byte[], int, int)
_updateByteBufferAdler32 java.util.zip.Adler32.updateByteBuffer(int, long, int, int)
jdk.internal.misc.Unsafe
_allocateInstance jdk.internal.misc.Unsafe.allocateInstance(Class)
_allocateUninitializedArray jdk.internal.misc.Unsafe.allocateUninitializedArray0(Class, int)
_copyMemory jdk.internal.misc.Unsafe.copyMemory0(Object, long, Object, long, long)
_park jdk.internal.misc.Unsafe.park(boolean, long)
_unpark jdk.internal.misc.Unsafe.unpark(Object)
_loadFence jdk.internal.misc.Unsafe.loadFence()
_storeFence jdk.internal.misc.Unsafe.storeFence()
_fullFence jdk.internal.misc.Unsafe.fullFence()
_getObject jdk.internal.misc.Unsafe.getObject(Object, long)
_getBoolean jdk.internal.misc.Unsafe.getBoolean(Object, long)
_getByte jdk.internal.misc.Unsafe.getByte(Object, long)
_getShort jdk.internal.misc.Unsafe.getShort(Object, long)
_getChar jdk.internal.misc.Unsafe.getChar(Object, long)
_getInt jdk.internal.misc.Unsafe.getInt(Object, long)
_getLong jdk.internal.misc.Unsafe.getLong(Object, long)
_getFloat jdk.internal.misc.Unsafe.getFloat(Object, long)
_getDouble jdk.internal.misc.Unsafe.getDouble(Object, long)
_putObject jdk.internal.misc.Unsafe.putObject(Object, long, Object)
_putBoolean jdk.internal.misc.Unsafe.putBoolean(Object, long, boolean)
_putByte jdk.internal.misc.Unsafe.putByte(Object, long, byte)
_putShort jdk.internal.misc.Unsafe.putShort(Object, long, short)
_putChar jdk.internal.misc.Unsafe.putChar(Object, long, char)
_putInt jdk.internal.misc.Unsafe.putInt(Object, long, int)
_putLong jdk.internal.misc.Unsafe.putLong(Object, long, long)
_putFloat jdk.internal.misc.Unsafe.putFloat(Object, long, float)
_putDouble jdk.internal.misc.Unsafe.putDouble(Object, long, double)
_getObjectVolatile jdk.internal.misc.Unsafe.getObjectVolatile(Object, long)
_getBooleanVolatile jdk.internal.misc.Unsafe.getBooleanVolatile(Object, long)
_getByteVolatile jdk.internal.misc.Unsafe.getByteVolatile(Object, long)
_getShortVolatile jdk.internal.misc.Unsafe.getShortVolatile(Object, long)
_getCharVolatile jdk.internal.misc.Unsafe.getCharVolatile(Object, long)
_getIntVolatile jdk.internal.misc.Unsafe.getIntVolatile(Object, long)
_getLongVolatile jdk.internal.misc.Unsafe.getLongVolatile(Object, long)
_getFloatVolatile jdk.internal.misc.Unsafe.getFloatVolatile(Object, long)
_getDoubleVolatile jdk.internal.misc.Unsafe.getDoubleVolatile(Object, long)
_putObjectVolatile jdk.internal.misc.Unsafe.putObjectVolatile(Object, long, Object)
_putBooleanVolatile jdk.internal.misc.Unsafe.putBooleanVolatile(Object, long, boolean)
_putByteVolatile jdk.internal.misc.Unsafe.putByteVolatile(Object, long, byte)
_putShortVolatile jdk.internal.misc.Unsafe.putShortVolatile(Object, long, short)
_putCharVolatile jdk.internal.misc.Unsafe.putCharVolatile(Object, long, char)
_putIntVolatile jdk.internal.misc.Unsafe.putIntVolatile(Object, long, int)
_putLongVolatile jdk.internal.misc.Unsafe.putLongVolatile(Object, long, long)
_putFloatVolatile jdk.internal.misc.Unsafe.putFloatVolatile(Object, long, float)
_putDoubleVolatile jdk.internal.misc.Unsafe.putDoubleVolatile(Object, long, double)
_getObjectOpaque jdk.internal.misc.Unsafe.getObjectOpaque(Object, long)
_getBooleanOpaque jdk.internal.misc.Unsafe.getBooleanOpaque(Object, long)
_getByteOpaque jdk.internal.misc.Unsafe.getByteOpaque(Object, long)
_getShortOpaque jdk.internal.misc.Unsafe.getShortOpaque(Object, long)
_getCharOpaque jdk.internal.misc.Unsafe.getCharOpaque(Object, long)
_getIntOpaque jdk.internal.misc.Unsafe.getIntOpaque(Object, long)
_getLongOpaque jdk.internal.misc.Unsafe.getLongOpaque(Object, long)
_getFloatOpaque jdk.internal.misc.Unsafe.getFloatOpaque(Object, long)
_getDoubleOpaque jdk.internal.misc.Unsafe.getDoubleOpaque(Object, long)
_putObjectOpaque jdk.internal.misc.Unsafe.putObjectOpaque(Object, long, Object)
_putBooleanOpaque jdk.internal.misc.Unsafe.putBooleanOpaque(Object, long, boolean)
_putByteOpaque jdk.internal.misc.Unsafe.putByteOpaque(Object, long, byte)
_putShortOpaque jdk.internal.misc.Unsafe.putShortOpaque(Object, long, short)
_putCharOpaque jdk.internal.misc.Unsafe.putCharOpaque(Object, long, char)
_putIntOpaque jdk.internal.misc.Unsafe.putIntOpaque(Object, long, int)
_putLongOpaque jdk.internal.misc.Unsafe.putLongOpaque(Object, long, long)
_putFloatOpaque jdk.internal.misc.Unsafe.putFloatOpaque(Object, long, float)
_putDoubleOpaque jdk.internal.misc.Unsafe.putDoubleOpaque(Object, long, double)
_getObjectAcquire jdk.internal.misc.Unsafe.getObjectAcquire(Object, long)
_getBooleanAcquire jdk.internal.misc.Unsafe.getBooleanAcquire(Object, long)
_getByteAcquire jdk.internal.misc.Unsafe.getByteAcquire(Object, long)
_getShortAcquire jdk.internal.misc.Unsafe.getShortAcquire(Object, long)
_getCharAcquire jdk.internal.misc.Unsafe.getCharAcquire(Object, long)
_getIntAcquire jdk.internal.misc.Unsafe.getIntAcquire(Object, long)
_getLongAcquire jdk.internal.misc.Unsafe.getLongAcquire(Object, long)
_getFloatAcquire jdk.internal.misc.Unsafe.getFloatAcquire(Object, long)
_getDoubleAcquire jdk.internal.misc.Unsafe.getDoubleAcquire(Object, long)
_putObjectAcquire jdk.internal.misc.Unsafe.putObjectAcquire(Object, long, Object)
_putBooleanAcquire jdk.internal.misc.Unsafe.putBooleanAcquire(Object, long, boolean)
_putByteAcquire jdk.internal.misc.Unsafe.putByteAcquire(Object, long, byte)
_putShortAcquire jdk.internal.misc.Unsafe.putShortAcquire(Object, long, short)
_putCharAcquire jdk.internal.misc.Unsafe.putCharAcquire(Object, long, char)
_putIntAcquire jdk.internal.misc.Unsafe.putIntAcquire(Object, long, int)
_putLongAcquire jdk.internal.misc.Unsafe.putLongAcquire(Object, long, long)
_putFloatAcquire jdk.internal.misc.Unsafe.putFloatAcquire(Object, long, float)
_putDoubleAcquire jdk.internal.misc.Unsafe.putDoubleAcquire(Object, long, double)
_getShortUnaligned jdk.internal.misc.Unsafe.getShortUnaligned(Object, long)
_getCharUnaligned jdk.internal.misc.Unsafe.getCharUnaligned(Object, long)
_getIntUnaligned jdk.internal.misc.Unsafe.getIntUnaligned(Object, long)
_getLongUnaligned jdk.internal.misc.Unsafe.getLongUnaligned(Object, long)
_putShortUnaligned jdk.internal.misc.Unsafe.putShortUnaligned(Object, long, short)
_putCharUnaligned jdk.internal.misc.Unsafe.putCharUnaligned(Object, long, char)
_putIntUnaligned jdk.internal.misc.Unsafe.putIntUnaligned(Object, long, int)
_putLongUnaligned jdk.internal.misc.Unsafe.putLongUnaligned(Object, long, long)
_compareAndSetObject jdk.internal.misc.Unsafe.compareAndSetObject(Object, long, Object, Object)
_compareAndExchangeObject jdk.internal.misc.Unsafe.compareAndExchangeObject(Object, long, Object, Object)
_compareAndExchangeObjectAcquire jdk.internal.misc.Unsafe.compareAndExchangeObjectAcquire(Object, long, Object, Object)
_compareAndExchangeObjectRelease jdk.internal.misc.Unsafe.compareAndExchangeObjectRelease(Object, long, Object, Object)
_compareAndSetLong jdk.internal.misc.Unsafe.compareAndSetLong(Object, long, long, long)
_compareAndExchangeLong jdk.internal.misc.Unsafe.compareAndExchangeLong(Object, long, long, long)
_compareAndExchangeLongAcquire jdk.internal.misc.Unsafe.compareAndExchangeLongAcquire(Object, long, long, long)
_compareAndExchangeLongRelease jdk.internal.misc.Unsafe.compareAndExchangeLongRelease(Object, long, long, long)
_compareAndSetInt jdk.internal.misc.Unsafe.compareAndSetInt(Object, long, int, int)
_compareAndExchangeInt jdk.internal.misc.Unsafe.compareAndExchangeInt(Object, long, int, int)
_compareAndExchangeIntAcquire jdk.internal.misc.Unsafe.compareAndExchangeIntAcquire(Object, long, int, int)
_compareAndExchangeIntRelease jdk.internal.misc.Unsafe.compareAndExchangeIntRelease(Object, long, int, int)
_compareAndSetByte jdk.internal.misc.Unsafe.compareAndSetByte(Object, long, byte, byte)
_compareAndExchangeByte jdk.internal.misc.Unsafe.compareAndExchangeByte(Object, long, byte, byte)
_compareAndExchangeByteAcquire jdk.internal.misc.Unsafe.compareAndExchangeByteAcquire(Object, long, byte, byte)
_compareAndExchangeByteRelease jdk.internal.misc.Unsafe.compareAndExchangeByteRelease(Object, long, byte, byte)
_compareAndSetShort jdk.internal.misc.Unsafe.compareAndSetShort(Object, long, short, short)
_compareAndExchangeShort jdk.internal.misc.Unsafe.compareAndExchangeShort(Object, long, short, short)
_compareAndExchangeShortAcquire jdk.internal.misc.Unsafe.compareAndExchangeShortAcquire(Object, long, short, short)
_compareAndExchangeShortRelease jdk.internal.misc.Unsafe.compareAndExchangeShortRelease(Object, long, short, short)
_weakCompareAndSetObjectPlain jdk.internal.misc.Unsafe.weakCompareAndSetObjectPlain(Object, long, Object, Object)
_weakCompareAndSetObjectAcquire jdk.internal.misc.Unsafe.weakCompareAndSetObjectAcquire(Object, long, Object, Object)
_weakCompareAndSetObjectRelease jdk.internal.misc.Unsafe.weakCompareAndSetObjectRelease(Object, long, Object, Object)
_weakCompareAndSetObject jdk.internal.misc.Unsafe.weakCompareAndSetObject(Object, long, Object, Object)
_weakCompareAndSetLongPlain jdk.internal.misc.Unsafe.weakCompareAndSetLongPlain(Object, long, long, long)
_weakCompareAndSetLongAcquire jdk.internal.misc.Unsafe.weakCompareAndSetLongAcquire(Object, long, long, long)
_weakCompareAndSetLongRelease jdk.internal.misc.Unsafe.weakCompareAndSetLongRelease(Object, long, long, long)
_weakCompareAndSetLong jdk.internal.misc.Unsafe.weakCompareAndSetLong(Object, long, long, long)
_weakCompareAndSetIntPlain jdk.internal.misc.Unsafe.weakCompareAndSetIntPlain(Object, long, int, int)
_weakCompareAndSetIntAcquire jdk.internal.misc.Unsafe.weakCompareAndSetIntAcquire(Object, long, int, int)
_weakCompareAndSetIntRelease jdk.internal.misc.Unsafe.weakCompareAndSetIntRelease(Object, long, int, int)
_weakCompareAndSetInt jdk.internal.misc.Unsafe.weakCompareAndSetInt(Object, long, int, int)
_weakCompareAndSetBytePlain jdk.internal.misc.Unsafe.weakCompareAndSetBytePlain(Object, long, byte, byte)
_weakCompareAndSetByteAcquire jdk.internal.misc.Unsafe.weakCompareAndSetByteAcquire(Object, long, byte, byte)
_weakCompareAndSetByteRelease jdk.internal.misc.Unsafe.weakCompareAndSetByteRelease(Object, long, byte, byte)
_weakCompareAndSetByte jdk.internal.misc.Unsafe.weakCompareAndSetByte(Object, long, byte, byte)
_weakCompareAndSetShortPlain jdk.internal.misc.Unsafe.weakCompareAndSetShortPlain(Object, long, short, short)
_weakCompareAndSetShortAcquire jdk.internal.misc.Unsafe.weakCompareAndSetShortAcquire(Object, long, short, short)
_weakCompareAndSetShortRelease jdk.internal.misc.Unsafe.weakCompareAndSetShortRelease(Object, long, short, short)
_weakCompareAndSetShort jdk.internal.misc.Unsafe.weakCompareAndSetShort(Object, long, short, short)
_getAndAddInt jdk.internal.misc.Unsafe.getAndAddInt(Object, long, int)
_getAndAddLong jdk.internal.misc.Unsafe.getAndAddLong(Object, long, long)
_getAndAddByte jdk.internal.misc.Unsafe.getAndAddByte(Object, long, byte)
_getAndAddShort jdk.internal.misc.Unsafe.getAndAddShort(Object, long, short)
_getAndSetInt jdk.internal.misc.Unsafe.getAndSetInt(Object, long, int)
_getAndSetLong jdk.internal.misc.Unsafe.getAndSetLong(Object, long, int)
_getAndSetByte jdk.internal.misc.Unsafe.getAndSetByte(Object, long, byte)
_getAndSetShort jdk.internal.misc.Unsafe.getAndSetShort(Object, long, short)
_getAndSetObject jdk.internal.misc.Unsafe.getAndSetObject(Object, long, Object)
java.lang.StringBuilder
_StringBuilder_void java.lang.StringBuilder()
_StringBuilder_int java.lang.StringBuilder(int)
_StringBuilder_String java.lang.StringBuilder(String)
_StringBuilder_append_char java.lang.StringBuilder.append(char)
_StringBuilder_append_int java.lang.StringBuilder.append(int)
_StringBuilder_append_String java.lang.StringBuilder.append(String)
_StringBuilder_toString java.lang.StringBuilder.toString()
java.lang.StringBuffer
_StringBuffer_void java.lang.StringBuffer()
_StringBuffer_int java.lang.StringBuffer(int)
_StringBuffer_String java.lang.StringBuffer(String)
_StringBuffer_append_char java.lang.StringBuffer.append(char)
_StringBuffer_append_int java.lang.StringBuffer.append(int)
_StringBuffer_append_String java.lang.StringBuffer.append(String)
_StringBuffer_toString java.lang.StringBuffer.toString()
java.lang.invoke.MethodHandle
_invokeGeneric java.lang.invoke.MethodHandle.invoke*
_invokeBasic java.lang.invoke.MethodHandle.invokeBasic*
_linkToVirtual java.lang.invoke.MethodHandle.linkToVirtual*
_linkToStatic java.lang.invoke.MethodHandle.linkToStatic*
_linkToSpecial java.lang.invoke.MethodHandle.linkToSpecial*
_linkToInterface java.lang.invoke.MethodHandle.linkToInterface*
_compiledLambdaForm java.lang.invoke.MethodHandle.*
_profileBoolean java.lang.invoke.MethodHandleImpl.profileBoolean(boolean, int[])
_isCompileConstant java.lang.invoke.MethodHandleImpl.isCompileConstant(Object)
Boxing and Unboxing
_booleanValue java.lang.Boolean.booleanValue()
_byteValue java.lang.Byte.byteValue()
_charValue java.lang.Character.charValue()
_shortValue java.lang.Short.shortValue()
_intValue java.lang.Integer.intValue()
_longValue java.lang.Long.longValue()
_floatValue java.lang.Float.floatValue()
_doubleValue java.lang.Double.doubleValue()
_Boolean_valueOf java.lang.Boolean.valueOf(boolean)
_Byte_valueOf java.lang.Byte.valueOf(byte)
_Character_valueOf java.lang.Character.valueOf(char)
_Short_valueOf java.lang.Short.valueOf(short)
_Integer_valueOf java.lang.Integer.valueOf(int)
_Long_valueOf java.lang.Long.valueOf(long)
_Float_valueOf java.lang.Float.valueOf(float)
_Double_valueOf java.lang.Double.valueOf(double)
java.util.stream.StreamsRangeIntSpliterator
_forEachRemaining java_util_stream_StreamsRangeIntSpliterator.forEachRemaining(java.util.function.IntConsumer)
Benefits of Intrinsic Functions
Интринсик предпочтительнее Java-кода в плане производительности по двум основным причинам: во-первых, нет необходимости в дополнительных проверках (проверки на null, границы массивов и прочее), которые приводят к различным RuntimeException, во-вторых, в intrinsic-функции могут быть реализованы
platform-specific
оптимизации.По сравнению с JNI-вызовами отсутствуют накладные расходы, связанные с копированием данных (в native и обратно) и дополнительной прослойкой для контроля за Java-объектами, используемыми в native-коде.
Контроль
Чтобы посмотреть, какие интринсики были подставлены, можно воспользоваться опцией
-XX:+PrintIntrinsics
:-XX:+UnlockDiagnosticVMOptions
-XX:+PrintIntrinsics
To make sure that intrification is possible (using intrinsic functions ) only in JIT compilation mode, you can run it together with the option
-Xint
(JVM runs only in interpreter mode). To disable the use of a specific intrinsic function , you can use the option
-XX:DisableIntrinsic
:-XX:+UnlockDiagnosticVMOptions
-XX:DisableIntrinsic=<название интринсика>[,<название интринсика>]
Notes
Important note from apangin :
It should be noted that not all of these methods are intrinsics in the literal sense, that is, it is not at all necessary that JIT substitutes a special code for the call. Some are compiled as regular Java methods, and their mention invmSymbols.hpp
due to the need to distinguish them in runtime for another reason.
For example, it isMethod.invoke
marked in order not to take it into account in security check when traversing the stack. AvailabilityThrowable.fillInStackTrace
serves as a hint for Escape Analysys,Unsafe.park/unpark
and is completely in vain marked.
At the same time, with JDK 9, the method is
Throwable.fillInStackTrace
generally removed from the list of intrinsics .