Java 内存泄露问题
一个外企面试题,题目大致意思是:
void fun() {
String s = new String("abc");
String[] a = new String[1];
a[0] = s;
s = null;
}
问"abc"这块内存啥时候释放?
答案是内存泄露了。
难道是因为s在栈内存,而a在堆内存的缘故吗?
[解决办法]
public class MeL {
public static void main(String[] args){
Test m=new Test();
Test[] a=new Test[1];
a[0]=m;
m=null;
System.gc();
}
}
class Test{
public static long counter=0;
@Override
protected void finalize() throws Throwable {
System.out.println("被回收"+(++counter)+"次");
}
}
测试结果:没有被回收, 说明没有“泄露”
[解决办法]
Vector v=new Vector(10);for (int i=1;i<100; i++){Object o=new Object();v.add(o);o=null;}//此时,所有的Object对象都没有被释放,因为变量v引用这些对象。