我有两个函数,一个是insert(),另一个是startGC()。为什么Java System.gc()不能按预期工作?
我会先调用insert()方法,这将花费大约300MB的堆空间。 之后,我将调用startGC(),它应该释放堆中分配的内存,因为所有的矢量对象都是该函数的本地对象,但它不会发生。
private void insert()
{
Vector v=new Vector();
Vector v1=new Vector();
Vector v2=new Vector();
String str="Hello";
for (long i = 0L; i < 999999L; i++) {
v.add(str + i);
v1.add(str + i);
v2.add(str + i);
}
v=null;
v1=null;
v2=null;
}
private void startGC()
{
System.gc();
}
我的问题:
1)为什么垃圾收集不是在这个例子中工作。
2)如何让JVM垃圾收集所有未使用的内存块。
任何代码示例实现相同。
你怎么知道它不工作? – Mob 2012-07-25 14:19:07
您使用的是什么jvm? – poussma 2012-07-25 14:33:35