00:01
好,同学们。那上一讲我们给大家。讲解了。软和弱两种引用它的适用场景。那么接下来面试官可能会发现你。读过美的源码缓存片,也有过深入的了解,那么这个时候现在哈嗯,就会引出来是否用过魏克哈西map。那么这个啊,在做缓存的时候也是常见和常用哈。那么像我们的red啊,美啊,这些底层数据打交道的,你看不到,你没见过,没听过,没用过,那是因为你的目前的功力和层次没有到这儿。它并不代表不存在。首先我们要明白。若饮用,那么。缓存就是哈map,那么哈map是什么呢?以前我们说过哈map好说。那么后来要解决并发问题,学过一个看current has map,那么现在要解决缓存清空,保证性能,也就说穿了就是这个需求这样的类似的,那么我们又出现了是吧,看current哈,Map的另外一个为map。
01:13
那么它有什么用?它又是什么呢?首先那么打开我们的YouTube包,那么呢,我们在这个最下面哈,就能找到我们的week。Hama。那么大家请看,那么呢。也是麦。Abstract map这样接口的一个子类吧。那么首先。实现了map接口。哈希table基于map接口所实现的。伴随着weak kiss,那么言下之意就是什么?若那么请看关键的就是这句话什么概念呢?那么也就是说,对于一个用。哈希迈普所修饰的这么一个。N建制,对,将会自动的被移除,当它的key不再按照正常的使用情况下,那么也就是说如果它的key也被制空的话,那么会产生被垃圾回收弄掉。
02:14
好,那么。不多废话,咱们呢。直接先写我们的程序,为了帮助同学们更好的理解,那么因为哈map大家已经了解过了。Week,卡西麦前面也说过week的这样的一种弱的引用,那说白了是不是有垃圾回收?就会没有了。那么由于哈迈又跟K建支队。有关系,那么这个是一种什么情况呢?我们来吧。卖。哈希,Map。我就干这么一个方法。好,那么同学们。现在哈,我们呢,不多废话。那么哈希迈普。就这样吧。In,那么呢,是俊?那么这是我们的一个map等于六。
03:03
哈希。Map,那么这个呢,是同学们最熟悉的,那么现在哈,看着我们为了故意做实验。这个是一个T水晶气点,这个value是个string,那么。邻居。等于六阴切点。假设这就是一。然后呢?String。Value,由于我们这个的试验,我们呢主要呢是哈希map,那么假设我这个就叫哈希map。那现在。扭了直以后map点葡萄,那么T。完了。同学们非常熟悉,那么打出我这个map。那么同学们。这个不用我多废话吧,那么现在这面一个map打出来那么干嘛,是不是打出一还是map,那么好,我们来运行执行一下一还是map,这没什么好说的,最经典的。
04:07
那么接下来。Here。等于钠,那么。现在请问我把K。吃为难了,那么请问这个打印出什么?给大家思考半分钟。好,那这个呢,就有一部分同学呢,是不是听晕了,就有点是糊涂蛋了啊。现在你得给我搞清楚啊,这个K相当于是什么啊?是我们的int甲这个对象,言下之意,这个K现在指向了这么一个东东,现在我把它们之为烂了,那么同学们跟这个哈斯map里面put进去的这个有毛关系啊?那么同学们都清楚啊,我还是map底层源码带着大家。哎呀,这个是看过很多遍了,听不听得懂,那么干什么呢?它底层是不是一个叫node节点的这么一个K键值,对呀,啊,Static class听不听得到map里面那个put放进去的是不是这么一个K键值,对,那言下之意,这个。
05:08
TV建队弄出来就是一这个就是一个哈map,一个字串放在这个node里面,然后这个node弄到哈map里面,那么这个时候同学们呢,都干过这活对吧?那么这个时候put key,我们都明白put value。看过N多遍源码了,是不是一个no的数组,丢进去的是不是一个node,那么这个K。和我们的这个K是两回事,听懂了吧,现在这个二十十九行,这个K是指向了这个阴气角的一个引用,所以说我们可以看到的结果是什么,你这个T吃不吃那无所谓,跟我哈希map没关系啊,我这个T是指的是这货inte,而我丢进去的这个map干嘛?这个T那个note节点它没有任何。变化好,所以说这道题答错不应该啊。怎么来?
06:00
源码我们都看过讲过是吧,前期的话呢,加YC的老师一定相信。带着大家第bug过,那么这个呢,就是一种灵活性,对知识的理解,那么现在我的问题是来了,干什么呢?同学们请看。System。GC,然后我干了一票GC之后,那么请问现在这个map它还在不在,会打出什么,那么。如果说同学们不放心的话,map.size我们再打出它这个map的个数,那么现在干嘛?请思考。半分钟。好,那么同学们这个还有没有,我们现在这个GC哈map强引用,现在这个情况是强引用还是弱引用还是软引用。这个呢,不用废话,什么情况肯定还在对吧,请看打出的map,它的键值,对,是这么一个动作。里面有几个,这个map里面装着就一个,就是我们装着我们的一和这个哈,Map好,那么这个是我们的什么my map,这个完全是以前的知识啊,听懂了吧,这一点懂不懂。
07:08
刚才有部分同学,不少同学答错了,这个就让杨哥你们就伤大哥心了,听懂了吧,不应该这样。那么接下来我们来分割一下这条线,以下是我们的什么呢?Wake。哈希map,那么好,同学们没有这个方法,我们创建这个方法那。OK,那么接下来呢,我们呢,给他呢。移一下位置,上面呢是我们的哈希迈普,下面呢是我们的魏克哈希麦。不废话,我们呢。一折腾过来。全是work。哈希迈普。那么这个时候,同学们。没有什么太大的变化,那么呢,我们来看一眼哈,首先这个应该是什么?这个又应该是什么,然后这个又应该是什么,那么。
08:04
请大家把答案写在你的纸上,给大家思考一下。好,那么同学们我们现在来看哈,上面是哈map,下面是my week哈map,那么这个时候同学们我们呢,都会明白,跟刚才一样哈。首先这个map出来,那么这假设哈,我这就二吧,就打印出好不好,为了给大家好区分,那么这个呢,就叫什么呢为克阿西map,那么我这上面呢是一哈希迈普。去掉下面是二。Work map,那么不用讲这一块里面是不是打印出2WORK map这个字符串。那么这个K为难了以后,这个打不打的出来,同样打的出来讲过了,这个K是跟这个R现在有关,跟这个map没关系,我们这个map这个node节点的话,依旧也就躺在这个哈map里面。
09:00
那么关键是GC之后我们。来运行,简单的来看一眼。来,同学们。由于它是什么wake还是map已运行了,那么你们他也应该猜得到是什么效果和结果。那么所以说请同学们看。对于我们的前饮用。老爷哈,是map。一还是map,一还是map,一还是map g c之后没有被回收,它这块map size是一,但是对于我们的week还是map,若哈map引用请看我们现在改的是2T是2VALUE week哈,MAP2。Week还信map,这个就是这个,但是这呢,由于GC之后我们说过了,只要是weak弱的,只要有GC,通通都要回收,所以说这个map被干掉清空,Size是几零,那么。同学们,这个就是我们的是吗?魏克哈希迈克相关的讲解和。
10:01
三我们再来看看它的文档,他也说了,那么更确切的说来说的话呢,对于给进的K这种映射的给进的K将不会阻止这个key throw,什么by the garbage collection,也就是说它不会阻止什么我们的垃圾回收的,那么事实上经过final这些方法最后被回收。当一个P一个K被申请为他呢,干嘛?已经是。当一个T已经是什么discard无效了,那么他呢?这个建制对从。效果上来说的话,将会从这个map当中干嘛,Remove移除,那么同学们根据官方文档和我们做的实验的效果,我们现在是不是看到只要是未还是map,你拿来做缓存,只要是EGC,马上它就被移出,那么这样的话是不是内存空间就腾出来了,那么发生OM内存溢出的这种情况将会概率会被大大降低,那么所以说这个类的行为,从某种角度而言,和其他的map接口是不是so someone。
11:07
Differently是不是有一些些简单的不同啊,OK,那么呢,根据官网的这段提示啊。杨哥呢,用代码给大家证明了哈什迈普和魏克。哈什迈。这个不用多讲。不烧,这个只要1GC彻底就挂了,那么这样我们有这样的一种类,方便我们做高速缓存和对内存敏感的相关。业务需求的开发好,那么对于我们的微哈麦,我们就给大家介绍到这儿。
我来说两句