00:00
好强引用我们刚刚介绍完成,接下来给大家介绍软引用。按架构上前引用就是我们日常用的reference,烂了以后直接后台打印GC对应的调用的方法过接下来soft reference,那么所谓的软引用又是什么意思呢?来,同学们,软引用是一种相对强引用弱化了一些的引用,说白了,软饮用就等于强饮用。减减减掉一点,它的强度就是软引用,主要是用这个类soft reference类来实现,可以让对象豁免一些垃圾收集,简单一句话就说,钱饮用是死了都不放。而软饮用呢,相对于而言呢?柔和一点。假设系统。内存充足的话,它呢。不回收就是地主家也有余粮,哎呀,不跟你计较,不回收浪费就浪费一点了,但是当系统内存不足的时候,他会回收对象,OK,我自己都不够用了,我要回收一部分,所以说软引用通常用在对内存敏感的程序当中,比如说一些高速缓存就会用到这个软引用啊,那么内存够的时候我们就保留,内存不够的时候我们就回收好,那么接下来我们代码说话程序。
01:20
那么上一讲我们来完成了我们的强引用。提出来。Reference。好,那么这个呢,是我们上一期讲的枪乙药,一看名字大家都清楚那。呃,我们的软饮用呢,就是我们的。尿。Soft reference OK,那么注意。这个呢,看一下它的构造方法,直接看源码了啊。请看它有两个一,它的软饮用相当于是什么?呃,要么你跟引用队列有关联,但这个呢,我们暂时用不到,我们主要用的多的是它相当于说你传过来一个对象,把这个对象做个包装,叫soft reference,就是我们的软引用,好,那搁到这了以后我们用my object。
02:13
那么现在就是我们的soft reference OK,那么现在我们默认内存,杨哥的笔记本16个G,你有一个对象绝对够用,那我们干什么事呢?那么现在啊,请看。先把它打印出来。好,那么这个时候我们sort reference.get那么就可以获得我封装的这个对象,一打来,同学们。这个时候没有问题,OK 100%成功,就一个对象,那接下这个问题,这一行不用了,说明这个对象封装成功,那么老规矩C什么点GC没问题吧,那么来我呢,相当于这就一秒钟G,因为GC完了以后啊,启动后台的GC线程,它不是马上就启动,能理解吧,所以说在这呢,我停了一秒钟。
03:02
那。完了以后。我们在这儿。也就是我们之前说的GC。嗯,应该产生产生GC的话,这个是什么呢?GC after啊产生GC了,After这种情况下大家请看内存够用。没问题吧,那么我们呢,依旧。来看看。能不能打印出来。刚才是直接打印,现在是GC一次以后,由于内存够用,大家请看没有任何问题吧?好的,那么说明什么?只要是GC了,你内存也够用,我也不跟你计较,不会被回收,那接下来我们呢,干坏事。呃,这个run的话呢,我们配置一下我们的内存啊,在这儿添加Java虚拟机的参数。搁到这添加虚拟机参数,那么杠XMX开始是十兆,然后最大的MX我也是十兆,没问题吧,好了,那么现在呢,完了以后大家请看。
04:08
我的内存之前的话是好几个G,现在呢就是十兆,那现在只要内存够用,根本不会跟你计较,OK,接下来我干坏事。那现在。我呢,干一件什么事呢?一言不合,直接。然后呢,我呢,就20乘以1024,再乘以1024。这是什么意思啊,直接是20兆B一个对象,OK,好的。来吧,那么现在我明明后台配了只有十兆,你给我杠20兆,那可不是内存不够用了吗?对吧,那接下来我们再来看看现在啊,内存不够用了以后,那么假设啊,这个是内存够用啊,这个是内存不够。
05:03
那么我们呢,来看一眼我们会产生什么样的后台效果,来GC了以后内存够用,刚才已经演示过了,现在是什么内存不够用,我们来看看它的效果是如何。来,大家请看,刚开始啊,我就溜了这么一个对象,对吧,十兆肯定够用,所以说打印出来这个没问题,但是这一行完了以后,我丧心病狂的干了个20兆,那肯定不够用了嘛,所以说马上叫来回收对象,我根本没有把它只为那听懂,你看,那么这个时候请看Java对应内存OM了,那么。内存不够的时候,这个时候得到,那为什么它已经被回收了,你怎么知道,请看这句话有没有被打出来,所以说只要这个对象被干掉,这个方法就会被调用,OK,那么这个呢,就是我们的一个什么。Soft reference软引用,那么在这个案例,那么请大家一定要注意它的效果。
06:06
那么就是什么?看内存够不够用?回到我们这儿就简单一句话,系统充足不被回收,系统不足会被回收,够用留下,不够回收OK。
我来说两句