Skip to content

Commit 8796562

Browse files
Merge branch 'master' into JDK-8333664
2 parents efa4f19 + 6a46d55 commit 8796562

File tree

35 files changed

+242
-147
lines changed

35 files changed

+242
-147
lines changed

make/hotspot/lib/JvmFlags.gmk

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ JVM_CFLAGS += \
9191
$(JVM_CFLAGS_TARGET_DEFINES) \
9292
$(JVM_CFLAGS_FEATURES) \
9393
$(JVM_CFLAGS_INCLUDES) \
94-
$(EXTRA_CFLAGS) \
9594
#
9695

9796
ifneq ($(HOTSPOT_OVERRIDE_LIBPATH), )

src/hotspot/cpu/riscv/stubGenerator_riscv.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6151,6 +6151,8 @@ class StubGenerator: public StubCodeGenerator {
61516151
return start;
61526152
}
61536153

6154+
#endif // COMPILER2_OR_JVMCI
6155+
61546156
// x10 = input (float16)
61556157
// f10 = result (float)
61566158
// t1 = temporary register
@@ -6249,8 +6251,6 @@ class StubGenerator: public StubCodeGenerator {
62496251
return entry;
62506252
}
62516253

6252-
#endif // COMPILER2_OR_JVMCI
6253-
62546254
#ifdef COMPILER2
62556255

62566256
static const int64_t right_2_bits = right_n_bits(2);

src/hotspot/share/cds/metaspaceShared.cpp

Lines changed: 34 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -692,25 +692,27 @@ void VM_PopulateDumpSharedSpace::doit() {
692692
_map_info->header()->set_class_location_config(cl_config);
693693
}
694694

