package jef.jre5support;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.ThreadMXBean;
import java.util.ArrayList;
import java.util.List;
public class JvmStatistics implements JvmStatisticsMBean{
private MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
private ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
private List<GarbageCollectorMXBean> gcList=ManagementFactory.getGarbageCollectorMXBeans();
private List<String> youngGcNameList = new ArrayList<String>();
private List<String> fullGcNameList = new ArrayList<String>();
public JvmStatistics(){
// Oracle (Sun) HotSpot
youngGcNameList.add("Copy");
youngGcNameList.add("ParNew");
youngGcNameList.add("PS Scavenge");
fullGcNameList.add("MarkSweepCompact");
fullGcNameList.add("PS MarkSweep");
fullGcNameList.add("ConcurrentMarkSweep");
// JRocket
youngGcNameList.add("Garbage collection optimized for short pausetimes Young Collector");
youngGcNameList.add("Garbage collection optimized for throughput Young Collector");
youngGcNameList.add("Garbage collection optimized for deterministic pausetimes Young Collector");
fullGcNameList.add("Garbage collection optimized for short pausetimes Old Collector");
fullGcNameList.add("Garbage collection optimized for throughput Old Collector");
fullGcNameList.add("Garbage collection optimized for deterministic pausetimes Old Collector");
}
public long getHeapMemoryUse() {
return memoryMXBean.getHeapMemoryUsage().getUsed();
}
public long getHeapMemoryMax() {
return memoryMXBean.getHeapMemoryUsage().getMax();
}
public long getDaemonThreadCount() {
return threadMXBean.getDaemonThreadCount();
}
public long getPeakThreadCount() {
return threadMXBean.getPeakThreadCount();
}
public long getYoungGcCount() {
int gcSize=gcList.size();
long result=0;
for (int i=0;i<gcSize;i++){
GarbageCollectorMXBean gcMBean=gcList.get(i);
String name=gcMBean.getName();
if (youngGcNameList.contains(name)){
long tmp=gcMBean.getCollectionCount();
result= tmp>0 ? result+tmp : result;
}
}
return result;
}
public long getYoungGcTotalTime() {
int gcSize=gcList.size();
long result=0;
for (int i=0;i<gcSize;i++){
GarbageCollectorMXBean gcMBean=gcList.get(i);
String name=gcMBean.getName();
if (youngGcNameList.contains(name)){
long tmp=gcMBean.getCollectionTime();
result= tmp>0 ? result+tmp : result;
}
}
return result;
}
public long getFullGcCount() {
int gcSize=gcList.size();
long result=0;
for (int i=0;i<gcSize;i++){
GarbageCollectorMXBean gcMBean=gcList.get(i);
String name=gcMBean.getName();
if (fullGcNameList.contains(name)){
long tmp=gcMBean.getCollectionCount();
result= tmp>0 ? result+tmp : result;
}
}
return result;
}
public long getFullGcTotalTime() {
int gcSize=gcList.size();
long result=0;
for (int i=0;i<gcSize;i++){
GarbageCollectorMXBean gcMBean=gcList.get(i);
String name=gcMBean.getName();
if (fullGcNameList.contains(name)){
long tmp=gcMBean.getCollectionTime();
result= tmp>0 ? result+tmp : result;
}
}
return result;
}
public long getCurrentThreadCount() {
return threadMXBean.getThreadCount();
}
}