共计 872 个字符,预计需要花费 3 分钟才能阅读完成。
GC,java 中的垃圾回收机制,会主动清理程序运行过程中的无用对象,避免内存的溢出。
例一:
public class TestGC {public static void main(String[] args) {A a = new A();
a = null; // 当 a 指向 null 时,new A()会变成垃圾
System.gc(); // 手动调用 gc}
}
class A{
// 重写 finalize 办法,@Override
protected void finalize() throws Throwable {System.out.println("A.finalize()");
}
}
通过 System.gc()办法,手动调用 GC,当有垃圾存在时回收
在 A 类中重写 finallize 办法,输入一行语句,此办法是在对象的申明周期完结前执行,能够看出对象是否被回收。
在运行前点 Run Configurations 填写参数 -XX:+PrintGC
在控制台就能够看到输入后果:
阐明对象被指向 null 时对象会变成垃圾,被 GC 回收
例二:
public class TestGC {public static void main(String[] args) {for (int i = 0; i < 100000; i++) {byte[] b = new byte[1024*1024]; // 一直的创建对象
}
}
}
若一直的创立大对象,因为该对象的生命周期只在 for 循环里,所以 gc 来得及回收,控制台显示的就是一直的占用内存,一直地回收垃圾
例三:
import java.util.ArrayList;
import java.util.List;
public class TestGC {public static void main(String[] args) {List<byte[]> list = new ArrayList<>();
for (int i = 0; i < 100000; i++) {list.add(new byte[1024*1024]); // 将创立的大对象放入 list
}
}
}
因为创立的大对象寄存于 list 汇合中,所以它的生命周期是整个 main 办法,当寄存过多时,则会内存溢出
正文完