RFR: 8344904: Interned strings in old classes are not stored in AOT cache
    Ioi Lam 
    iklam at openjdk.org
       
    Sat Nov 23 03:31:03 UTC 2024
    
    
  
Before this fix, CDS will only archive interned strings that are reachable from `ConstantPool::resolved_references()`, which is created only after a class is linked. However, old classes are not linked, so we didn't archive their interned strings.
It's possible for the Java mirror of an (unlinked) old class to point to interned strings. E.g.,
public super class OldClassWithStaticString
    version 49:0
{
    public static final Field s:"Ljava/lang/String;" = String "xxxx123yyyy456";
The 's' field is initialized during class file parsing, so we must intern the `"xxxx123yyyy456"` string.
The fix is to collect interned strings from the static fields of unlinked classes.
-------------
Commit messages:
 - 8344904: Interned strings in old classes are not stored in AOT cache
Changes: https://git.openjdk.org/jdk/pull/22340/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22340&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8344904
  Stats: 153 lines in 5 files changed: 142 ins; 2 del; 9 mod
  Patch: https://git.openjdk.org/jdk/pull/22340.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/22340/head:pull/22340
PR: https://git.openjdk.org/jdk/pull/22340
    
    
More information about the hotspot-dev
mailing list