openjdk-11/ZGC-reuse-entries-of-ResolvedMethodTable.patch

73 lines
3.1 KiB
Diff
Raw Normal View History

From 9f63ba9b77f9f5391b2f79d2a4c3a444268a54ca Mon Sep 17 00:00:00 2001
Date: Tue, 21 Apr 2020 17:00:15 +0000
Subject: [PATCH] ZGC: reuse entries of ResolvedMethodTable
Summary: <gc>: <zgc need remove unused entries of ResolvedMethodTable in mark end>
LLT: test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java
Bug url: NA
---
src/hotspot/share/gc/z/zHeap.cpp | 5 +++++
.../hotspot/jtreg/runtime/MemberName/MemberNameLeak.java | 16 +++++++++++++---
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/src/hotspot/share/gc/z/zHeap.cpp b/src/hotspot/share/gc/z/zHeap.cpp
index 62f97d2..e950acf 100644
--- a/src/hotspot/share/gc/z/zHeap.cpp
+++ b/src/hotspot/share/gc/z/zHeap.cpp
@@ -49,6 +49,7 @@
#include "runtime/thread.hpp"
#include "utilities/align.hpp"
#include "utilities/debug.hpp"
+#include "prims/resolvedMethodTable.hpp"
static const ZStatSampler ZSamplerHeapUsedBeforeMark("Memory", "Heap Used Before Mark", ZStatUnitBytes);
static const ZStatSampler ZSamplerHeapUsedAfterMark("Memory", "Heap Used After Mark", ZStatUnitBytes);
@@ -334,6 +335,10 @@ bool ZHeap::mark_end() {
Universe::verify();
}
+ // Free unsed entries of ResolvedMethodTable and weakhandles
+ // avoid ResolvedMethodTable inflation and native memory leak
+ ResolvedMethodTable::unlink();
+
return true;
}
diff --git a/test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java b/test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java
index 357f27f..930a542 100644
--- a/test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java
+++ b/test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java
@@ -59,9 +59,18 @@ public class MemberNameLeak {
public static void test(String gc) throws Throwable {
// Run this Leak class with logging
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
- "-Xlog:membername+table=trace",
- gc, Leak.class.getName());
+ ProcessBuilder pb;
+ if (gc.contains("UseZGC")) {
+ pb = ProcessTools.createJavaProcessBuilder(
+ "-Xlog:membername+table=trace",
+ "-XX:+UnlockExperimentalVMOptions",
+ gc, Leak.class.getName());
+
+ } else {
+ pb = ProcessTools.createJavaProcessBuilder(
+ "-Xlog:membername+table=trace",
+ gc, Leak.class.getName());
+ }
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldContain("ResolvedMethod entry added for MemberNameLeak$Leak.callMe()V");
output.shouldContain("ResolvedMethod entry found for MemberNameLeak$Leak.callMe()V");
@@ -73,6 +82,7 @@ public class MemberNameLeak {
test("-XX:+UseG1GC");
test("-XX:+UseParallelGC");
test("-XX:+UseSerialGC");
+ test("-XX:+UseZGC");
if (!Compiler.isGraalEnabled()) { // Graal does not support CMS
test("-XX:+UseConcMarkSweepGC");
}
--
1.8.3.1