RFR: 8247536: Support for pre-generated java.lang.invoke classes in CDS static archive [v12]
Ioi Lam
iklam at openjdk.java.net
Wed Oct 7 17:56:13 UTC 2020
On Tue, 6 Oct 2020 20:46:17 GMT, Yumin Qi <minqi at openjdk.org> wrote:
>> This patch is reorganized after 8252725, which is separated from this patch to refactor jlink glugin code. The previous
>> webrev with hg can be found at: http://cr.openjdk.java.net/~minqi/2020/8247536/webrev-05. With 8252725 integrated, the
>> regeneration of holder classes is simply to call the new added GenerateJLIClassesHelper.cdsGenerateHolderClasses
>> function. Tests: tier1-4
>
> Yumin Qi has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains
> 23 commits:
> - Added new separate function to CDS for logging species and modified the existing function to log lambda form invokers.
> Changed isDumpLoadedClassList to a reasonable name isDumpingClassList as read only in CDS.
> - Merge branch 'master' of https://github.com/openjdk/jdk into jdk-8247536
> - Removed unused imports.
> - Fixed comments with correct class and method name in CDS, removed unused variables after last change.
> - Moved and renamed cdsGenerateHolderClasses from GenerateJLIClassesHelp to CDS as generateLambdaFormHolderClasses. Added
> input verification function in CDS before class generation. Added more test scenarios. Removed trailing unused ending
> words for output of lambda form trace line in case of DumpLoadedClassList.
> - Move the check work to java, restore code in VM. Modified test code according to the changes. The invoke name
> verififcation is not implemented since not all the holder class are processed, not all the functions of processed
> holder classes are added. For holder class with DirectMethodHandle in its name, only the name in the
> DMH_METHOD_TYPE_MAP keyset is added, ithe line with other names just gets skipped silently. This makes the verification
> on invoke names difficul, a name not in the keyset should not fail the test. Also add a boolean to
> cdsGenerateHolderClasses to indicate call path.
> - Remove trailing word of line which is not used in holder class regeneration. There is a trailing LF (Line Feed) so trim
> white spaces from both front and end of the line or it will fail method type validation.
> - In case of exception happens during reloading class, CHECK will return without free the allocated buffer for class
> bytes so moved the buffer allocation and freeing to caller. Also removed test 6 since there is not guarantee that we
> can give a signature which will always fail. Additional changes to GenerateJLIClassesHelper according to review
> suggestion.
> - Merge branch 'master' of https://github.com/openjdk/jdk into jdk-8247536
> - Merge branch 'master' of https://git.openjdk.java.net/jdk into jdk-8247536
> - ... and 13 more: https://git.openjdk.java.net/jdk/compare/82fe023b...f5584dcf
Marked as reviewed by iklam (Reviewer).
src/hotspot/share/classfile/lambdaFormInvokers.cpp line 133:
> 131: log_info(cds)("Class %s not present, skip", name);
> 132: return;
> 133: }
`assert(klass->is_instance_klass(), "Should be");` should be after the NULL check of `klass`
src/hotspot/share/prims/jvm.cpp line 3872:
> 3870: JVM_ENTRY(jboolean, JVM_IsDumpingClassList(JNIEnv *env))
> 3871: JVMWrapper("JVM_IsDumpingClassList");
> 3872: return DumpLoadedClassList != NULL && classlist_file->is_open();
For sanity, it's better to add `classlist_file != NULL`
-------------
PR: https://git.openjdk.java.net/jdk/pull/193
More information about the core-libs-dev
mailing list