如何使用Runtime.freeMemory()和GC跟踪JVM上的任何对象实例化



我在1.6.0_27-b07(Sun的JRE)中使用默认GC,因此我无法通过Runtime.getRuntime().freeMemory()检测到内存的增加。有人能说明如何实现这一点吗?我必须使用不同的GC吗?哪一个?

下面的简单程序为分配的内存打印0。:(:)

import java.util.HashSet;
import java.util.Set;
public class MemoryUtils {
    private static Set<String> set = new HashSet<String>();
    public static void main(String[] args) {
        long mem = Runtime.getRuntime().freeMemory();
        // now create a bunch of objects and save them in the set
        for (int i = 0; i < 100; i++) {
            set.add("foo" + i);
        }
        long allocated = mem - Runtime.getRuntime().freeMemory();
        System.out.println("Memory allocated: " + allocated); // ===> GIVES 0 !!!!
    }
}

这些对象将被分配到为短期对象保留的空间中,并且只有在它们存活一段时间后才会移动到主堆。

如果您想确切地了解应用程序创建的所有对象发生了什么,那么您确实需要使用探查器。

以下是更多信息:Java内存解释(SUN JVM)

最新更新