美文网首页
jvm内存泄漏原因及处理

jvm内存泄漏原因及处理

作者: 泽林呗 | 来源:发表于2019-03-15 16:51 被阅读0次

关于这题也答得很烂,虽然之前已经看过了,但是可能是死记硬背的原因,答得太模糊了。
Java中的内存泄露,广义并通俗的说,就是:不再会被使用的对象的内存不能被回收,就是内存泄露。

如果长生命周期的对象持有短生命周期的引用,就很可能会出现内存泄露。

public class Simple   {
       Object object;
       void method () {
              object = new Object();
        }
}

就像上面的代码,严格意义上就是一种内存泄漏,因为object不再被使用了,但它不会被立即回收,而是得等到Simple对象被释放的时候。
可以这样写

public class Simple   {
       Object object;
       void method () {
              Object object = new Object();
              //使用Object
              object = null;
        }
}

把Object定义为局部变量,并在最后赋值为null

因此,解决内存泄漏的一个方法,就是尽量降低变量的作用域,以及及时把对象复制为可清理对象(null)

如ArrayList的pop()方法

public E pop(){
    if(size == 0)
        return null;
    else{
          E e = (E) elementData[--size];
          elementData[size] = null;
          return e;
  }
}

容器使用时的内存泄漏

      Vector vector = new Vector();
      for (int i = 1; i<100; i++)
    {
          Object object = new Object();
          vector.add(object);
          object = null;
      }
      //...对vector的操作
      //...与vector无关的其他操作
}

这里其实只是会造成短暂的内存泄漏,在method方法结束后还是会把回收的,更好的写法是:

      Vector vector = new Vector();
      for (int i = 1; i<100; i++)
    {
          Object object = new Object();
          vector.add(object);
          object = null;
      }
      //...对vector的操作
      vector = null;
      //...与vector无关的其他操作
}

close()方法导致的内存泄漏

在各种IO或者数据库连接时,都需要在最后通过close()方法释放对象,这里也是长对象引用短对象是造成的内存泄漏

SessionFactory factory = new SessionFactory();
try {Session session = factory.connect();
} finally{
      session.close();
}

这里必须用close关闭连接,因为SessionFactory是长对象,session是短对象。

参考文章:https://blog.csdn.net/anxpp/article/details/51325838

相关文章

  • jvm内存泄漏原因及处理

    关于这题也答得很烂,虽然之前已经看过了,但是可能是死记硬背的原因,答得太模糊了。Java中的内存泄露,广义并通俗的...

  • 谈谈 LeakCanary 原理 --标准答案

    内存泄漏传统意义上的内存泄漏是至忘记手动释放内存,导致未释放的内存不可使用的现象。 jvm 的内存泄漏jvm的内存...

  • Android 优化二 Java内存分配机制及内存泄漏

    本篇文章已授权微信公众号郭霖独家发布 Java内存分配机制及内存泄漏目录介绍1.JVM内存管理1.1 JVM内存管...

  • Android性能优化-内存泄漏的8个Case

    1. 什么是内存泄漏? JVM内存管理 关于内存泄漏我们要知道,JVM内存分配的几种策略。 静态的 静态的存储区,...

  • Android内存泄漏原因及解决的总结

    分三步说明Android内存泄漏的原因及解决,“内存泄漏与内存溢出的区别”,“引用方式”,“常见引发原因与解决方案...

  • JVM

    简介 Jvm 系列一:Java类的加载机制Jvm系列二:JVM内存结构 --内存泄漏与内存溢出Jvm系列三:GC算...

  • 01__JVM(4)内容图

    JVM 常见 问题处理方式 保存堆栈快照日志 分析内存泄漏 调整内存设置 控制垃圾回收频率 选择合适的垃圾回收器 ...

  • JVM

    1. 内存溢出和内存泄漏 内存溢出是说程序需要申请的内存超过了JVM当前可以分配的最大内存,溢出。内存泄漏是说期望...

  • Android 内存泄漏

    内存泄漏的原因 常见的内存泄漏与解决方法 检测内存泄漏 认识内存泄漏 根本原因就是当一个对象理应被回收的时候,因为...

  • 内存泄漏

    什么是内存泄漏引起内存泄漏的原因野指针,空指针,僵尸对象 1.什么是内存泄漏 内存泄漏(Memory Leak)是...

网友评论

      本文标题:jvm内存泄漏原因及处理

      本文链接:https://www.haomeiwen.com/subject/evlrmqtx.html