https://www.liaohuqiu.net/cn/posts/caculate-object-size-in-java/
package in.srain.cube.objectsize;
import java.lang.instrument.Instrumentation;
public class ObjectSizeFetcher {
private static Instrumentation instrumentation;
public static void premain(String args, Instrumentation inst) {
instrumentation = inst;
}
public static long getObjectSize(Object o) {
return instrumentation.getObjectSize(o);
}
}
package in.srain.cube.objectsize;
import java.io.IOException;
public class TestSize {
public static void main(String[] args) throws IOException {
TestObject1 testObject1 = new TestObject1();
TestObject2 testObject2 = new TestObject2();
System.out.printf("size of object with int: %s\n", ObjectSizeFetcher.getObjectSize(testObject1));
System.out.printf("size of object with 2 int: %s\n", ObjectSizeFetcher.getObjectSize(testObject2));
System.out.printf("size of HashMapEntry: %s\n", ObjectSizeFetcher.getObjectSize(new HashMapEntry<String, String>("", "", 0, null)));
System.out.printf("size of SimpleHashMapEntry: %s\n", ObjectSizeFetcher.getObjectSize(new SimpleHashSetEntry<String>(0, null)));
System.out.println("wait");
System.in.read();
}
static class HashMapEntry<K, V> {
final K key;
final int hash;
V value;
HashMapEntry<K, V> next;
HashMapEntry(K key, V value, int hash, HashMapEntry<K, V> next) {
this.key = key;
this.value = value;
this.hash = hash;
this.next = next;
}
}
static class SimpleHashSetEntry<T> {
private int mHash;
private T mKey;
private SimpleHashSetEntry<T> mNext;
private SimpleHashSetEntry(int hash, T key) {
mHash = hash;
mKey = key;
}
}
private static class TestObject1 {
private int mInt1;
}
private static class TestObject2 {
private int mInt1;
private int mInt2;
}
}