diff -r 2e46025d87c6 src/jdk.jfr/share/classes/jdk/jfr/events/AbstractBufferStatisticsEvent.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/AbstractBufferStatisticsEvent.java Wed Apr 01 00:10:22 2020 +0800 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.jfr.events; + +import jdk.internal.misc.VM.BufferPool; + +import jdk.jfr.*; +import jdk.jfr.internal.Type; + +@Category({ "Java Application", "Statistics" }) +public abstract class AbstractBufferStatisticsEvent extends AbstractJDKEvent { + + AbstractBufferStatisticsEvent() { + BufferPool bufferPool = getBufferPool(); + + count = bufferPool.getCount(); + totalCapacity = bufferPool.getTotalCapacity(); + memoryUsed = bufferPool.getMemoryUsed(); + } + + @Label("Count") + public long count; + + @Label("Total Capacity") + @DataAmount + public long totalCapacity; + + @Label("Memory Used") + @DataAmount + public long memoryUsed; + + abstract BufferPool getBufferPool(); +} diff -r 2e46025d87c6 src/jdk.jfr/share/classes/jdk/jfr/events/DirectBufferStatisticsEvent.java --- a/src/jdk.jfr/share/classes/jdk/jfr/events/DirectBufferStatisticsEvent.java Thu Mar 05 10:30:46 2020 +0800 +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/DirectBufferStatisticsEvent.java Wed Apr 01 00:10:22 2020 +0800 @@ -25,28 +25,31 @@ package jdk.jfr.events; +import jdk.internal.misc.VM; +import jdk.internal.misc.VM.BufferPool; + import jdk.jfr.*; import jdk.jfr.internal.Type; @Name(Type.EVENT_NAME_PREFIX + "DirectBufferStatistics") @Label("Direct Buffer Statistics") -@Category({ "Java Application", "Statistics" }) @Description("Statistics of direct buffer") -public final class DirectBufferStatisticsEvent extends AbstractJDKEvent { - - @Label("Count") - public long count; +public final class DirectBufferStatisticsEvent extends AbstractBufferStatisticsEvent { - @Label("Total Capacity") - @DataAmount - public long totalCapacity; + private static final BufferPool DIRECT_BUFFER_POOL = VM.getBufferPools().stream() + .filter(p -> "direct".equals(p.getName())) + .findFirst().get(); - @Label("Memory Used") - @DataAmount - public long memoryUsed; + public DirectBufferStatisticsEvent() { + this.maxCapacity = VM.maxDirectMemory(); + } @Label("Maximum Capacity") @Description("Maximum direct buffer capacity the process can use") @DataAmount public long maxCapacity; + + BufferPool getBufferPool() { + return DIRECT_BUFFER_POOL; + } } diff -r 2e46025d87c6 src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java Thu Mar 05 10:30:46 2020 +0800 +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java Wed Apr 01 00:10:22 2020 +0800 @@ -28,9 +28,6 @@ import java.util.ArrayList; import java.util.List; -import jdk.internal.misc.VM; -import jdk.internal.misc.VM.BufferPool; - import jdk.jfr.Event; import jdk.jfr.events.ActiveRecordingEvent; import jdk.jfr.events.ActiveSettingEvent; @@ -170,16 +167,8 @@ RequestEngine.removeHook(emitDirectBufferStatistics); } - private static final BufferPool DIRECT_BUFFER_POOL = VM.getBufferPools().stream() - .filter(p -> "direct".equals(p.getName())) - .findFirst().get(); - private static void emitDirectBufferStatistics() { DirectBufferStatisticsEvent e = new DirectBufferStatisticsEvent(); - e.count = DIRECT_BUFFER_POOL.getCount(); - e.totalCapacity = DIRECT_BUFFER_POOL.getTotalCapacity(); - e.memoryUsed = DIRECT_BUFFER_POOL.getMemoryUsed(); - e.maxCapacity = VM.maxDirectMemory(); e.commit(); } }