亲宝软件园·资讯

展开

强软弱虚引用,只有体会过了,才能记住

CodeBear 人气:0
以前学习强软弱虚引用的时候,只是走马观花看看博客,并没有自己写代码去实践、去证明,导致每次看完后,过不了多久就忘了,后来下定决心,一定要自己敲敲代码,这样才能让印象更加深刻,古人云:纸上得来终觉浅,绝知此事要躬行。 ### Java中的四种引用 Java中有四种引用类型:强引用、软引用、弱引用、虚引用。 ### Java为什么要设计这四种引用 Java的内存分配和内存回收,都不需要程序员负责,都是由伟大的JVM去负责,一个对象是否可以被回收,主要看是否有引用指向此对象,说的专业点,叫可达性分析。 Java设计这四种引用的主要目的有两个: 1. 可以让程序员通过代码的方式来决定某个对象的生命周期; 2. 有利用垃圾回收。 ### 强引用 强引用是最普遍的一种引用,我们写的代码,99.9999%都是强引用: ``` Object o = new Object(); ``` 这种就是强引用了,是不是在代码中随处可见,最亲切。 只要某个对象有强引用与之关联,这个对象永远不会被回收,即使内存不足,JVM宁愿抛出OOM,也不会去回收。 那么什么时候才可以被回收呢?当强引用和对象之间的关联被中断了,就可以被回收了。 我们可以手动把关联给中断了,方法也特别简单: ``` o = null; ``` 我们可以手动调用GC,看看如果强引用和对象之间的关联被中断了,资源会不会被回收,为了更方便、更清楚的观察到回收的情况,我们需要新写一个类,然后重写finalize方法,下面我们来进行这个实验: ``` public class Student { @Override protected void finalize() throws Throwable { System.out.println("Student 被回收了"); } } ``` ``` public static void main(String[] args) { Student student = new Student(); student = null; System.gc(); } ``` 运行结果: ``` Student 被回收了 ``` 可以很清楚的看到资源被回收了。 *当然,在实际开发中,千万不要重写finalize方法* 在实际的开发中,看到有一些对象被手动赋值为NULL,很大可能就是为了“特意提醒”JVM这块资源可以进行垃圾回收了。 ### 软引用 下面先来看看如何创建一个软引用: ``` SoftReference

加载全部内容

相关教程
猜你喜欢
用户评论