package org.gridkit.jvmtool.gcmon; import org.gridkit.jvmtool.event.SimpleCounterCollection; import org.gridkit.jvmtool.event.SimpleTagCollection; public class MemoryInfoEventPojo implements MemoryPoolInfoEvent { private long timestamp; private SimpleTagCollection tags = new SimpleTagCollection(); private SimpleCounterCollection counters = new SimpleCounterCollection(); @Override public long timestamp() { return timestamp; } public void timestamp(long timestamp) { this.timestamp = timestamp; } @Override public SimpleCounterCollection counters() { return counters; } @Override public SimpleTagCollection tags() { return tags; } @Override public String name() { return tags.firstTagFor(MEM_POOL_NAME); } public void name(String value) { tags.put(MEM_POOL_NAME, value); } @Override public boolean nonHeap() { return tags.firstTagFor(MEM_POOL_NON_HEAP) != null; } public void nonHeap(boolean nonHeap) { if (nonHeap) { tags.put(MEM_POOL_NON_HEAP, ""); } } @Override public Iterable<String> memoryManagers() { return tags.tagsFor(MEM_POOL_MEMORY_MANAGER); } @Override public MemoryUsageBean peakUsage() { return readMemUsage(MEM_POOL_MEMORY_PEAK); } public void peakUsage(MemoryUsageBean usage) { storeMemUsage(MEM_POOL_MEMORY_PEAK, usage); } @Override public MemoryUsageBean currentUsage() { return readMemUsage(MEM_POOL_MEMORY_USAGE); } public void currentUsage(MemoryUsageBean usage) { storeMemUsage(MEM_POOL_MEMORY_USAGE, usage); } @Override public MemoryUsageBean collectionUsage() { return readMemUsage(MEM_POOL_COLLECTION_USAGE); } public void collectionUsage(MemoryUsageBean usage) { storeMemUsage(MEM_POOL_COLLECTION_USAGE, usage); } private MemoryUsageBean readMemUsage(String name) { if (counters.getValue(name + "." + MEM_USAGE_INIT) >= 0) { return new MemoryUsageBean( counters.getValue(name + "." + MEM_USAGE_INIT), counters.getValue(name + "." + MEM_USAGE_USED), counters.getValue(name + "." + MEM_USAGE_COMMITTED), counters.getValue(name + "." + MEM_USAGE_MAX)); } else { return null; } } private void storeMemUsage(String name, MemoryUsageBean bean) { counters.set(name + "." + MEM_USAGE_INIT, bean.init()); counters.set(name + "." + MEM_USAGE_USED, bean.used()); counters.set(name + "." + MEM_USAGE_COMMITTED, bean.committed()); counters.set(name + "." + MEM_USAGE_MAX, bean.max()); } }