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方法,当存放过多时,则会内存溢出
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。