1 Star 0 Fork 81

justinwm/openjdk-1.8.0

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
8065402-G1-does-not-expand-marking-stack-when-mark-s.patch 3.49 KB
一键复制 编辑 原始数据 按行查看 历史
eapen 提交于 2023-01-11 10:00 . I69W1Y: Add feature and bug fix for 8u352
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
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/justinwm/openjdk-1.8.0.git
git@gitee.com:justinwm/openjdk-1.8.0.git
justinwm
openjdk-1.8.0
openjdk-1.8.0
master

搜索帮助