695-
class CollectCLDClosure : public CLDClosure {
696-
GrowableArray<ClassLoaderData*> _loaded_cld;
697-
GrowableArray<OopHandle> _loaded_cld_handles; // keep the CLDs alive
698-
Thread* _current_thread;
695+
class CollectClassesForLinking : public KlassClosure {
696+
GrowableArray<OopHandle> _mirrors;
697+
699698
public:
700-
CollectCLDClosure(Thread* thread) : _current_thread(thread) {}
701-
~CollectCLDClosure() {
702-
for (int i = 0; i < _loaded_cld_handles.length(); i++) {
703-
_loaded_cld_handles.at(i).release(Universe::vm_global());
699+
~CollectClassesForLinking() {
700+
for (int i = 0; i < _mirrors.length(); i++) {
701+
_mirrors.at(i).release(Universe::vm_global());
704702
}
705703
}
704+
706705
void do_cld(ClassLoaderData* cld) {
707706
assert(cld->is_alive(), "must be");
708-
_loaded_cld.append(cld);
709-
_loaded_cld_handles.append(OopHandle(Universe::vm_global(), cld->holder()));
710707
}
711708

712-
int nof_cld() const { return _loaded_cld.length(); }
713-
ClassLoaderData* cld_at(int index) { return _loaded_cld.at(index); }
709+
void do_klass(Klass* k) {
710+
if (k->is_instance_klass()) {
711+
_mirrors.append(OopHandle(Universe::vm_global(), k->java_mirror()));
712+
}
713+
}
714+
715+
const GrowableArray<OopHandle>* mirrors() const { return &_mirrors; }
714716
};
715717

716718
// Check if we can eagerly link this class at dump time, so we can avoid the
@@ -751,28 +753,26 @@ void MetaspaceShared::link_shared_classes(bool jcmd_request, TRAPS) {
751753
LambdaFormInvokers::regenerate_holder_classes(CHECK);
752754
}
753755

754-
// Collect all loaded ClassLoaderData.
755-
CollectCLDClosure collect_cld(THREAD);
756-
{
757-
// ClassLoaderDataGraph::loaded_cld_do requires ClassLoaderDataGraph_lock.
758-
// We cannot link the classes while holding this lock (or else we may run into deadlock).
759-
// Therefore, we need to first collect all the CLDs, and then link their classes after
760-
// releasing the lock.
761-
MutexLocker lock(ClassLoaderDataGraph_lock);
762-
ClassLoaderDataGraph::loaded_cld_do(&collect_cld);
763-
}
764756

765757
while (true) {
758+
CollectClassesForLinking collect_classes;
759+
{
760+
// ClassLoaderDataGraph::loaded_classes_do_keepalive() requires ClassLoaderDataGraph_lock.
761+
// We cannot link the classes while holding this lock (or else we may run into deadlock).
762+
// Therefore, we need to first collect all the classes, keeping them alive by
763+
// holding onto their java_mirrors in global OopHandles. We then link the classes after
764+
// releasing the lock.
765+
MutexLocker lock(ClassLoaderDataGraph_lock);
766+
ClassLoaderDataGraph::loaded_classes_do_keepalive(&collect_classes);
767+
}
768+
766769
bool has_linked = false;
767-
for (int i = 0; i < collect_cld.nof_cld(); i++) {
768-
ClassLoaderData* cld = collect_cld.cld_at(i);
769-
for (Klass* klass = cld->klasses(); klass != nullptr; klass = klass->next_link()) {
770-
if (klass->is_instance_klass()) {
771-
InstanceKlass* ik = InstanceKlass::cast(klass);
772-
if (may_be_eagerly_linked(ik)) {
773-
has_linked |= link_class_for_cds(ik, CHECK);
774-
}
775-
}
770+
const GrowableArray<OopHandle>* mirrors = collect_classes.mirrors();
771+
for (int i = 0; i < mirrors->length(); i++) {
772+
OopHandle mirror = mirrors->at(i);
773+
InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(mirror.resolve()));
774+
if (may_be_eagerly_linked(ik)) {
775+
has_linked |= link_class_for_cds(ik, CHECK);
776776
}
777777
}
778778

@@ -1532,7 +1532,7 @@ char* MetaspaceShared::reserve_address_space_for_archives(FileMapInfo* static_ma
15321532
assert(base_address == nullptr ||
15331533
(address)archive_space_rs.base() == base_address, "Sanity");
15341534
// Register archive space with NMT.
1535-
MemTracker::record_virtual_memory_tag(archive_space_rs.base(), mtClassShared);
1535+
MemTracker::record_virtual_memory_tag(archive_space_rs, mtClassShared);
15361536
return archive_space_rs.base();
15371537
}
15381538
return nullptr;
@@ -1605,9 +1605,8 @@ char* MetaspaceShared::reserve_address_space_for_archives(FileMapInfo* static_ma
16051605
release_reserved_spaces(total_space_rs, archive_space_rs, class_space_rs);
16061606
return nullptr;
16071607
}
1608-
// NMT: fix up the space tags
1609-
MemTracker::record_virtual_memory_tag(archive_space_rs.base(), mtClassShared);
1610-
MemTracker::record_virtual_memory_tag(class_space_rs.base(), mtClass);
1608+
MemTracker::record_virtual_memory_tag(archive_space_rs, mtClassShared);
1609+
MemTracker::record_virtual_memory_tag(class_space_rs, mtClass);
16111610
} else {
16121611
if (use_archive_base_addr && base_address != nullptr) {
16131612
total_space_rs = MemoryReserver::reserve((char*) base_address,

src/hotspot/share/gc/g1/g1RegionToSpaceMapper.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ G1RegionToSpaceMapper::G1RegionToSpaceMapper(ReservedSpace rs,
4747
guarantee(is_power_of_2(page_size), "must be");
4848
guarantee(is_power_of_2(region_granularity), "must be");
4949

50-
MemTracker::record_virtual_memory_tag((address)rs.base(), mem_tag);
50+
MemTracker::record_virtual_memory_tag(rs, mem_tag);
5151
}
5252

5353
// Used to manually signal a mapper to handle a set of regions as committed.

src/hotspot/share/gc/parallel/parMarkBitMap.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ ParMarkBitMap::initialize(MemRegion covered_region)
5959
os::trace_page_sizes("Mark Bitmap", raw_bytes, raw_bytes,
6060
rs.base(), rs.size(), used_page_sz);
6161

62-
MemTracker::record_virtual_memory_tag((address)rs.base(), mtGC);
62+
MemTracker::record_virtual_memory_tag(rs, mtGC);
6363

6464
_virtual_space = new PSVirtualSpace(rs, page_sz);
6565

src/hotspot/share/gc/parallel/psParallelCompact.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ ParallelCompactData::create_vspace(size_t count, size_t element_size)
256256
os::trace_page_sizes("Parallel Compact Data", raw_bytes, raw_bytes, rs.base(),
257257
rs.size(), page_sz);
258258

259-
MemTracker::record_virtual_memory_tag((address)rs.base(), mtGC);
259+
MemTracker::record_virtual_memory_tag(rs, mtGC);
260260

261261
PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz);
262262

src/hotspot/share/gc/shared/cardTable.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ void CardTable::initialize(void* region0_start, void* region1_start) {
8787
"card marking array");
8888
}
8989

90-
MemTracker::record_virtual_memory_tag((address)rs.base(), mtGC);
90+
MemTracker::record_virtual_memory_tag(rs, mtGC);
9191

9292
os::trace_page_sizes("Card Table", num_bytes, num_bytes,
9393
rs.base(), rs.size(), _page_size);

src/hotspot/share/gc/shenandoah/shenandoahCardTable.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/*
2+
* Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
23
* Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
34
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
45
*
@@ -83,7 +84,7 @@ void ShenandoahCardTable::initialize(const ReservedSpace& card_table) {
8384
vm_exit_during_initialization("Could not reserve enough space for the card marking array");
8485
}
8586

86-
MemTracker::record_virtual_memory_tag((address)card_table.base(), mtGC);
87+
MemTracker::record_virtual_memory_tag(card_table, mtGC);
8788

8889
os::trace_page_sizes("Card Table", _byte_map_size, _byte_map_size,
8990
card_table.base(), card_table.size(), _page_size);

src/hotspot/share/gc/shenandoah/shenandoahCollectionSet.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ ShenandoahCollectionSet::ShenandoahCollectionSet(ShenandoahHeap* heap, ReservedS
6363
// subsystem for mapping not-yet-written-to pages to a single physical backing page,
6464
// but this is not guaranteed, and would confuse NMT and other memory accounting tools.
6565

66-
MemTracker::record_virtual_memory_tag(_map_space.base(), mtGC);
66+
MemTracker::record_virtual_memory_tag(_map_space, mtGC);
6767

6868
size_t page_size = os::vm_page_size();
6969

src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ jint ShenandoahHeap::initialize() {
303303
bitmap_size_orig, bitmap_page_size,
304304
bitmap.base(),
305305
bitmap.size(), bitmap.page_size());
306-
MemTracker::record_virtual_memory_tag(bitmap.base(), mtGC);
306+
MemTracker::record_virtual_memory_tag(bitmap, mtGC);
307307
_bitmap_region = MemRegion((HeapWord*) bitmap.base(), bitmap.size() / HeapWordSize);
308308
_bitmap_region_special = bitmap.special();
309309

@@ -327,7 +327,7 @@ jint ShenandoahHeap::initialize() {
327327
os::commit_memory_or_exit(verify_bitmap.base(), verify_bitmap.size(), bitmap_page_size, false,
328328
"Cannot commit verification bitmap memory");
329329
}
330-
MemTracker::record_virtual_memory_tag(verify_bitmap.base(), mtGC);
330+
MemTracker::record_virtual_memory_tag(verify_bitmap, mtGC);
331331
MemRegion verify_bitmap_region = MemRegion((HeapWord *) verify_bitmap.base(), verify_bitmap.size() / HeapWordSize);
332332
_verification_bit_map.initialize(_heap_region, verify_bitmap_region);
333333
_verifier = new ShenandoahVerifier(this, &_verification_bit_map);
@@ -341,7 +341,7 @@ jint ShenandoahHeap::initialize() {
341341
bitmap_size_orig, aux_bitmap_page_size,
342342
aux_bitmap.base(),
343343
aux_bitmap.size(), aux_bitmap.page_size());
344-
MemTracker::record_virtual_memory_tag(aux_bitmap.base(), mtGC);
344+
MemTracker::record_virtual_memory_tag(aux_bitmap, mtGC);
345345
_aux_bitmap_region = MemRegion((HeapWord*) aux_bitmap.base(), aux_bitmap.size() / HeapWordSize);
346346
_aux_bitmap_region_special = aux_bitmap.special();
347347
_aux_bit_map.initialize(_heap_region, _aux_bitmap_region);
@@ -359,7 +359,7 @@ jint ShenandoahHeap::initialize() {
359359
region_storage_size_orig, region_page_size,
360360
region_storage.base(),
361361
region_storage.size(), region_storage.page_size());
362-
MemTracker::record_virtual_memory_tag(region_storage.base(), mtGC);
362+
MemTracker::record_virtual_memory_tag(region_storage, mtGC);
363363
if (!region_storage.special()) {
364364
os::commit_memory_or_exit(region_storage.base(), region_storage_size, region_page_size, false,
365365
"Cannot commit region memory");

0 commit comments

Comments
 (0)