Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clean up list of recognized methods in JIT compiler #17516

Open
hzongaro opened this issue Jun 2, 2023 · 1 comment
Open

Clean up list of recognized methods in JIT compiler #17516

hzongaro opened this issue Jun 2, 2023 · 1 comment

Comments

@hzongaro
Copy link
Member

hzongaro commented Jun 2, 2023

The list of recognized methods in the JIT compiler contains some entries for methods or classes that no longer exist in the Java class libraries, and likely is missing methods that have been introduced over the years in some of those classes as the implementation of the Java class libraries have changed.

As an example, the class34 table contains an entry for java/util/Hashtable$HashEnumerator, but that class does not exist in OpenJ9's implementation of the Java class libraries - it instead uses a nested class named java/util/Hashtable$Enumerator.

Further, the JIT compiler contains special handling of recognized methods that takes advantage of properties of those implementations - for instance, recognizing methods that will not require ArrayStoreCHK operations. It's possible that some of that special handling is not appropriate in all versions of the Java or that the JIT does not take advantage of similar properties of some more recently introduced methods.

Other things to consider: How to ensure that the list of recognized methods doesn't get out of date? Products built on OpenJ9 source code might contain Java class libraries that are different from those that are part of OpenJ9 releases - for instance, java/util/Hashtable$HashEnumerator might still be in use in a product built on OpenJ9.

Investigation and clean up should probably be performed on a class-by-class basis. I will create an initial checklist here that can be updated and enhanced as issues are opened and classes investigated.

  • java/nio/Bits
  • java/lang/Math
  • java/lang/Long
  • java/lang/Byte
  • java/io/Writer
  • java/lang/Class
  • java/lang/Float
  • sun/misc/Unsafe
  • java/lang/Short
  • java/lang/Double
  • java/lang/Object
  • java/lang/String
  • java/lang/System
  • java/lang/Thread
  • java/util/Vector
  • java/util/Arrays
  • com/ibm/oti/vm/VM
  • java/lang/Integer
  • java/lang/Boolean
  • java/util/HashMap
  • com/ibm/gpu/Kernel
  • java/nio/ByteOrder
  • java/util/Hashtable
  • java/lang/Throwable
  • java/lang/Character
  • java/util/ArrayList
  • java/util/zip/CRC32
  • java/lang/StrictMath
  • java/math/BigDecimal
  • java/math/BigInteger
  • java/util/zip/CRC32C
  • java/lang/ClassLoader
  • java/lang/StringUTF16
  • java/lang/StringBuffer
  • sun/reflect/Reflection
  • java/text/NumberFormat
  • com/ibm/jit/JITHelpers
  • java/lang/StringCoding
  • java/lang/StringLatin1
  • com/ibm/simt/SPMDKernel
  • x10/runtime/VMInterface
  • java/lang/J9VMInternals
  • java/lang/ref/Reference
  • java/lang/StringBuilder
  • java/lang/reflect/Array
  • java/nio/HeapByteBuffer
  • sun/nio/ch/NativeThread
  • java/util/regex/Matcher
  • java/lang/reflect/Method
  • sun/nio/cs/UTF_8$Decoder
  • sun/nio/cs/UTF_8$Encoder
  • sun/nio/cs/UTF16_Encoder
  • jdk/internal/misc/Unsafe
  • java/lang/invoke/Invokers
  • sun/io/ByteToCharSingleByte
  • com/ibm/oti/vm/ORBVMHelpers
  • java/util/GregorianCalendar
  • sun/nio/cs/US_ASCII$Encoder
  • sun/nio/cs/US_ASCII$Decoder
  • sun/nio/cs/ext/SBCS_Encoder
  • sun/nio/cs/ext/SBCS_Decoder
  • java/lang/invoke/FoldHandle
  • java/lang/ref/SoftReference
  • sun/io/ByteToCharDBCS_EBCDIC
  • java/lang/invoke/ILGenMacros
  • java/lang/invoke/CatchHandle
  • com/ibm/tenant/TenantContext
  • java/util/stream/IntPipeline
  • java/lang/invoke/MethodHandle
  • java/lang/invoke/AsTypeHandle
  • java/lang/invoke/InsertHandle
  • java/lang/invoke/SpreadHandle
  • java/lang/invoke/DirectHandle
  • sun/nio/cs/ISO_8859_1$Encoder
  • sun/nio/cs/ISO_8859_1$Decoder
  • java/io/ByteArrayOutputStream
  • com/ibm/Compiler/Internal/Quad
  • java/lang/invoke/CollectHandle
  • java/lang/invoke/FinallyHandle
  • java/lang/invoke/PermuteHandle
  • java/lang/invoke/MethodHandles
  • com/ibm/dataaccess/DecimalData
  • sun/nio/cs/ext/IBM1388$Encoder
  • java/util/HashMap$HashIterator
  • com/ibm/jit/DecimalFormatHelper
  • jdk/internal/reflect/Reflection
  • jdk/internal/util/Preconditions
  • java/lang/invoke/MutableCallSite
  • java/lang/invoke/PrimitiveHandle
  • com/ibm/dataaccess/PackedDecimal
  • java/util/stream/AbstractPipeline
  • java/util/stream/IntPipeline$Head
  • java/lang/invoke/MethodHandleImpl
  • java/util/Hashtable$HashEnumerator
  • java/util/concurrent/atomic/Fences
  • com/ibm/Compiler/Internal/Prefetch
  • java/lang/invoke/VarHandleInternal
  • java/lang/invoke/ExplicitCastHandle
  • jdk/internal/loader/NativeLibraries
  • java/lang/invoke/DirectMethodHandle
  • java/lang/invoke/GuardWithTestHandle
  • java/lang/invoke/ArgumentMoverHandle
  • com/ibm/rmi/io/FastPathForCollocated
  • com/ibm/tenant/InternalTenantContext
  • java/lang/StringCoding$StringDecoder
  • java/lang/StringCoding$StringEncoder
  • jdk/internal/vm/vector/VectorSupport
  • java/util/concurrent/atomic/AtomicLong
  • java/lang/invoke/FilterArgumentsHandle
  • com/ibm/dataaccess/ByteArrayMarshaller
  • java/util/concurrent/ConcurrentHashMap
  • com/ibm/crypto/provider/P224PrimeField
  • com/ibm/crypto/provider/P256PrimeField
  • com/ibm/crypto/provider/P384PrimeField
  • com/ibm/jit/crypto/JITFullHardwareCrypt
  • java/lang/invoke/DelegatingMethodHandle
  • com/ibm/dataaccess/ByteArrayUnmarshaller
  • com/ibm/jit/crypto/JITFullHardwareDigest
  • com/ibm/jit/crypto/JITAESCryptInHardware
  • org/apache/harmony/luni/platform/OSMemory
  • java/util/concurrent/atomic/AtomicBoolean
  • java/util/concurrent/atomic/AtomicInteger
  • java/lang/invoke/BruteArgumentMoverHandle
  • com/ibm/crypto/provider/AESCryptInHardware
  • java/util/concurrent/ConcurrentLinkedQueue
  • java/util/concurrent/atomic/AtomicReference
  • java/util/concurrent/atomic/AtomicLongArray
  • com/ibm/crypto/provider/ByteArrayMarshaller
  • java/lang/invoke/ConvertHandle$FilterHelpers
  • com/ibm/crypto/provider/ByteArrayUnmarshaller
  • java/util/concurrent/atomic/AtomicIntegerArray
  • java/util/concurrent/ConcurrentHashMap$TreeBin
  • java/io/ObjectInputStream$BlockDataInputStream
  • java/util/concurrent/atomic/AtomicReferenceArray
  • java/lang/invoke/MethodHandleImpl$CountingWrapper
  • java/util/concurrent/atomic/AtomicLongFieldUpdater
  • java/lang/invoke/FilterArgumentsWithCombinerHandle
  • java/util/concurrent/atomic/AtomicIntegerFieldUpdater
  • java/util/concurrent/atomic/AtomicReferenceFieldUpdater
@0xdaryl
Copy link
Contributor

0xdaryl commented Jun 6, 2023

java/util/concurrent/atomic/Fences should be removed via #17386 and #12390.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants