RFR: 8293336: AOT-linking of invokedynamic for lambda expression and string concat [v7]
Ioi Lam
iklam at openjdk.org
Tue Oct 22 06:30:29 UTC 2024
On Wed, 16 Oct 2024 22:56:06 GMT, Ashutosh Mehra <asmehra at openjdk.org> wrote:
>> Ioi Lam has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Fixed typo in last commit; fixed header inclusion order
>
> src/hotspot/share/cds/heapShared.cpp line 675:
>
>> 673: const char* klass_name = info->klass_name;
>> 674: for (; fields[i].valid(); i++) {
>> 675: ArchivableStaticFieldInfo* f = &fields[i];
>
> It looks like the pattern of nested for-loops is copied from HeapShared::archive_object_subgraphs()
> but this pattern doesn't seem to give any advantage here. If so can we replace it with just single for loop to make it easier to understand?
I changed it to a single loop as suggested.
> src/hotspot/share/classfile/systemDictionaryShared.cpp line 775:
>
>> 773: // Now, all hidden classes that have not yet been scanned must be marked as excluded
>> 774: auto exclude_remaining_hidden = [&] (InstanceKlass* k, DumpTimeClassInfo& info) {
>> 775: if (k->is_hidden() && !info.has_checked_exclusion()) {
>
> Suggestion: Check for `has_checked_exclusion()` is not really required as the call to `SDS::check_for_exclusion()` does that. And the condition in `guarantee()` can be updated as `info.is_excluded() || info.is_required()`.
I changed the code to the following to make sure that `should_hidden_class_be_archived(k)` is mutually exclusive with `info.is_excluded()`.
auto exclude_remaining_hidden = [&] (InstanceKlass* k, DumpTimeClassInfo& info) {
if (k->is_hidden()) {
SystemDictionaryShared::check_for_exclusion(k, &info);
if (CDSConfig::is_dumping_invokedynamic()) {
if (should_hidden_class_be_archived(k)) {
guarantee(!info.is_excluded(), "Must be");
} else {
guarantee(info.is_excluded(), "Must be");
}
}
}
};
Unfortunately I can do this only for `CDSConfig::is_dumping_invokedynamic()`. In the "legacy CDS" mode of lambda support, we actually would return true from `should_hidden_class_be_archived(k)` and then later decide to exclude `k`.
> src/hotspot/share/oops/constantPool.cpp line 340:
>
>> 338: src_cp->iterate_archivable_resolved_references([&](int rr_index) {
>> 339: keep_resolved_refs.at_put(rr_index, true);
>> 340: });
>
> Indentation seems off here
Fixed.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21143#discussion_r1810025512
PR Review Comment: https://git.openjdk.org/jdk/pull/21143#discussion_r1810025031
PR Review Comment: https://git.openjdk.org/jdk/pull/21143#discussion_r1810025626
More information about the hotspot-dev
mailing list