Java 中会存在内存泄漏问题?
所谓内存泄露就是指一个不再被程序便用的对象或变量一直被占据在内存中。
Java 中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象变成了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。
既然java有垃圾回收机制,为什么还会存在内存泄漏的问题呢?
无非,就是有些对象,无法被垃圾回收器处理,导致这些对象一直占用JVM内存,那不就导致内存泄漏了嘛。
由于 Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题 ,例如有两个对象 ,相互引用, 只要它们和根进程不可达的,那么GC也是可以回收它们的,例如下面的代码可以看到这种情况的内存回收。
import java. io.IOException;
public class GarbageTest {
public static void main(String[] args) throws IOException {
try {
// TODO Auto-generated method stub
gcTest();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("has exited gcTest!");
System.in.read();
System.in.read();
System.out.println("out begin gc!");
for (int i = 0; i < 100; i++) {