Mercurial > hg > shenandoah-visualizer
view src/main/java/org/openjdk/shenandoah/Snapshot.java @ 45:3243c61e4bf8
Render Traversal-in-progress status
author | shade |
---|---|
date | Wed, 15 Aug 2018 18:18:12 +0200 |
parents | eeea1dcf966a |
children |
line wrap: on
line source
package org.openjdk.shenandoah; import java.util.List; public class Snapshot { private final long time; private final long regionSize; private final List<RegionStat> stats; private final Phase phase; public Snapshot(long time, long regionSize, List<RegionStat> stats, int status) { this.time = time; this.regionSize = regionSize; this.stats = stats; switch (status) { case 0x0: this.phase = Phase.IDLE; break; case 0x1: this.phase = Phase.MARKING; break; case 0x2: this.phase = Phase.EVACUATING; break; case 0x4: this.phase = Phase.UPDATE_REFS; break; case 0x8: this.phase = Phase.TRAVERSAL; break; default: this.phase = Phase.UNKNOWN; break; } } public Phase phase() { return phase; } public RegionStat get(int i) { return stats.get(i); } public long time() { return time; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Snapshot snapshot = (Snapshot) o; if (time != snapshot.time) return false; if (!stats.equals(snapshot.stats)) return false; return phase == snapshot.phase; } @Override public int hashCode() { int result = (int) (time ^ (time >>> 32)); result = 31 * result + stats.hashCode(); result = 31 * result + phase.hashCode(); return result; } public int regionCount() { return stats.size(); } public long total() { return regionSize * regionCount(); } public long used() { long used = 0L; for (RegionStat rs : stats) { used += regionSize * rs.used(); } return used; } public long committed() { long r = 0L; for (RegionStat rs : stats) { r += (rs.state() == RegionState.EMPTY_UNCOMMITTED) ? 0 : regionSize * rs.used(); } return r; } public long trash() { long r = 0L; for (RegionStat rs : stats) { r += (rs.state() == RegionState.TRASH) ? rs.used() : 0; } return r; } public long collectionSet() { long used = 0L; for (RegionStat rs : stats) { if (rs.state() == RegionState.CSET || rs.state() == RegionState.PINNED_CSET) { used += regionSize * rs.live(); } } return used; } public long humongous() { long used = 0L; for (RegionStat rs : stats) { if (rs.state() == RegionState.HUMONGOUS || rs.state() == RegionState.PINNED_HUMONGOUS) { used += regionSize * rs.used(); } } return used; } public long live() { long live = 0L; for (RegionStat rs : stats) { live += regionSize * rs.live(); } return live; } }