From 77feaa857e9e892c1d70722117ef93fe351c5fdb Mon Sep 17 00:00:00 2001 From: xxDark <19853368+xxDark@users.noreply.github.com> Date: Tue, 23 Jun 2020 23:26:30 +0300 Subject: [PATCH] Cache perm gen bean (#876) --- .../reflect/compiler/BackgroundCompiler.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/reflect/compiler/BackgroundCompiler.java b/src/main/java/com/comphenix/protocol/reflect/compiler/BackgroundCompiler.java index cce76ffc..f8bc3fbc 100644 --- a/src/main/java/com/comphenix/protocol/reflect/compiler/BackgroundCompiler.java +++ b/src/main/java/com/comphenix/protocol/reflect/compiler/BackgroundCompiler.java @@ -76,6 +76,8 @@ public class BackgroundCompiler { private ExecutorService executor; private ErrorReporter reporter; + private final Object unknownPermGenBean = new Object(); + private Object permGenBean = unknownPermGenBean; private double disablePermGenFraction = DEFAULT_DISABLE_AT_PERM_GEN; /** @@ -295,11 +297,21 @@ public class BackgroundCompiler { * @return Usage of the perm gen space. */ private double getPermGenUsage() { - for (MemoryPoolMXBean item : ManagementFactory.getMemoryPoolMXBeans()) { - if (item.getName().contains("Perm Gen")) { - MemoryUsage usage = item.getUsage(); - return usage.getUsed() / (double) usage.getCommitted(); + Object permGenBean = this.permGenBean; + if (permGenBean == unknownPermGenBean) { + for (MemoryPoolMXBean item : ManagementFactory.getMemoryPoolMXBeans()) { + if (item.getName().contains("Perm Gen")) { + permGenBean = this.permGenBean = item; + break; + } } + if (permGenBean == unknownPermGenBean) { + permGenBean = this.permGenBean = null; + } + } + if (permGenBean != null) { + MemoryUsage usage = ((MemoryPoolMXBean) permGenBean).getUsage(); + return usage.getUsed() / (double) usage.getCommitted(); } // Unknown