Java 内存溢出(OutOfMemoryError,简称 OOM)本质上是指:JVM 在向操作系统申请内存时,无法满足程序所需的内存空间。常见原因可以从“内存区域 + 使用方式”两个维度来理解。
Java 内存主要包含:
不同区域溢出,原因不同。
错误示例:
java.lang.OutOfMemoryError: Java heap space
原因:
示例:
List<byte[]> list = new ArrayList<>();
while (true) {
list.add(new byte[1024 * 1024]); // 不断创建 1MB 对象
}
错误示例:
java.lang.OutOfMemoryError: Metaspace
原因:
典型场景:
错误示例:
java.lang.StackOverflowError
(注意:这不是 OOM,但是栈相关问题)
或:
java.lang.OutOfMemoryError: unable to create new native thread
原因:
错误示例:
java.lang.OutOfMemoryError: Direct buffer memory
原因:
ByteBuffer.allocateDirect()错误示例:
java.lang.OutOfMemoryError: GC overhead limit exceeded
原因:
✅ 内存泄漏
✅ 无限缓存
✅ 静态集合
✅ 未关闭资源(流、连接)
✅ 大文件 / 大对象处理
✅ 线程池配置不合理
-Xms512m -Xmx1024m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/dump.hprof
Java 内存溢出,本质是“该释放的没释放,或要的太多给不起”。
如果你愿意,可以告诉我:
我可以帮你精准定位原因。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。