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