00:00
好,那各位同学强引用没什么好说的,就是我们嗯,日常使用的,那么说白了,只要有一个引用还指向这种实例,它呢,就算是。爆发OM它也不回收哈,那么。接下来我们再看一个比强引用弱级的叫什么软引用,那么就是我们在架构里面的这个soft reference。好,那么刚才介绍的这个,一直从大家入学到现在学的也就是这个应用,但是现在又十分知识又深了一层。那么呢,软引用,那么什么意思呢?痛快点,杨哥能不能一句话给我讲明白什么叫软引用?简单一句话,钱也要是死了都不烧。软引用就是内存足够的前提下我不收,内存不够的前提下,我要把你收了。来保证尽量不要发生OM。尽量不要导致内存不够用。也就是说,假设哈地主家还有余粮,那么OK,哎呀,今年你这个债不还也无所谓。
01:06
但是地主家也没余粮了,那么只要从你嘴里面掏食了,那么所以说我们来看一下。软引用是一种相对。强引用弱化的一些引用可以叫做软引用呢,就是强引用干嘛。减减它是用到soft reference,它是第二个级别哈,那么就刚才我说那句话,系统内存充足的时候,它怎么不会被回收。只要内存足够,就是全饮用。但是内存不足呢,它会被回收,那么这种软引用有什么好处呢?通常用在一些对内存敏感的程序当中,比方说有些高速缓存就会用到软引用,如果你去翻这个美的这个缓存的代码,它有一些内部类底层的一些代码,就是用soft reference写过的哈,那么简单一句话,内存够用就保留,不够用就回收好。
02:00
老规矩,代码说话。那么。节约时间,我先把轮廓给大家写好,业务逻辑我们手敲,因为现在咱们呃时间越来越紧,加班加点的杨哥也怕讲不完,所以说就先把这个。框架给大家写好。那么第一种情况。软引用的内存enough什么意思啊,够用那么好,那么讲过了就是什么。笔记。说过了。言下之意。那干嘛呢?内存够用的时候就保留,不够用才会说那么好,同学们那么老规矩,Object OG等于new。Object没问题吧,那么第二个叫soft reference,我也引用一个叫object的类型,我叫soft reference,等于soft,那么这个时候O1丢进去,这么说能跟上,就跟刚才的引用一样,你看O1O2都是强引用,听不听得懂,那么现在呢,不但是对比了以后,上一讲是O1O2,现在这一讲是O1,但是下面没有O2了,是一个什么soft reference。
03:12
软饮药,那么干嘛呢?两个应用打了后打出O1。然后呢?第二个注意软引用,我们呢,可以看一下API它怎么获得,这有个什么方法get返回这个对象引用的。能跟上用的是get方法,那么所以说ver.get那么大家都懂的哈,那么现在杨哥的这个参数呢,根本就没有配任何,那么默认什么情况,我这个是不是接近四个G的内存。最差起步价是200多兆,那么就你有这么两个对象绰绰有余啊。那么现在我们先。打印一下,好,那么同学们请看。Oh yeah。Soft,没问题吧,两个对象同,而且他们指向什么呢?同一个,那么现在呢,开始折腾了。
04:07
Oh yeah。等于钠。这么说能跟上,那么system。第二,GC这么说能跟上,那么天有不测风云,那么现在呢,干嘛呢?中间这个是六出来的申请,然后呢,申请以后直接初始打印,然后中间经过了一次变故,那么OE是那且GC大家都明白这个不用多说了,什么意思对不对,手动GC。弟兄们,那么现在OE打什么?这个reference这个软引用。还有没有值啊,会不会被回收,那么前提是我们说过了,现在内存够不够用。什么级别,Enough级别,那么这个时候同学们我们点一下。我们可以看到什么概念,前两个这是O1这是。这个,那么第三个语句,大家知道的这个是不是钠,因为OE虽然说你是强引用,但是你钠质钠GC了以后打出是钠,内存够用的前提下,我们可以证明干嘛软引用不会被回收好,那么这个就是我们内存够用,那么接下来。
05:18
那假设你内存不够用了,那么呢,跟刚才一样,同学们,我们呢,直接干这么一票,那么来吧。也这么回事。可是我现在哈给O1。至。空了,然后GC开始回收了,那么。干嘛呢?我们呢,直接呢。这么干?你O1制空了以后,我要求你再打打O1,或者是什么概念呢?我们就在放在final里吧,行不行,那么这一块我们可以看看,假如说我们也依旧这么答,那么来同学们,我们这儿要干一件什么事呢?那么。
06:04
直接诉说。那么。然后呢,我这呢,30啊,乘以1024啊,乘以1024啊,干嘛是不是一口气干这个30兆,那么言下之意,我们要干一件什么事。故意产生大对象,并配置什么小内存。让它内存不够用导致oom,那么在查看软语用的回收情况,那么如果我像这么写这句话就不用了,为什么?因为刚才是张哈顺手,刚才我们是什么内存够用,我让他GC,那内存够用,它不会自动GC,所以说我只好手动硬干,但是现在干嘛,我们是不是最好的效果要是模拟。OM什么自动GC啊,我们来看。到这一行会不会打印,然后我们再来看到这一行会不会打印好什么概念O1,那然后这故意用一个什么30兆的大对象,我们这才给多少兆,五兆,那么来同学们没有办法起到现在是什么note enough。
07:09
给五兆,你有个30兆100%是不是要报OM,那么在OM之前它会报一些什么?GC和负GC,我们看看在回收的这个过程,内存够用的时候能不能打,内存不够用的时候来看看它会不会被回收,那么来同学们。我们呢,直接一张,这个时候一配,这个时候同学们我们一运行,现在是内存不够的情况下。来,同学们,我们会可以看到很多内容。第一种情况干嘛,这两个是不是都打出来了,那么后台的控制情况。内存还没有产生大对象呢,够用,那么这个时候就是我们的第37行,38行,这个就是。这个这个就是这个,那么接下来我们大对象完了以后。Catch异常大家看什么鬼?那不用说,OE等于,那这是我们强行制空的,可问题是下面这个也物为什么呢,也会变成那么呢?那么就是我们讲的内存够用不跟你计较,地主家还有余粮,内存不够用了,抱歉,我们这个软饮用。
08:19
不能获得,因为这个对象也被空间,也要被回收,要腾出来。所以说软引用就一句话,够用,不跟你计较,不够用要回收,这就是我们的什么soft reference软引用。
我来说两句