我在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)