Mercurial > hg > shenandoah-visualizer
view src/main/java/org/openjdk/shenandoah/DataProvider.java @ 8:8dc27cf89d58
Snapshot rendering.
author | shade |
---|---|
date | Wed, 14 Dec 2016 22:05:39 +0100 |
parents | 98d295144a63 |
children | 9f6523b535b6 |
line wrap: on
line source
package org.openjdk.shenandoah; import sun.jvmstat.monitor.*; import java.util.ArrayList; import java.util.List; public class DataProvider { private final int maxRegions; private final long maxSize; private final LongMonitor[] data; private final LongMonitor status; public DataProvider(String id) throws Exception { MonitoredHost host = MonitoredHost.getMonitoredHost(id); MonitoredVm vm = host.getMonitoredVm(new VmIdentifier(id)); LongMonitor max_regions_mon = (LongMonitor) vm.findByName("sun.gc.shenandoah.regions.max_regions"); maxRegions = (int) max_regions_mon.longValue(); LongMonitor max_size_mon = (LongMonitor) vm.findByName("sun.gc.shenandoah.regions.region_size"); maxSize = max_size_mon.longValue(); status = (LongMonitor) vm.findByName("sun.gc.shenandoah.regions.status"); data = new LongMonitor[maxRegions]; for (int i = 0; i < maxRegions; i++) { LongMonitor mon = (LongMonitor) vm.findByName("sun.gc.shenandoah.regions.region." + i + ".data"); if (mon != null) { data[i] = mon; } else { throw new IllegalStateException("Insufficient shared memory for all region counters. " + "Try -XX:PerfDataMemorySize=512K or higher when running the monitored program."); } } } public Snapshot snapshot() { List<RegionStat> stats = new ArrayList<>(); for (LongMonitor m : data) { stats.add(new RegionStat(maxSize, m.longValue())); } boolean isMarking = (status.longValue() & 0x1) > 0; boolean isEvacuating = (status.longValue() & 0x2) > 0; return new Snapshot(System.currentTimeMillis(), stats, isMarking, isEvacuating); } }