1 19 20 package edu.umd.cs.findbugs; 21 22 import java.util.List ; 23 import java.io.IOException ; 24 import java.lang.management.ManagementFactory ; 25 import java.lang.management.MemoryPoolMXBean ; 26 import java.lang.management.GarbageCollectorMXBean ; 27 28 37 public class Footprint { 38 39 private long cpuTime = -1; private long clockTime = -1; private long peakMem = -1; private long collectionTime = -1; 44 public Footprint() { 45 pullData(); 46 } 47 48 49 public Footprint(Footprint base) { 50 pullData(); 51 if (cpuTime >= 0) { 52 cpuTime = (base.cpuTime >= 0) ? cpuTime-base.cpuTime : base.cpuTime; 53 } 54 if (clockTime >= 0) { 55 clockTime = (base.clockTime >= 0) ? clockTime-base.clockTime : base.clockTime; 56 } 57 if (collectionTime >= 0) { 59 collectionTime = (base.collectionTime >= 0) ? collectionTime-base.collectionTime : base.collectionTime; 60 } 61 } 62 63 private void pullData() { 64 65 try { 66 cpuTime = new OperatingSystemBeanWrapper().getProcessCpuTime(); 67 } catch (NoClassDefFoundError ncdfe) { cpuTime = -9; } 68 catch (ClassCastException cce) { cpuTime = -8; } 69 catch (Error error) { cpuTime = -7; } 71 clockTime = System.currentTimeMillis(); 73 try { 74 peakMem = new MemoryBeanWrapper().getPeakUsage(); 75 } catch (NoClassDefFoundError ncdfe) { peakMem = -9; } 76 77 try { 78 collectionTime = new CollectionBeanWrapper().getCollectionTime(); 79 } catch (NoClassDefFoundError ncdfe) { collectionTime = -9; } 80 } 81 82 public long getCpuTime() { 83 return cpuTime; 84 } 85 public long getClockTime() { 86 return clockTime; 87 } 88 public long getPeakMemory() { 89 return peakMem; 90 } 91 public long getCollectionTime() { 92 return collectionTime; 93 } 94 95 @Override 96 public String toString() { 97 return "cpuTime="+cpuTime+", clockTime="+clockTime+", peakMemory="+peakMem; 98 } 99 100 public static void main(String [] argv) { 101 System.out.println(new Footprint()); 102 } 103 104 106 108 public static class MemoryBeanWrapper { 109 List <MemoryPoolMXBean > mlist = ManagementFactory.getMemoryPoolMXBeans(); 110 113 public long getPeakUsage() { 114 long sum = 0; 115 for (MemoryPoolMXBean mpBean : mlist) { 118 java.lang.management.MemoryUsage memUsage = mpBean.getPeakUsage(); 119 if (memUsage != null) sum += memUsage.getUsed(); } 123 return sum; 125 } 126 } 127 128 132 public static class OperatingSystemBeanWrapper { 133 java.lang.management. OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); 134 com.sun.management.OperatingSystemMXBean sunBean = (com.sun.management.OperatingSystemMXBean)osBean; 138 139 public long getProcessCpuTime() { 140 return sunBean.getProcessCpuTime(); 141 } 142 } 143 144 146 public static class CollectionBeanWrapper { 147 List <GarbageCollectorMXBean > clist = ManagementFactory.getGarbageCollectorMXBeans(); 148 149 public long getCollectionTime() { 150 long sum = 0; 151 for (GarbageCollectorMXBean gcBean : clist) { 152 sum += gcBean.getCollectionTime(); 153 } 154 return sum; 155 } 156 } 157 158 } 159 | Popular Tags |