Improve GC serviceability init staging

XMLWordPrintable

    • Type: Bug
    • Resolution: Unresolved
    • Priority: P4
    • None
    • Affects Version/s: 27
    • Component/s: hotspot
    • gc

      As per docs, CollectedHeap::post_initialize is for doing inits that should be done before general allocations are accepted. Currently, serviceability layer initialized there via the call to CollectedHeap::initialize_serviceability. This bug shows that after CollectedHeap::post_initialize returns, the rest of the serviceability layer had not been fully initialized yet. But GC code is free to assume general allocation path works at that point! So if that allocation path reports anything to the serviceability layer, it could encounter not yet fully initialized serviceability support and fail.

      This readily manifests in Epsilon stress tests.

      ---- Original report below ----

      Test: gc/epsilon/TestInitAllocs.java

      command: main -Xmx256m -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:-UseTLAB -XX:-UseCompressedOops -XX:EpsilonMinHeapExpand=1024 -XX:EpsilonUpdateCountersStep=1 -XX:EpsilonPrintHeapSteps=1000000 gc.epsilon.TestInitAllocs

      #
      # A fatal error has been detected by the Java Runtime Environment:
      #
      # SIGSEGV (0xb) at pc=0x0000ffffa1e2e4f8, pid=1771560, tid=1771567
      #
      # JRE version: (27.0+5) (fastdebug build )
      # Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 27-ea+5-400, mixed mode, sharing, tiered, compact obj headers, epsilon gc, linux-aarch64)
      # Problematic frame:
      # V [libjvm.so+0x142e4f8] MemoryPool::record_peak_memory_usage()+0x18
      #
      # Core dump will be written. Default location: Determined by the following: "/opt/core.sh %p" (alternatively, falling back to /opt/mach5/mesos/work_dir/slaves/da1065b5-7b94-4f0d-85e9-a3a252b9a32e-S35310/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/8d8921f0-665d-4ef8-a795-f8ee44886995/runs/9919dde9-bad0-41d0-ba63-dbad943e850d/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_gc/scratch/3/core.1771560)
      #
      #

      --------------- S U M M A R Y ------------

      Command Line: -Dtest.vm.opts=-XX:MaxRAMPercentage=6.25 -Dtest.boot.jdk=/opt/mach5/mesos/work_dir/jib-master/install/jdk/25/37/bundles/linux-aarch64/jdk-25_linux-aarch64_bin.tar.gz/jdk-25 -Djava.io.tmpdir=/opt/mach5/mesos/work_dir/slaves/da1065b5-7b94-4f0d-85e9-a3a252b9a32e-S35310/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/8d8921f0-665d-4ef8-a795-f8ee44886995/runs/9919dde9-bad0-41d0-ba63-dbad943e850d/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_gc/tmp -Dtest.tool.vm.opts=-J-XX:MaxRAMPercentage=6.25 -J-Dtest.boot.jdk=/opt/mach5/mesos/work_dir/jib-master/install/jdk/25/37/bundles/linux-aarch64/jdk-25_linux-aarch64_bin.tar.gz/jdk-25 -J-Djava.io.tmpdir=/opt/mach5/mesos/work_dir/slaves/da1065b5-7b94-4f0d-85e9-a3a252b9a32e-S35310/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/8d8921f0-665d-4ef8-a795-f8ee44886995/runs/9919dde9-bad0-41d0-ba63-dbad943e850d/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_gc/tmp -Dtest.compiler.opts= -Dtest.java.opts=-XX:+UseCompactObjectHeaders -Dtest.jdk=/opt/mach5/mesos/work_dir/jib-master/install/jdk-27+5-400/linux-aarch64-debug.jdk/jdk-27/fastdebug -Dcompile.jdk=/opt/mach5/mesos/work_dir/jib-master/install/jdk-27+5-400/linux-aarch64-debug.jdk/jdk-27/fastdebug -Dtest.timeout.factor=4.0 -Dtest.nativepath=/opt/mach5/mesos/work_dir/jib-master/install/jdk-27+5-400/linux-aarch64-debug.test/hotspot/jtreg/native -Dtest.root=/opt/mach5/mesos/work_dir/jib-master/install/jdk-27+5-400/src.full/open/test/hotspot/jtreg -Dtest.name=gc/epsilon/TestInitAllocs.java -Dtest.verbose=Verbose[p=BRIEF,f=FULL,e=FULL,t=true,m=false] -Dtest.file=/opt/mach5/mesos/work_dir/jib-master/install/jdk-27+5-400/src.full/open/test/hotspot/jtreg/gc/epsilon/TestInitAllocs.java -Dtest.main.class=gc.epsilon.TestInitAllocs -Dtest.src=/opt/mach5/mesos/work_dir/jib-master/install/jdk-27+5-400/src.full/open/test/hotspot/jtreg/gc/epsilon -Dtest.src.path=/opt/mach5/mesos/work_dir/jib-master/install/jdk-27+5-400/src.full/open/test/hotspot/jtreg/gc/epsilon -Dtest.classes=/opt/mach5/mesos/work_dir/slaves/da1065b5-7b94-4f0d-85e9-a3a252b9a32e-S35310/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/8d8921f0-665d-4ef8-a795-f8ee44886995/runs/9919dde9-bad0-41d0-ba63-dbad943e850d/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_gc/classes/2/gc/epsilon/TestInitAllocs.d -Dtest.class.path=/opt/mach5/mesos/work_dir/slaves/da1065b5-7b94-4f0d-85e9-a3a252b9a32e-S35310/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/8d8921f0-665d-4ef8-a795-f8ee44886995/runs/9919dde9-bad0-41d0-ba63-dbad943e850d/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_gc/classes/2/gc/epsilon/TestInitAllocs.d -Dtest.class.path.prefix=/opt/mach5/mesos/work_dir/slaves/da1065b5-7b94-4f0d-85e9-a3a252b9a32e-S35310/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/8d8921f0-665d-4ef8-a795-f8ee44886995/runs/9919dde9-bad0-41d0-ba63-dbad943e850d/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_gc/classes/2/gc/epsilon/TestInitAllocs.d:/opt/mach5/mesos/work_dir/jib-master/install/jdk-27+5-400/src.full/open/test/hotspot/jtreg/gc/epsilon -XX:MaxRAMPercentage=6.25 -Dtest.boot.jdk=/opt/mach5/mesos/work_dir/jib-master/install/jdk/25/37/bundles/linux-aarch64/jdk-25_linux-aarch64_bin.tar.gz/jdk-25 -Djava.io.tmpdir=/opt/mach5/mesos/work_dir/slaves/da1065b5-7b94-4f0d-85e9-a3a252b9a32e-S35310/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/8d8921f0-665d-4ef8-a795-f8ee44886995/runs/9919dde9-bad0-41d0-ba63-dbad943e850d/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_gc/tmp -XX:+UseCompactObjectHeaders -Djava.library.path=/opt/mach5/mesos/work_dir/jib-master/install/jdk-27+5-400/linux-aarch64-debug.test/hotspot/jtreg/native -Xmx256m -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:-UseTLAB -XX:-UseCompressedOops -XX:EpsilonMinHeapExpand=1024 -XX:EpsilonUpdateCountersStep=1 -XX:EpsilonPrintHeapSteps=1000000 com.sun.javatest.regtest.agent.MainWrapper /opt/mach5/mesos/work_dir/slaves/da1065b5-7b94-4f0d-85e9-a3a252b9a32e-S35310/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/8d8921f0-665d-4ef8-a795-f8ee44886995/runs/9919dde9-bad0-41d0-ba63-dbad943e850d/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_gc/gc/epsilon/TestInitAllocs.d/main.4.jta

      Host: AArch64, 8 cores, 30G, Oracle Linux Server release 9.6
      Time: Wed Jan 14 06:54:19 2026 UTC elapsed time: 0.060805 seconds (0d 0h 0m 0s)

      --------------- T H R E A D ---------------

      Current thread (0x0000ffff9c061900): JavaThread "Unknown thread" [_thread_in_vm, id=1771567, stack(0x0000ffffa021a000,0x0000ffffa0418000) (2040K)]

      Stack: [0x0000ffffa021a000,0x0000ffffa0418000], sp=0x0000ffffa0416230, free space=2032k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      V [libjvm.so+0x142e4f8] MemoryPool::record_peak_memory_usage()+0x18 (memoryPool.cpp:159)
      V [libjvm.so+0x1432290] MemoryService::track_memory_usage()+0x44 (memoryService.cpp:149)
      V [libjvm.so+0xbb3b18] EpsilonMonitoringSupport::update_counters()+0x28 (epsilonMonitoringSupport.cpp:103)
      V [libjvm.so+0xbb0bd4] EpsilonHeap::allocate_work(unsigned long) [clone .part.0]+0x3b4 (epsilonHeap.cpp:161)
      V [libjvm.so+0x13fc7f0] MemAllocator::mem_allocate(MemAllocator::Allocation&) const+0xe0 (memAllocator.cpp:236)
      V [libjvm.so+0x13fc8f8] MemAllocator::allocate() const+0x88 (memAllocator.cpp:353)
      V [libjvm.so+0x639be0] AOTStreamedHeapLoader::allocate_object(oopDesc*, markWord, unsigned long, JavaThread*)+0x160 (collectedHeap.inline.hpp:41)
      V [libjvm.so+0x63bad0] AOTStreamedHeapLoader::IterativeObjectLoader::materialize_range(int, int, JavaThread*)+0x870 (aotStreamedHeapLoader.cpp:616)
      V [libjvm.so+0x63c044] AOTStreamedHeapLoader::IterativeObjectLoader::materialize_next_batch(JavaThread*)+0x224 (aotStreamedHeapLoader.cpp:711)
      V [libjvm.so+0x63ca88] AOTStreamedHeapLoader::materialize_early(JavaThread*)+0xbc (aotStreamedHeapLoader.cpp:751)
      V [libjvm.so+0x63d2dc] AOTStreamedHeapLoader::materialize_objects()+0x78 (aotStreamedHeapLoader.cpp:858)
      V [libjvm.so+0x65a50c] AOTThread::aot_thread_entry(JavaThread*, JavaThread*)+0xc (aotThread.cpp:111)
      V [libjvm.so+0xf07568] JavaThread::thread_main_inner()+0x108 (javaThread.cpp:776)
      V [libjvm.so+0x1891f8c] Thread::call_run()+0xac (thread.cpp:242)
      V [libjvm.so+0x155ff3c] thread_native_entry(Thread*)+0x11c (os_linux.cpp:860)
      C [libc.so.6+0x80b50] start_thread+0x300

      siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000

            Assignee:
            Aleksey Shipilev
            Reporter:
            David Holmes
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: