On Wed, 11 Feb 2026 23:14:25 GMT, Chen Liang <[email protected]> wrote:

> Is there a reason why this only happens for WeakReferenceKey but not 
> SoftReferenceKey?

WeakReferenceKey is used in this call stack when creating a CDS archive during 
the JDK build process:


at java.base/jdk.internal.util.WeakReferenceKey.equals(WeakReferenceKey.java:73)
at 
java.base/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1054)
at 
java.base/java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1558)
at 
java.base/jdk.internal.util.ReferencedKeyMap.internKey(ReferencedKeyMap.java:460)
at 
java.base/jdk.internal.util.ReferencedKeyMap.intern(ReferencedKeyMap.java:396)
at 
java.base/jdk.internal.util.ReferencedKeySet.intern(ReferencedKeySet.java:178)
at java.base/java.lang.invoke.MethodType.makeImpl(MethodType.java:410)
at java.base/java.lang.invoke.MethodType.methodType(MethodType.java:312)
at 
java.base/java.lang.invoke.MemberName.getMethodOrFieldType(MemberName.java:110)
at 
java.base/java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:81)
at 
java.base/java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:130)
at 
java.base/java.lang.invoke.MethodHandles$Lookup.getDirectFieldCommon(MethodHandles.java:3917)
at 
java.base/java.lang.invoke.MethodHandles$Lookup.getDirectField(MethodHandles.java:3912)
at 
java.base/java.lang.invoke.MethodHandles$Lookup.findGetter(MethodHandles.java:2952)
at 
java.base/java.lang.invoke.ClassSpecializer$Factory.findGetter(ClassSpecializer.java:861)
at 
java.base/java.lang.invoke.ClassSpecializer$Factory.findGetters(ClassSpecializer.java:870)
at 
java.base/java.lang.invoke.ClassSpecializer$Factory.linkSpeciesDataToCode(ClassSpecializer.java:898)
at 
java.base/java.lang.invoke.ClassSpecializer$Factory.loadSpecies(ClassSpecializer.java:505)
at 
java.base/java.lang.invoke.ClassSpecializer.findSpecies(ClassSpecializer.java:212)
at 
java.base/java.lang.invoke.BoundMethodHandle$SpeciesData.extendWith(BoundMethodHandle.java:406)
at 
java.base/java.lang.invoke.LambdaForm.createConstantForm(LambdaForm.java:1642)
at java.base/java.lang.invoke.LambdaForm.constantForm(LambdaForm.java:1637)
at 
java.base/java.lang.invoke.GenerateJLIClassesHelper.generateBasicFormsClassBytes(GenerateJLIClassesHelper.java:467)
at 
java.base/java.lang.invoke.GenerateJLIClassesHelper$HolderClassBuilder.build(GenerateJLIClassesHelper.java:262)
at 
java.base/java.lang.invoke.GenerateJLIClassesHelper.generateHolderClasses(GenerateJLIClassesHelper.java:444)
at 
java.base/java.lang.invoke.MethodHandleImpl$1.generateHolderClasses(MethodHandleImpl.java:1560)
at java.base/jdk.internal.misc.CDS.generateLambdaFormHolderClasses(CDS.java:238)


SoftReferenceKeys are not used:


$ java -Xshare:dump -Xlog:class+init | grep ReferenceKe
Initializing 'jdk/internal/util/StrongReferenceKey'(no method) 
(0x000000005304c968) by thread "main"
Initializing 'jdk/internal/util/WeakReferenceKey'(no method) 
(0x000000005304cfb8) by thread "main"

-------------

PR Comment: https://git.openjdk.org/jdk/pull/29678#issuecomment-3887839876

Reply via email to