JVM垃圾回收:内存泄露案例
Java Virtual Machine (JVM) 是一种用于执行 Java 代码的软件。在 JVM 中,垃圾回收是一个关键机制,它用于自动检测和清理不再使用的对象。
然而,内存泄露并不是垃圾回收机制直接导致的问题。下面是一个简单的内存泄露案例:
public class LeakExample {
// 一个全局的引用,防止对象被垃圾回收
private static ThreadLocal<LeakObject> localObject = new ThreadLocal<>();
public static void main(String[] args) {
// 创建并存储一个泄漏对象
leakObject(new LeakObject());
// 进行长时间运行,使泄漏对象不会立即被垃圾回收
for (int i = 0; i < 10000; i++) {
// 无操作,保证线程存活
}
}
private static void leakObject(LeakObject obj) {
localObject.set(obj);
}
}
在这个例子中,我们创建了一个全局的 ThreadLocal
存储泄漏对象。当 leakObject
被调用时,它会将传入的对象存放到这个线程本地变量中。
由于这个全局引用的存在,即使泄漏对象已经不再需要,它也不会被垃圾回收。因此,这种设计会导致内存泄露。
还没有评论,来说两句吧...