我有以下代码:
public class Test2 {
public static void main(String[] args) {
long ta, after, before;
Runtime rt;
rt=Runtime.getRuntime();
rt.gc();
NodoPrueba q=new NodoPrueba(1);
before=rt.freeMemory();
q=null;
rt.gc();
after=rt.freeMemory();
ta=after-before;
System.out.println("Before: "+before+"\nAfter: "+after);
System.out.println("\nDifference: "+ta);
}
}
嗯,班级NodoPrueba
只有int
属性。但我有以下输出:
之前:127991976
之后:128673800
差异:681824
如果理论上说NodoPrueba
类只在内存中占用 16个字节:来自对象的8个字节,4个字节用于int,4个字节用于填充(对象的大小)总是8)的倍数,差异来自哪里?
答案 0 :(得分:0)
从我的理解java还在堆内存中存储正在使用的类以及其他线程,而不仅仅是你编码的内容,如果你想看一下堆中真正发生的事情,我建议你尝试使用visualvm,是一个java实用程序,它允许您在准确运行https://visualvm.github.io时探索任何Java应用程序的内容