说说Java内存泄露

        在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,
        首先,这些对象是可达的,即在有向图中,存在通路可以与其相连; 
        其次,这些对象是无用的,即程序以后不会再使用这些对象。

如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。
       前段时间碰到过一个这样的情况。每次进入系统后产生线程与服务器定时通信,另外一个线程检测网络是否连通, 如果断开了,则将与服务器通信线程里的数据清除,但并未停止这个线程,而后如果检测到网络连通了,那么会再次产生新线程信。
       这样就造成了内存泄漏,因为如果如此反复,那么与服务器通信(无数据的)的线程将很多。但都是无用的。

       举几个例子说说,
       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再也不用到了,但是他们也不会被回收。

       再说一个吧,循环申请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引用这些对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值