Java 内存溢出(OutOfMemoryError,简称 OOM)是开发中常见的问题。解决思路通常分为 定位问题 → 分析原因 → 优化/修复 → 预防 四个阶段。
不同错误代表不同原因:
Java heap space
GC overhead limit exceeded
Metaspace / PermGen space
Unable to create new native thread
Direct buffer memory
java.lang.OutOfMemoryError: Java heap space
先确认是哪一种 OOM。
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/dump.hprof
-Xlog:gc* (JDK9+) 或 -XX:+PrintGCDetails
重点看:
典型场景
解决
// 错误示例
static Map<String, Object> cache = new HashMap<>();
// 改进
Map<String, Object> cache = new WeakHashMap<>();
// 或使用 Caffeine / Guava Cache(带过期)
List<User> list = new ArrayList<>();
while (true) {
list.add(user);
}
解决
-Xms512m -Xmx512m
解决
-Xms2g -Xmx2g
⚠ 注意:扩内存只是“缓解”,不是根本解决
-XX:MaxMetaspaceSize=256m
原因
解决
while (true) {
new Thread(() -> {}).start();
}
解决
ExecutorService pool = Executors.newFixedThreadPool(10);
解决
byte[] 全量加载✅ 合理使用缓存(带过期)
✅ 及时关闭资源(IO、连接)
✅ 避免 static 持有业务对象
✅ 使用对象池 / 线程池
✅ 压测 + 监控(Prometheus + Grafana)
如果你愿意,可以:
我可以帮你更精准地定位和解决。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。