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办法,当寄存过多时,则会内存溢出