/* * Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.hazelcast.memory; import java.lang.management.GarbageCollectorMXBean; import java.lang.management.ManagementFactory; import java.util.HashSet; import java.util.Set; /** * Used to gather garbage collection statistics. */ public final class GCStatsSupport { private static final Set<String> YOUNG_GC = new HashSet<String>(3); private static final Set<String> OLD_GC = new HashSet<String>(3); static { YOUNG_GC.add("PS Scavenge"); YOUNG_GC.add("ParNew"); YOUNG_GC.add("G1 Young Generation"); OLD_GC.add("PS MarkSweep"); OLD_GC.add("ConcurrentMarkSweep"); OLD_GC.add("G1 Old Generation"); } /** * No public constructor is needed for utility classes */ private GCStatsSupport() { } static void fill(DefaultGarbageCollectorStats stats) { long minorCount = 0; long minorTime = 0; long majorCount = 0; long majorTime = 0; long unknownCount = 0; long unknownTime = 0; for (GarbageCollectorMXBean gc : ManagementFactory.getGarbageCollectorMXBeans()) { long count = gc.getCollectionCount(); if (count >= 0) { if (YOUNG_GC.contains(gc.getName())) { minorCount += count; minorTime += gc.getCollectionTime(); } else if (OLD_GC.contains(gc.getName())) { majorCount += count; majorTime += gc.getCollectionTime(); } else { unknownCount += count; unknownTime += gc.getCollectionTime(); } } } stats.setMajorCount(majorCount); stats.setMajorTime(majorTime); stats.setMinorCount(minorCount); stats.setMinorTime(minorTime); stats.setUnknownCount(unknownCount); stats.setUnknownTime(unknownTime); } public static GarbageCollectorStats getGCStats() { DefaultGarbageCollectorStats stats = new DefaultGarbageCollectorStats(); fill(stats); return stats; } }