package org.xbib.elasticsearch.common.jvm; import com.google.common.collect.Iterators; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Streamable; import org.elasticsearch.common.unit.ByteSizeValue; import java.io.IOException; import java.util.Iterator; public class Mem implements Streamable, Iterable<MemoryPool> { long heapInit; long heapCommitted; long heapUsed; long heapMax; long nonHeapInit; long nonHeapCommitted; long nonHeapUsed; long nonHeapMax; long directMemoryMax; MemoryPool[] pools = new MemoryPool[0]; Mem() { } public static Mem readMem(StreamInput in) throws IOException { Mem mem = new Mem(); mem.readFrom(in); return mem; } @Override public Iterator<MemoryPool> iterator() { return Iterators.forArray(pools); } @Override public void readFrom(StreamInput in) throws IOException { heapInit = in.readVLong(); heapCommitted = in.readVLong(); heapUsed = in.readVLong(); heapMax = in.readVLong(); nonHeapInit = in.readVLong(); nonHeapCommitted = in.readVLong(); nonHeapUsed = in.readVLong(); nonHeapMax = in.readVLong(); directMemoryMax = in.readVLong(); pools = new MemoryPool[in.readVInt()]; for (int i = 0; i < pools.length; i++) { pools[i] = MemoryPool.readMemoryPool(in); } } @Override public void writeTo(StreamOutput out) throws IOException { out.writeVLong(heapInit); out.writeVLong(heapCommitted); out.writeVLong(heapUsed); out.writeVLong(heapMax); out.writeVLong(nonHeapInit); out.writeVLong(nonHeapCommitted); out.writeVLong(nonHeapUsed); out.writeVLong(nonHeapMax); out.writeVLong(directMemoryMax); out.writeVInt(pools.length); for (MemoryPool pool : pools) { pool.writeTo(out); } } public ByteSizeValue getHeapInit() { return new ByteSizeValue(heapInit); } public ByteSizeValue getHeapCommitted() { return new ByteSizeValue(heapCommitted); } public ByteSizeValue getHeapUsed() { return new ByteSizeValue(heapUsed); } public ByteSizeValue getHeapMax() { return new ByteSizeValue(heapMax); } public ByteSizeValue getNonHeapInit() { return new ByteSizeValue(nonHeapInit); } public ByteSizeValue getNonHeapCommitted() { return new ByteSizeValue(nonHeapCommitted); } public ByteSizeValue getNonHeapUsed() { return new ByteSizeValue(nonHeapUsed); } public ByteSizeValue getNonHeapMax() { return new ByteSizeValue(nonHeapMax); } public ByteSizeValue getDirectMemoryMax() { return new ByteSizeValue(directMemoryMax); } public short getHeapUsedPercent() { if (heapMax == 0) { return -1; } return (short) (heapUsed * 100 / heapMax); } }