73 lines
3.1 KiB
Diff
73 lines
3.1 KiB
Diff
|
|
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
|
||
|
|
|