java - 虚拟机上的内存

时间:2017-03-22 04:30:21

标签: java memory jvm

我有以下代码:

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)的倍数,差异来自哪里?

1 个答案:

答案 0 :(得分:0)

从我的理解java还在堆内存中存储正在使用的类以及其他线程,而不仅仅是你编码的内容,如果你想看一下堆中真正发生的事情,我建议你尝试使用visualvm,是一个java实用程序,它允许您在准确运行https://visualvm.github.io时探索任何Java应用程序的内容