From 33794d161467635eb32591fee189e5409cd2d114 Mon Sep 17 00:00:00 2001 From: Guoxiong Li Date: Fri, 5 Sep 2025 13:34:45 +0000 Subject: [PATCH] 8357188: Remove the field MemAllocator::Allocation::_overhead_limit_exceeded and the related code Reviewed-by: ayang, shade --- src/hotspot/share/gc/epsilon/epsilonHeap.cpp | 3 +-- src/hotspot/share/gc/epsilon/epsilonHeap.hpp | 2 +- src/hotspot/share/gc/g1/g1CollectedHeap.cpp | 3 +-- src/hotspot/share/gc/g1/g1CollectedHeap.hpp | 3 +-- .../share/gc/parallel/parallelScavengeHeap.cpp | 13 ++++--------- .../share/gc/parallel/parallelScavengeHeap.hpp | 12 +++--------- src/hotspot/share/gc/serial/serialHeap.cpp | 3 +-- src/hotspot/share/gc/serial/serialHeap.hpp | 2 +- src/hotspot/share/gc/shared/collectedHeap.hpp | 3 +-- src/hotspot/share/gc/shared/memAllocator.cpp | 11 +++-------- src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp | 3 +-- src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp | 2 +- src/hotspot/share/gc/z/zCollectedHeap.cpp | 2 +- src/hotspot/share/gc/z/zCollectedHeap.hpp | 2 +- 14 files changed, 21 insertions(+), 43 deletions(-) diff --git a/src/hotspot/share/gc/epsilon/epsilonHeap.cpp b/src/hotspot/share/gc/epsilon/epsilonHeap.cpp index 693e915b98e..c324aa9baff 100644 --- a/src/hotspot/share/gc/epsilon/epsilonHeap.cpp +++ b/src/hotspot/share/gc/epsilon/epsilonHeap.cpp @@ -260,8 +260,7 @@ HeapWord* EpsilonHeap::allocate_new_tlab(size_t min_size, return res; } -HeapWord* EpsilonHeap::mem_allocate(size_t size, bool *gc_overhead_limit_was_exceeded) { - *gc_overhead_limit_was_exceeded = false; +HeapWord* EpsilonHeap::mem_allocate(size_t size) { return allocate_work(size); } diff --git a/src/hotspot/share/gc/epsilon/epsilonHeap.hpp b/src/hotspot/share/gc/epsilon/epsilonHeap.hpp index 24b43fe3541..f8aa9d7dbf1 100644 --- a/src/hotspot/share/gc/epsilon/epsilonHeap.hpp +++ b/src/hotspot/share/gc/epsilon/epsilonHeap.hpp @@ -85,7 +85,7 @@ public: // Allocation HeapWord* allocate_work(size_t size, bool verbose = true); - HeapWord* mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded) override; + HeapWord* mem_allocate(size_t size) override; HeapWord* allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size) override; diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp index 618e9b055fe..de3fc0f5da5 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp @@ -396,8 +396,7 @@ HeapWord* G1CollectedHeap::allocate_new_tlab(size_t min_size, } HeapWord* -G1CollectedHeap::mem_allocate(size_t word_size, - bool* gc_overhead_limit_was_exceeded) { +G1CollectedHeap::mem_allocate(size_t word_size) { assert_heap_not_locked_and_not_at_safepoint(); if (is_humongous(word_size)) { diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp index 49bbcf888be..0bb16edaf78 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp @@ -442,8 +442,7 @@ private: size_t requested_size, size_t* actual_size) override; - HeapWord* mem_allocate(size_t word_size, - bool* gc_overhead_limit_was_exceeded) override; + HeapWord* mem_allocate(size_t word_size) override; // First-level mutator allocation attempt: try to allocate out of // the mutator alloc region without taking the Heap_lock. This diff --git a/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp b/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp index 3b530895eb1..9b40475288d 100644 --- a/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp +++ b/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp @@ -266,19 +266,16 @@ bool ParallelScavengeHeap::requires_barriers(stackChunkOop p) const { // and the rest will not be executed. For that reason, this method loops // during failed allocation attempts. If the java heap becomes exhausted, // we rely on the size_policy object to force a bail out. -HeapWord* ParallelScavengeHeap::mem_allocate(size_t size, - bool* gc_overhead_limit_was_exceeded) { +HeapWord* ParallelScavengeHeap::mem_allocate(size_t size) { assert(!SafepointSynchronize::is_at_safepoint(), "should not be at safepoint"); assert(Thread::current() != (Thread*)VMThread::vm_thread(), "should not be in vm thread"); assert(!Heap_lock->owned_by_self(), "this thread should not own the Heap_lock"); bool is_tlab = false; - return mem_allocate_work(size, is_tlab, gc_overhead_limit_was_exceeded); + return mem_allocate_work(size, is_tlab); } -HeapWord* ParallelScavengeHeap::mem_allocate_work(size_t size, - bool is_tlab, - bool* gc_overhead_limit_was_exceeded) { +HeapWord* ParallelScavengeHeap::mem_allocate_work(size_t size, bool is_tlab) { for (uint loop_count = 0; /* empty */; ++loop_count) { // Try young-gen first. HeapWord* result = young_gen()->allocate(size); @@ -442,10 +439,8 @@ size_t ParallelScavengeHeap::unsafe_max_tlab_alloc(Thread* thr) const { } HeapWord* ParallelScavengeHeap::allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size) { - bool dummy; HeapWord* result = mem_allocate_work(requested_size /* size */, - true /* is_tlab */, - &dummy); + true /* is_tlab */); if (result != nullptr) { *actual_size = requested_size; } diff --git a/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp b/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp index b0e804edb70..bd701ae8be3 100644 --- a/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp +++ b/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp @@ -102,9 +102,7 @@ class ParallelScavengeHeap : public CollectedHeap { inline bool should_alloc_in_eden(size_t size) const; - HeapWord* mem_allocate_work(size_t size, - bool is_tlab, - bool* gc_overhead_limit_was_exceeded); + HeapWord* mem_allocate_work(size_t size, bool is_tlab); HeapWord* expand_heap_and_allocate(size_t size, bool is_tlab); @@ -192,12 +190,8 @@ public: MemRegion reserved_region() const { return _reserved; } HeapWord* base() const { return _reserved.start(); } - // Memory allocation. "gc_time_limit_was_exceeded" will - // be set to true if the adaptive size policy determine that - // an excessive amount of time is being spent doing collections - // and caused a null to be returned. If a null is not returned, - // "gc_time_limit_was_exceeded" has an undefined meaning. - HeapWord* mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded) override; + // Memory allocation. + HeapWord* mem_allocate(size_t size) override; HeapWord* satisfy_failed_allocation(size_t size, bool is_tlab); diff --git a/src/hotspot/share/gc/serial/serialHeap.cpp b/src/hotspot/share/gc/serial/serialHeap.cpp index f97cd4e3b70..662a6be695b 100644 --- a/src/hotspot/share/gc/serial/serialHeap.cpp +++ b/src/hotspot/share/gc/serial/serialHeap.cpp @@ -335,8 +335,7 @@ HeapWord* SerialHeap::mem_allocate_work(size_t size, bool is_tlab) { return result; } -HeapWord* SerialHeap::mem_allocate(size_t size, - bool* gc_overhead_limit_was_exceeded) { +HeapWord* SerialHeap::mem_allocate(size_t size) { return mem_allocate_work(size, false /* is_tlab */); } diff --git a/src/hotspot/share/gc/serial/serialHeap.hpp b/src/hotspot/share/gc/serial/serialHeap.hpp index f0194f1a4a2..72778981eee 100644 --- a/src/hotspot/share/gc/serial/serialHeap.hpp +++ b/src/hotspot/share/gc/serial/serialHeap.hpp @@ -133,7 +133,7 @@ public: size_t max_capacity() const override; - HeapWord* mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded) override; + HeapWord* mem_allocate(size_t size) override; // Callback from VM_SerialCollectForAllocation operation. // This function does everything necessary/possible to satisfy an diff --git a/src/hotspot/share/gc/shared/collectedHeap.hpp b/src/hotspot/share/gc/shared/collectedHeap.hpp index 33d2fad8bba..57bd9316731 100644 --- a/src/hotspot/share/gc/shared/collectedHeap.hpp +++ b/src/hotspot/share/gc/shared/collectedHeap.hpp @@ -162,8 +162,7 @@ class CollectedHeap : public CHeapObj { // The obj and array allocate methods are covers for these methods. // mem_allocate() should never be // called to allocate TLABs, only individual objects. - virtual HeapWord* mem_allocate(size_t size, - bool* gc_overhead_limit_was_exceeded) = 0; + virtual HeapWord* mem_allocate(size_t size) = 0; // Filler object utilities. static inline size_t filler_array_hdr_size(); diff --git a/src/hotspot/share/gc/shared/memAllocator.cpp b/src/hotspot/share/gc/shared/memAllocator.cpp index 741b0ffb020..265c01b3683 100644 --- a/src/hotspot/share/gc/shared/memAllocator.cpp +++ b/src/hotspot/share/gc/shared/memAllocator.cpp @@ -48,7 +48,6 @@ class MemAllocator::Allocation: StackObj { const MemAllocator& _allocator; JavaThread* _thread; oop* _obj_ptr; - bool _overhead_limit_exceeded; bool _allocated_outside_tlab; size_t _allocated_tlab_size; @@ -71,7 +70,6 @@ public: : _allocator(allocator), _thread(JavaThread::cast(allocator._thread)), // Do not use Allocation in non-JavaThreads. _obj_ptr(obj_ptr), - _overhead_limit_exceeded(false), _allocated_outside_tlab(false), _allocated_tlab_size(0) { @@ -119,7 +117,7 @@ bool MemAllocator::Allocation::check_out_of_memory() { return false; } - const char* message = _overhead_limit_exceeded ? "GC overhead limit exceeded" : "Java heap space"; + const char* message = "Java heap space"; if (!_thread->is_in_internal_oome_mark()) { // -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError support report_java_out_of_memory(message); @@ -133,10 +131,7 @@ bool MemAllocator::Allocation::check_out_of_memory() { message); } - oop exception = _overhead_limit_exceeded ? - Universe::out_of_memory_error_gc_overhead_limit() : - Universe::out_of_memory_error_java_heap(); - THROW_OOP_(exception, true); + THROW_OOP_(Universe::out_of_memory_error_java_heap(), true); } else { THROW_OOP_(Universe::out_of_memory_error_java_heap_without_backtrace(), true); } @@ -238,7 +233,7 @@ void MemAllocator::Allocation::notify_allocation() { HeapWord* MemAllocator::mem_allocate_outside_tlab(Allocation& allocation) const { allocation._allocated_outside_tlab = true; - HeapWord* mem = Universe::heap()->mem_allocate(_word_size, &allocation._overhead_limit_exceeded); + HeapWord* mem = Universe::heap()->mem_allocate(_word_size); if (mem == nullptr) { return mem; } diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp index b662aeb7eb7..927c9e15dc5 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp @@ -1094,8 +1094,7 @@ HeapWord* ShenandoahHeap::allocate_memory_under_lock(ShenandoahAllocRequest& req return result; } -HeapWord* ShenandoahHeap::mem_allocate(size_t size, - bool* gc_overhead_limit_was_exceeded) { +HeapWord* ShenandoahHeap::mem_allocate(size_t size) { ShenandoahAllocRequest req = ShenandoahAllocRequest::for_shared(size); return allocate_memory(req); } diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp index bec1235e941..eafd1b28b3a 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp @@ -704,7 +704,7 @@ private: public: HeapWord* allocate_memory(ShenandoahAllocRequest& request); - HeapWord* mem_allocate(size_t size, bool* what) override; + HeapWord* mem_allocate(size_t size) override; MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data, size_t size, Metaspace::MetadataType mdtype) override; diff --git a/src/hotspot/share/gc/z/zCollectedHeap.cpp b/src/hotspot/share/gc/z/zCollectedHeap.cpp index 238b5b06683..ae60219139c 100644 --- a/src/hotspot/share/gc/z/zCollectedHeap.cpp +++ b/src/hotspot/share/gc/z/zCollectedHeap.cpp @@ -149,7 +149,7 @@ oop ZCollectedHeap::array_allocate(Klass* klass, size_t size, int length, bool d return allocator.allocate(); } -HeapWord* ZCollectedHeap::mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded) { +HeapWord* ZCollectedHeap::mem_allocate(size_t size) { const size_t size_in_bytes = ZUtils::words_to_bytes(align_object_size(size)); return (HeapWord*)ZHeap::heap()->alloc_object(size_in_bytes); } diff --git a/src/hotspot/share/gc/z/zCollectedHeap.hpp b/src/hotspot/share/gc/z/zCollectedHeap.hpp index 3d466564b54..c124976c80f 100644 --- a/src/hotspot/share/gc/z/zCollectedHeap.hpp +++ b/src/hotspot/share/gc/z/zCollectedHeap.hpp @@ -76,7 +76,7 @@ public: bool requires_barriers(stackChunkOop obj) const override; oop array_allocate(Klass* klass, size_t size, int length, bool do_zero, TRAPS) override; - HeapWord* mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded) override; + HeapWord* mem_allocate(size_t size) override; MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data, size_t size, Metaspace::MetadataType mdtype) override;