看到很多资料讲到java内存泄露经常举到的例子:
Vector v=new Vector(10);for (int I=1;I<100; I++){Object o=new Object();v.add(o);o=null;}在这个例子中,我们循环申请Object对象,并将所申请的对象放入一个Vector中,如果我们仅仅释放引用本身,那么Vector仍然引用该对象,所以这个对象对GC来说是不可回收的。(问题一:这个例子只说明了问题 没有说明解决方法)
假如我的类如下:
public class Test {
public Vector getVector(){
Vector v=new Vector(10); for (int I=1;I<100; I++) { Object o=new Object(); v.add(o); o=null; }
return v;
} public static void main(String[] args) {
// TODO Auto-generated method stub
Vector v=new Test().getVector();
}
}问题二:问下大家存不存在内存泄漏,为什么?
Vector v=new Vector(10);for (int I=1;I<100; I++){Object o=new Object();v.add(o);o=null;}在这个例子中,我们循环申请Object对象,并将所申请的对象放入一个Vector中,如果我们仅仅释放引用本身,那么Vector仍然引用该对象,所以这个对象对GC来说是不可回收的。(问题一:这个例子只说明了问题 没有说明解决方法)
假如我的类如下:
public class Test {
public Vector getVector(){
Vector v=new Vector(10); for (int I=1;I<100; I++) { Object o=new Object(); v.add(o); o=null; }
return v;
} public static void main(String[] args) {
// TODO Auto-generated method stub
Vector v=new Test().getVector();
}
}问题二:问下大家存不存在内存泄漏,为什么?
2.没有漏洞,只是控制台执行
完了全给回收了
1中的泄漏的一个可能性前提是:
vector是一个全局的,从系统开始运行就一直存在的static vector
1.解决方法是在对象使用完毕后立即消除所有对它的引用
2.如1楼说的,不存在因为getVector()方法中对Vector的引用是局部的,方法返回后即被释放,不再引用该Vector楼主可以看下那本书
当然会有内存泄露的情况,当程序所需内在超过jvm的最大内存时,就会报内存泄露的错误,比如:
tomcat启动时、程序死循环时等都有可能出现此现象。