一.概念:
内存溢出(OutOfMemoryError):JVM无法分配足够的内存空间导致的错误。
内存泄漏(Memory Leak):对象不再被使用但仍然被引用,导致垃圾回收器无法回收这些对象,从而逐渐消耗可用内存。
二.常见原因:
1.内存溢出常见原因:
堆内存溢出:创建了过多的对象并且这些对象没有及时被垃圾回收。
永久代(方法区)内存溢出:加载了过多的类或生成了过多的动态代理类。
本机内存溢出:JNI调用时分配了过多的本机内存。
2.内存泄露常见原因:
静态集合类持有对象引用:如 HashMap 或 ArrayList 静态实例中不断增加元素。
未关闭的资源:如数据库连接、文件句柄等。Listener 未注销:事件监听器未及时注销,导致对象不能被回收。