备注:软引用和弱引用通常会应用在一些缓存产品的设计中。
下面用代码演示
//通过JVM参数检测是否触发了GC操作:-XX:+PrintGCDetails class Container{ private Object[] array; public Container(int cap) { this.array=new Container[cap]; } //finalize方法会在对象被回收(GC)之前执行,可以对对象的回收进行监控, // 也可以在对象回收之前进行一些资源释放操作。 @Override protected void finalize() throws Throwable { System.out.println("==finalize()=="); } public class TestGC { public static void main(String[] args) { //1.强引用 //Container c1=new Container(100);//c1就是强引用 //c1=null;//此时c1指向的Container对象不可达(也就是说JVM访问不到了) //2.软引用 //SoftReference<Container> c2=new SoftReference<Container>(new Container(20)); //Container cc=c2.get();//这种写法是又将软引用转换为了强引用。不推荐 //System.out.println(c2.get());//通过软引用获取和操作对象 //3.弱引用 WeakReference<Container> c3=new WeakReference<Container>(new Container(100)); System.out.println(c3.get()); //手动GC System.gc();//GC启动以后,GC系统会对内存中的对象进行可达性分析。访问不到则进行标记。 //自动GC(通过JVM参数进行分析) // List<byte[]> list=new ArrayList<>(); // for(int i=0;i<100000;i++) { // list.add(new byte[1024*1024]); // } } }