Projects
openEuler:24.03:SP1:Everything
openjdk-1.8.0
_service:tar_scm:8065402-G1-does-not-expand-mar...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:8065402-G1-does-not-expand-marking-stack-when-mark-s.patch of Package openjdk-1.8.0
From 21a76a7829958e0064051956d1d1f6ddb8b48650 Mon Sep 17 00:00:00 2001 From: eapen <zhangyipeng7@huawei.com> Date: Mon, 24 Oct 2022 14:54:04 +0800 Subject: [PATCH 28/33] I68TO2: 8065402: G1 does not expand marking stack when mark stack overflow happens during concurrent marking --- .../vm/gc_implementation/g1/concurrentMark.cpp | 22 ++++++---------------- .../vm/gc_implementation/g1/concurrentMark.hpp | 4 ---- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp index 831ec94..df901a5 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp @@ -247,7 +247,6 @@ bool CMMarkStack::allocate(size_t capacity) { setEmpty(); _capacity = (jint) capacity; _saved_index = -1; - _should_expand = false; NOT_PRODUCT(_max_depth = 0); return true; } @@ -256,8 +255,6 @@ void CMMarkStack::expand() { // Called, during remark, if we've overflown the marking stack during marking. assert(isEmpty(), "stack should been emptied while handling overflow"); assert(_capacity <= (jint) MarkStackSizeMax, "stack bigger than permitted"); - // Clear expansion flag - _should_expand = false; if (_capacity == (jint) MarkStackSizeMax) { if (PrintGCDetails && Verbose) { gclog_or_tty->print_cr(" (benign) Can't expand marking stack capacity, at max size limit"); @@ -290,13 +287,6 @@ void CMMarkStack::expand() { } } -void CMMarkStack::set_should_expand() { - // If we're resetting the marking state because of an - // marking stack overflow, record that we should, if - // possible, expand the stack. - _should_expand = _cm->has_overflown(); -} - CMMarkStack::~CMMarkStack() { if (_base != NULL) { _base = NULL; @@ -795,8 +785,13 @@ void ConcurrentMark::reset() { void ConcurrentMark::reset_marking_state(bool clear_overflow) { - _markStack.set_should_expand(); _markStack.setEmpty(); // Also clears the _markStack overflow flag + + // Expand the marking stack, if we have to and if we can. + if (has_overflown()) { + _markStack.expand(); + } + if (clear_overflow) { clear_has_overflown(); } else { @@ -1367,11 +1362,6 @@ void ConcurrentMark::checkpointRootsFinal(bool clear_all_soft_refs) { set_non_marking_state(); } - // Expand the marking stack, if we have to and if we can. - if (_markStack.should_expand()) { - _markStack.expand(); - } - // Statistics double now = os::elapsedTime(); _remark_mark_times.add((mark_work_end - start) * 1000.0); diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp index f78b1cb..bbd5d59 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp @@ -178,7 +178,6 @@ class CMMarkStack VALUE_OBJ_CLASS_SPEC { NOT_PRODUCT(jint _max_depth;) // max depth plumbed during run bool _overflow; - bool _should_expand; DEBUG_ONLY(bool _drain_in_progress;) DEBUG_ONLY(bool _drain_in_progress_yields;) @@ -255,9 +254,6 @@ class CMMarkStack VALUE_OBJ_CLASS_SPEC { bool overflow() { return _overflow; } void clear_overflow() { _overflow = false; } - bool should_expand() const { return _should_expand; } - void set_should_expand(); - // Expand the stack, typically in response to an overflow condition void expand(); -- 1.8.3.1
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2