Java 内存管理由 JVM 自动负责,但依然有很多容易踩的坑,主要集中在内存泄漏、GC 问题、对象生命周期、容器误用、外部资源等方面。下面按常见场景系统梳理。
public static List<Object> cache = new ArrayList<>();
✅ 解决:
WeakReference / SoftReferencestatic ThreadLocal<User> local = new ThreadLocal<>();
✅ 解决:
finally {
local.remove();
}
component.addListener(this);
✅ 解决:
class Outer {
class Inner {}
}
✅ 解决:
static class✅ 解决:
ConcurrentHashMap + TTLequals / hashCode✅ 解决:
for (...) {
byte[] data = new byte[1024 * 1024];
}
✅ 解决:
✅ 解决:
✅ 解决:
✅ 解决:
java.nio 相关指标String s = "";
for (int i = 0; i < 10000; i++) {
s += i;
}
✅ 解决:
StringBuilder sb = new StringBuilder();
s.intern();
✅ 解决:
✅ 解决:
✅ 解决:
-Xmx 过大:GC 停顿长✅ 建议:
常见 OOM 类型:
Java heap spaceMetaspaceUnable to create new native threadDirect buffer memory✅ 解决:
| OOM 类型 | 常见原因 |
|---|---|
| heap space | 内存泄漏、缓存无限增长 |
| Metaspace | 动态代理、反射、类加载过多 |
| unable to create thread | 线程数过多 |
| direct buffer | 堆外内存未释放 |
jmap + MAT / VisualVMjstat -gcjstackJava 内存管理最大的坑不是“会不会回收”,而是“你以为会被回收,其实一直被引用”。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。