什么情况下会出现java的内存泄漏?

zxlion 2008-11-29 11:14:31
最好举个简单的例子
...全文
584 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
juaner 2011-09-11
  • 打赏
  • 举报
回复
都是牛人啊,学习了
wangyaosuper 2008-11-29
  • 打赏
  • 举报
回复
譬如

JMyClass myclassArr[1000000] = null;

String s = 键盘输入一个数字
count = s.StringToInt();///count保存JMyClass对象的总数,

for (i = 0 ; i < 100000; i ++ )
{
myclassArr[i] = new JMyClass ();
}


...

后来一个不小心count = 100; ////被误写了,

好了,你100以后的JMyClass再也不用到了,但是他们也不会被回收。

就是内存泄露了嘛。
bzwm 2008-11-29
  • 打赏
  • 举报
回复
在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,
首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;
其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。

前段时间碰到过一个这样的情况。

每次进入系统后产生线程与服务器定时通信,

另外一个线程检测网络是否连通,
如果断开了,则将与服务器通信线程里的数据清除,
但并未停止这个线程,
而后如果检测到网络连通了,
那么会再次产生新线程通信。

这样就造成了内存泄漏,因为如果如此反复,
那么与服务器通信(无数据的)的线程将很多。
但都是无用的。
kao331431214 2008-11-29
  • 打赏
  • 举报
回复
学习了
「已注销」 2008-11-29
  • 打赏
  • 举报
回复
数组越界算是一个吗?
myjava_024 2008-11-29
  • 打赏
  • 举报
回复
我也来说一个吧,循环申请Object对象,并将所申请的对象放入一个Vector中,如果我们仅仅释放引用本身,那么Vector仍然引用该对象,所以这个对象对GC来说是不可回收的。因此,如果对象加入到Vector后,还必须从Vector中删除,最简单的方法就是将Vector对象设置为null。
Vector v=new Vector(10);
for (int i=1;i<100; i++)
{
Object o=new Object();
v.add(o);
o=null;
}
此时,所有的Object对象都没有被释放,因为变量v引用这些对象。
myjava_024 2008-11-29
  • 打赏
  • 举报
回复
学习了……
wfp5525 2008-11-29
  • 打赏
  • 举报
回复
都是高手学习了
xiaozhimin1978 2008-11-29
  • 打赏
  • 举报
回复

public class MyClass{
public static java.util.ArrayList list = new java.util.ArrayList();
// ......
}

// ......


如果无原则地把对象往这个 list 里塞,而不把这个 list 中无用的对象清除出去,则可能会产生内存泄露




while(true){
Socket socket = new Socket(......);
}

无限制地打开 Socket,却又不关闭它,可能会造成资源浪费(不仅仅是内存资源)

62,614

社区成员

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

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