java内存泄露问题

yanebupt 2011-01-12 10:44:15
看到很多资料讲到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();
}
}

问题二:问下大家存不存在内存泄漏,为什么?
...全文
159 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
py330316117 2011-01-13
  • 打赏
  • 举报
回复
我们要做的不是解决它,是避免它,在你写程序的时候根本不写涉及到内存泄露的代码。
YOULOVEXIA 2011-01-13
  • 打赏
  • 举报
回复
回答问题二:
当然会有内存泄露的情况,当程序所需内在超过jvm的最大内存时,就会报内存泄露的错误,比如:
tomcat启动时、程序死循环时等都有可能出现此现象。
chosen0ne 2011-01-12
  • 打赏
  • 举报
回复
实质上,这个就是《Effective Java》中说的:消除过期的对象引用的问题
1.解决方法是在对象使用完毕后立即消除所有对它的引用
2.如1楼说的,不存在因为getVector()方法中对Vector的引用是局部的,方法返回后即被释放,不再引用该Vector

楼主可以看下那本书
yaoweijq 2011-01-12
  • 打赏
  • 举报
回复
1.解决方法是在把o置为null之前从vector中移除o
2.没有漏洞,只是控制台执行
完了全给回收了
1中的泄漏的一个可能性前提是:
vector是一个全局的,从系统开始运行就一直存在的static vector
qingyuan18 2011-01-12
  • 打赏
  • 举报
回复
内存泄漏最容易出现的地方是IO流,InputStream和outputStream,如果没有close,每次打开或者写文件都会打开流实例,总有一天会把内存吃光

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