Java内存泄漏引起的原因:

  内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。

  长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是因为长生命周期持有它的引用而导致不能被回收,这就是Java中内存泄漏的发生场景。

造成内存泄漏的几种情况:

1、静态集合类引起内存泄漏

  像HashMap、Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,他们所引用的所有的对象Object也不能被释放,因为他们也将一直被Vector等引用着。

2、当集合里面的对象属性被修改后,再调用remove()方法时不起作用。

3、监听器

  在释放对象的时候却没有去删除这些监听器,增加了内存泄漏的机会。

4、各种连接

  比如数据库连接(dataSourse.getConnection()),网络连接(socket)和io连接,除非其显式的调用了其close()方法将其连接关闭,否则是不会自动被GC 回收的。

5、内部类和外部模块的引用

  内部类的引用是比较容易遗忘的一种,而且一旦没释放可能导致一系列的后继类对象没有释放。此外程序员还要小心外部模块不经意的引用,例如程序员A 负责A 模块,调用了B 模块的一个方法如: public void registerMsg(Object b); 这种调用就要非常小心了,传入了一个对象,很可能模块B就保持了对该对象的引用,这时候就需要注意模块B 是否提供相应的操作去除引用。

6、单例模式

  不正确使用单例模式是引起内存泄漏的一个常见问题,单例对象在初始化后将在JVM的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部的引用,那么这个对象将不能被JVM正常回收,导致内存泄漏。

最新文章

  1. BZOJ 4582: [Usaco2016 Open]Diamond Collector
  2. [每日电路图] 8、三轴加速度计LIS3DH电路图及功耗等指标
  3. Count Primes ----质数判断
  4. 存储过程中执行动态Sql语句
  5. 如何重置CentOS/RHEL 7中遗忘的根用户帐户密码
  6. C#实现Comparable接口实现排序
  7. HDU4539+状态压缩DP
  8. 七牛云覆盖上传 php
  9. highlight a DOM element on mouse over, like inspect does
  10. JavaScript中你可能不知道的九件事
  11. Mobile Services 提交批量数据
  12. dpkg: error processing mysql-server (--configure): dependency problems - leaving unconfigured
  13. .xlsx文件总是默认用2007 Microsoft Office component 打开,且无法更改用EXCEL打开的解决方法
  14. Life in Changsha 第一次scrum冲刺
  15. C# winform使用combobox遍历文件夹内所有文件
  16. 破解StarUML3.01最新版 for Linux(Ubuntu16LTS)
  17. 利用Python制作简单的小程序:IP查看器
  18. POJ 2385 Apple Catching【DP】
  19. SpringMVC解析Json字符串
  20. JSP:注册&登录

热门文章

  1. SQL Server--------SQL Server问题错误解决
  2. django 分页出现 UnorderedObjectListWarning 错误
  3. 外网访问SQLServer数据库holer实现
  4. 剑指Offer 46. 孩子们的游戏(圆圈中最后剩下的数) (其他)
  5. 求数组的相邻子数组的最大值(txt文件存储)
  6. day45 jQuery
  7. shell(2)图片重命名
  8. Sublime远程连接Linux
  9. mySQL 判断表是否存
  10. 如何在Windows命令行(DOS界面)中调用 编译器 来编译C/C++源程序