RFR: 8293182: Improve testing of CDS archive heap [v5]
Coleen Phillimore
coleenp at openjdk.org
Fri Sep 2 19:29:06 UTC 2022
On Fri, 2 Sep 2022 05:52:39 GMT, Ioi Lam <iklam at openjdk.org> wrote:
>> Currently, the CDS archive heap supports a fixed set of built-in classes, specified by hard-coded lists in heapShared.cpp:
>>
>> https://github.com/openjdk/jdk/blob/372fc58e897d25713db0dfe289ed25c40d9a3985/src/hotspot/share/cds/heapShared.cpp#L104-L107
>>
>> As we plan to improve the archive heap, it becomes critical to be able to write specific test cases for different scenarios.
>>
>> For example, supporting LambdaForms in the CDS archive heap would require archiving enums of the type [sun.invoke.util.Wrapper](https://github.com/openjdk/jdk/blob/607612899678234c093dc644d3a40cb831c7e43b/src/java.base/share/classes/sun/invoke/util/Wrapper.java), which doesn't work yet (see [JDK-8293187](https://bugs.openjdk.org/browse/JDK-8293187)). This RFE makes it possible to develop support for sun.invoke.util.Wrapper separately, without implementing the full support of LambdaForms in a single colossal step.
>>
>> - Added `-XX:ArchiveHeapTestClass` to inject extra classes into the archive heap. See the test case ArchiveHeapTestClass.java for examples. For paranoia, This flag is available only in debug builds.
>> - I also tighten the requirement for the type of classes that can be stored into the archive heap. E.g., we no longer allow classes outside of the `java.base` module.
>
> Ioi Lam has updated the pull request incrementally with one additional commit since the last revision:
>
> fixed minimal build
src/hotspot/share/cds/cds_globals.hpp line 78:
> 76: "product builds. The \"archivedObjects\" static field " \
> 77: "of the specified class is stored in the CDS archive heap") \
> 78: \
"Not available in product builds" is redundant with the flag definition.
src/hotspot/share/cds/heapShared.cpp line 1542:
> 1540: }
> 1541:
> 1542: Klass* k = SystemDictionary::resolve_or_fail(klass_name, true, THREAD);
Is this all only needed for #ifndef PRODUCT ?? if so you can put a ResourceMark unconditionally here because it seems like one might be needed.
src/hotspot/share/cds/heapShared.cpp line 1663:
> 1661: // otherwise it must be in (B).
> 1662: for (int j = 0; j < name->utf8_length(); j++) {
> 1663: if (name->char_at(j) == '/') {
Can you use strchr instead?
-------------
PR: https://git.openjdk.org/jdk/pull/10110
More information about the hotspot-runtime-dev
mailing list