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: : 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