遇到过,如
(1)Tomcat停止时为了防止内存泄漏,JDBC驱动程序被强制取消注册(Tomcat启动久关闭报错问题) 这个问题是当时忘记给JDBC关闭资源时候报错
(2)java.lang.OutOfMemoryError: Java heap space
这是典型的内存泄漏,简单说就是所有堆空间都被无法回收的垃圾对象占满,虚拟机无法再在分配新空间
一般有单例造成的内存泄漏,由于单例的静态特性使得其生命周期和应用的生命周期一样长,如果一个对象已经不再需要使用了,而单例对象还持有该对象的引用,就会使得该对象不能被正常回收,从而导致了内存泄漏。
集合容器中的内存泄露
我们通常把一些对象的引用加入到了集合容器(比如ArrayList)中,当我们不需要该对象时,并没有把它的引用从集合中清理掉,这样这个集合就会越来越大。如果这个集合是static的话,那情况就更严重了
解决方案:查找对象的引用情况,基本就可以找到泄漏点
(3)java.lang.OutOfMemoryError: PermGen space
Perm空间被占满。无法为新的class分配存储空间而引发的异常。这个异常以前是没有的,但是在Java反射大量使用的今天这个异常比较常见了。主要原因就是大量动态反射生成的类不断被加载,最终导致Perm区被占满。
解决方案:
1.在Btrace下看看那里调用了defineClass Classloader,然后把没用的清除掉
2.设置 -XX:MaxPermSize=16m