RFR: 8371643: Remove ThreadLocalAllocBuffer::_reserve_for_allocation_prefetch [v2]
Martin Doerr
mdoerr at openjdk.org
Sun Nov 16 13:23:07 UTC 2025
On Thu, 13 Nov 2025 11:35:04 GMT, Albert Mingkun Yang <ayang at openjdk.org> wrote:
>> We have seen crashes on many platforms (including x64) while running `make run-test TEST=runtime/cds/appcds/aotClassLinking/LambdaInExcludedClass.java JTREG="VM_OPTIONS=-XX:+UseCompactObjectHeaders"`:
>>
>> SIGSEGV (0xb) at pc=0x00007f2f95a61e7a, pid=18554, tid=18557
>> V [libjvm.so+0x15bfe7a] MemAllocator::finish(HeapWordImpl**) const+0xca (klass.inline.hpp:72)
>> V [libjvm.so+0x15c029f] ObjAllocator::initialize(HeapWordImpl**) const+0x2f (memAllocator.cpp:391)
>> V [libjvm.so+0xb0630b] CollectedHeap::fill_with_object(HeapWordImpl**, unsigned long, bool)+0x27b (collectedHeap.cpp:491)
>> V [libjvm.so+0x1c7a0bb] ThreadLocalAllocBuffer::retire(ThreadLocalAllocStats*)+0x11b (threadLocalAllocBuffer.cpp:118)
>> V [libjvm.so+0x15c0b14] MemAllocator::mem_allocate_inside_tlab_slow(MemAllocator::Allocation&) const+0x84 (memAllocator.cpp:286)
>> V [libjvm.so+0x15c13ab] MemAllocator::mem_allocate(MemAllocator::Allocation&) const+0xbb (memAllocator.cpp:340)
>> V [libjvm.so+0x15c14f9] MemAllocator::allocate() const+0xa9 (memAllocator.cpp:353)
>> V [libjvm.so+0x1cc052e] TypeArrayKlass::allocate_common(int, bool, JavaThread*)+0x13e (collectedHeap.inline.hpp:41)
>> V [libjvm.so+0x16fbc98] oopFactory::new_typeArray(BasicType, int, JavaThread*)+0x38 (typeArrayKlass.hpp:51)
>> V [libjvm.so+0x106b0f3] java_lang_Class::restore_archived_mirror(Klass*, Handle, Handle, Handle, JavaThread*)+0x413 (javaClasses.cpp:1246)
>> V [libjvm.so+0x14100bc] Klass::restore_unshareable_info(ClassLoaderData*, Handle, JavaThread*)+0x66c (klass.cpp:903)
>> V [libjvm.so+0xfe2cb1] InstanceKlass::restore_unshareable_info(ClassLoaderData*, Handle, PackageEntry*, JavaThread*)+0x81 (instanceKlass.cpp:2823)
>> V [libjvm.so+0x1c0f5ad] SystemDictionary::preload_class(Handle, InstanceKlass*, JavaThread*)+0x1ed (systemDictionary.cpp:1198)
>> V [libjvm.so+0x676e83] AOTLinkedClassBulkLoader::preload_classes_in_table(Array<InstanceKlass*>*, char const*, Handle, JavaThread*)+0x1a3 (aotLinkedClassBulkLoader.cpp:103)
>> V [libjvm.so+0x679af5] AOTLinkedClassBulkLoader::preload_classes_impl(JavaThread*)+0x165 (aotLinkedClassBulkLoader.cpp:76)
>> V [libjvm.so+0x67c371] AOTLinkedClassBulkLoader::preload_classes(JavaThread*)+0x11 (aotLinkedClassBulkLoader.cpp:61)
>> V [libjvm.so+0x1d5bf30] vmClasses::resolve_all(JavaThread*)+0x3e0 (vmClasses.cpp:126)
>> V [libjvm.so+0x1c0f28c] SystemDictionary::initialize(JavaThread*)+0x10c (systemDictionary.cpp:1623)
>> V [libjvm.so+0x1cc74ca] Uni...
>
>> ... make run-test TEST=runtime/cds/appcds/aotClassLinking/LambdaInExcludedClass.java JTREG="VM_OPTIONS=-XX:+UseCompactObjectHeaders"
>
> I suspect the crash is caused by a preexisting issue that is exposed by this patch.
>
> In `vmClasses::resolve_all`:
>
> #if INCLUDE_CDS
> if (CDSConfig::is_using_aot_linked_classes()) {
> AOTLinkedClassBulkLoader::preload_classes(THREAD);
> }
> #endif
>
> // Preload commonly used klasses
> vmClassID scan = vmClassID::FIRST;
> // first do Object, then String, Class
> resolve_through(VM_CLASS_ID(Object_klass), scan, CHECK);
> CollectedHeap::set_filler_object_klass(vmClasses::Object_klass());
>
>
> The filler-klass is not initialized when `preload_classes` is invoked, but `preload_classes` use heap-allocation, which may require filler-obj.
>
> @iklam What do you think?
> @albertnetymk I've pushed #28315. Please verify if it fixes the crash before integrating this PR. Thanks!
The crashes are fixed. Thanks!
-------------
PR Comment: https://git.openjdk.org/jdk/pull/28240#issuecomment-3538748578
More information about the hotspot-gc-dev
mailing list