Java内存泄漏

1、内存泄漏定义

sun官方解释:Another common problem with explicit memory management is space leaks. These leaks occur when memory is allocated and no longer referenced but is not released. For example, if you intend to free the space utilized by a linked list but you make the mistake of just deallocating the first element of the list, the remaining list elements are no longer referenced but they go out of the program’s reach and can neither be used nor recovered. If enough leaks occur, they can keep consuming memory until all available memory is exhausted.

简单的说就是对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着。

2、内存泄露描述

A对象引用B对象,A对象的生命周期比B对象的生命周期长的多。当B对象没有被应用程序使用之后,A对象仍然在引用着B对象。这样,垃圾回收器就没办法将B对象从内存中移除,从而导致内存无法正常释放问题,因为如果A引用更多这样的对象,会导致更多未被GC的对象存在.,并消耗大量内存空间,从而导致内存泄漏。

3、JAVA内存泄漏原因

(1)、静态集合类引起内存泄露: 

HashMap、ArrayList的集合对象,它们经常会引发内存泄漏。当它们被声明为static时,它们的生命周期就会和应用程序一样长。

(2)、事件监听和回调函数:

当一个监听器在使用的时候被注册,但不再使用之后却未被反注册。

(3)、各种连接 :

数据库连接、网络连接(socket)和io连接等,如果没有正确的显示close连接,系统不会自动GC,当积累到一定程度就会使得系统崩溃。

(4)、内部类和外部模块等的引用 

 

posted @ 2017-08-18 00:04  QuestCode  阅读(159)  评论(0编辑  收藏  举报