内存溢出类型有两种:java.lang.OutOfMemoryError: PermGen space 和
java.lang.OutOfMemoryError: Java heap space,
在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,
首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;
其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。
前段时间碰到过一个这样的情况。
每次进入系统后产生线程与服务器定时通信,
另外一个线程检测网络是否连通,
如果断开了,则将与服务器通信线程里的数据清除,
但并未停止这个线程,
而后如果检测到网络连通了,
那么会再次产生新线程通信。
这样就造成了内存泄漏,因为如果如此反复,
那么与服务器通信(无数据的)的线程将很多。
但都是无用的。 |