繁体   English   中英

如何在JDK 7和JDK 8中获得次要和主要垃圾回收计数

[英]How to get minor and major garbage collection count in JDK 7 and JDK 8

我正在尝试发布我的服务的垃圾收集统计信息。 它们很少在JDK 7上运行,而很少在JDK8上运行。

我已经读过一个问题: 您可以使用Java获得基本的GC统计信息吗? 我们可以通过MBean获得垃圾回收总数。 但是我试图看一幅稍微不同的图片。

我正在尝试分别发布主要和次要收藏计数。 上面的方法将获得总的收集计数,而不是分为次要和主要。

我想做什么?

List<GarbageCollectorMXBean> listOfGarbageCollectionMBeans = ManagementFactory.getGarbageCollectorMXBeans();
Stats majorGCStats= null;
Stats minorGcStats = null;
for (GarbageCollectorMXBean gcMBean: listOfGarbageCollectionMBeans ) {
Stats stats = new Stats();
// in the method isMajorCollector, trying to identify if the collector is for major or minor depending on pool name
  if (isMajorCollector(gcMBean.getMemoryPoolNames())) {
    majorGCStats= stats;
  }
  else{
     minorGCStats= stats;
  }
  //Collection_MAP is a HashMap of minorGC vs Stats and majorGC vs Stats
  COLLECTION_MAP.put(stats.getName(), stats);
}

public boolean isMajorCollector(String[] poolNames){
    for (final String pool : pools) {
      if (pool.contains("Perm")|| pool.contains("Old")) {
        return true;
      }
    }
    return false;
   }
}


// An inner class to hold the time and name
class Stats{
 private String name;
 private long time;

 public void setTime(final long time){
   this.time= time;
 }

 public void setName(final String name){
   this.name=name;
 }

 public String getName(){
  return this.name;
 }

 public long getTime(){
   return this.time;
  }
 }

我在列表中得到的收集器是:PS Scavenge和PS MarkSweep。

对于PS Scavenge,池名称为:PS Eden Space,PS Survivor Space。

对于PS MarkSweep,池名称为:PS Eden Space,PS Survivor Space,PS Old Gen,PS Perm Gen

我正在使用的JVM参数:

-XX:+ UseParNewGC -XX:+ UseConcMarkSweepGC -XX:+ DisableExplicitGC。

没有提及仅使用cmsinitiatingoccupancy,并且没有提及cmsinitiatingoccupancyfraction。

提前致谢。

 List<GarbageCollectorMXBean> gcMXBeans = ManagementFactory.getGarbageCollectorMXBeans();
 System.out.println("Minor GC count = " + gcMXBeans.get(0).getCollectionCount());
 System.out.println("Major GC count = " + gcMXBeans.get(1).getCollectionCount());

这适用于所有典型收集器的JDK 7和JDK 8:

  • -XX:+ UseConcMarkSweepGC
  • -XX:+ UseParallelGC
  • -XX:+ UseSerialGC
  • -XX:+ UseG1GC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM