import static java.lang.System.out;
import java.io.PrintWriter;
import org.javersion.util.PersistentTreeSet;
import org.openjdk.jol.info.GraphLayout;
import org.openjdk.jol.util.VMSupport;
public class MemoryFootprint {
public static void main(String[] args) {
out.println(VMSupport.vmDetails());
PersistentTreeSet<Integer> jmap = PersistentTreeSet.empty();
clojure.lang.PersistentTreeSet cmap = clojure.lang.PersistentTreeSet.EMPTY;
footprint(PerfTest.randomData(50000), jmap, cmap);
}
private static void footprint(Integer[] data,
PersistentTreeSet<Integer> jmap,
clojure.lang.IPersistentCollection cmap) {
int i=0;
for (Integer kv : data) {
jmap = jmap.conj(kv);
cmap = cmap.cons(kv);
i++;
if (i % 1000 == 0) {
out.print(i);
out.print('\t');
out.print(GraphLayout.parseInstance(jmap).totalSize());
out.print('\t');
out.print(GraphLayout.parseInstance(cmap).totalSize());
out.println();
}
}
for (Integer kv : data) {
if (cmap.count() != jmap.size()) {
throw new AssertionError("Expected " + cmap.count() + " GOT " + jmap.size());
}
}
PrintWriter pw = new PrintWriter(out);
pw.println("Javersion");
pw.println(GraphLayout.parseInstance(jmap).toFootprint());
pw.println("Clojure");
pw.println(GraphLayout.parseInstance(cmap).toFootprint());
pw.close();
}
}