[External] : Re: Draft JEP 8315737: AOT Linked Classes

ioi.lam at oracle.com ioi.lam at oracle.com
Wed Jul 10 22:43:29 UTC 2024


On 7/10/24 6:41 AM, Volker Simonis wrote:
> Hi Ioi,
>
> Thanks for the clarification. I wasn't aware of the fact, that only
> static CDS archives can contain archived heap objects. The official
> CDS documentation [1] is also not mentioning this. In contrary, it
> states that:
>
>> The names "static" and "dynamic" are used for historical reasons. The only significance is that the "static" archive is loaded first and the "dynamic" archive is loaded second.
> So maybe that documentation should be updated to make it clear that
> static CDS archives are more powerful?

I have filed https://bugs.openjdk.org/browse/JDK-8336147


> Is there a conceptual reason for why dynamic archives can not contain
> heap objects or is this just an implementation issue that could be
> solved? Maybe because G1 can currently only map a single heap region
> from file?

The reasons that heap objects cannot be stored in the dynamic archive:

- The dynamic dump happens at the end of program execution. GC might 
have moved the objects around. If there’s a reference from the 
achievable objects from the dynamic archive that points to the 
archivable objects in the static archive, keeping track of that is 
difficult.

- The dynamic run may mutate objects in the static archive. For example, 
for invokedynamic support, if we have a MethodType for a class in the 
dynamic archive, this MT needs to be entered into a global hashtable 
that’s rooted in the static archive 
(java.lang.invoke.MethodType::internTable).

Instead of just fixing the 2-level problem between static and dynamic 
archives, folks like John Rose and Dan Heidinga are working on general 
designs that would support multiple groups of archived heap objects that 
have cross references between these groups.

In the near future, Leyden optimization will be based on the static 
archive only, as many optimizations rely on snapshots of heap objects.


Thanks

- Ioi



>
> Thank you and best regards,
> Volker
>
> [1] https://docs.oracle.com/en/java/javase/22/docs/specs/man/java.html#application-class-data-sharing
>
> On Tue, Jul 9, 2024 at 7:32 AM <ioi.lam at oracle.com> wrote:
>> On 7/8/24 6:52 AM, Volker Simonis wrote:
>>
>> The way you describe the manual usage of CDS is "old" and quite
>> cumbersome. Why not use the new -XX:+AutoCreateSharedArchive option
>> which automatically creates the archive if non is available. Or does
>> -XX:+AOTLoadedClasses not work together with
>> -XX:+AutoCreateSharedArchive and if so, why not?
>>
>> -XX:+AutoCreateSharedArchive is for creating dynamic CDS archives only. It cannot be used for creating static CDS archives.
>>
>> -XX:+AOTLoadedClasses works for both dynamic and static CDS archives. However, as part of this JEP, to demonstrate its promises, we will also implement one significant optimization that relies on -XX:+AOTLoadedClasses:
>>
>>      JDK-8293336 Store LambdaForms in CDS archive heap
>>
>> JDK-8293336 works only for the static CDS archive (it requires archiving Java heap objects, which is not supported by dynamic CDS archives).
>>
>> Thanks
>>
>> - Ioi


More information about the leyden-dev mailing list