00:00
好,各位同学,接下来给大家介绍一下local的内存泄露问题。这个非常的重要,涉及到的知识面不但有local自身的知识,还牵扯到我们的Java、虚拟机GVM的强、软、弱、虚四大应用,直白一点马上会问你为什么local map,它这块是要有一个weak reference,弱引用,强引用行不行?他为什么要用弱饮用,为什么不用其他饮用就是。一组问题,那么第二个如何导致内存泄露?好,那么呢,兄弟们带着问题我们一起进入到我们的学习,这张是精华知识,务必大家呢跟下来所有local和Java虚拟机引用相关的知识,我们抖一头的讲解复习一次,来先阿里的面试题开识。第六节这个强制要求我们都已经说过了,该怎么用,战术层面,第2API层面remove,那么你不自不清,不清你自定义的这个变量,就会导致后续业务逻辑。
01:04
混乱或者造成内存泄露,那么请问什么是内存泄露?第二个为什么会导致内存泄露?那么再来为什么要用若引用不用,你能把我怎么样好的?那么下面呢,我们来说说什么叫内存泄露一句话。占着坑位不作为。那么就是。不再会被使用的对象或者变量,但是它呢,已经不再被使用了,但是却占着内存不能被回收,这个就是内存泄露,那说白了就是一种什么将死一样的,我呢,占着坑位不作为,听懂了吧,慢慢的如果这样东西越来越多,是不是就堵死了?好,那么谁的锅,谁惹的祸?那么下面首先我们来看一下。通过前面线程local map这三者的关系,人身份证以及嵌在身份证上面的信息我们都清楚了。map就是TV建止,对所谓TV剑指队就是个N垂,应该用弱引用它这块实质是这样的。
02:03
我们呢,可以看到两边一对比,他们的关系,我们已经说过很多了。这两个的关系是指从字面上我们就可以看得出,你一旦调用local map的话,是一个保存local对象的一个map,那么来,因为底子啊,这个ENT你看。T,它是以local为t object就是我们传来的值,但是它呢,不过是经过了两层包装的一个对象,为什么是两层包装的第一个?但是要相当于说你丢进来啊,身份证上的信息是不是印在身份证上,所local这个身份证,但是这个身份证他拿了个对象给你包装,先把它包装成一个weak reference,这是第一层,也就是第一层包装是用weak reference local,将local这个对象变成一个弱引用对象,也即你要么就别要要要一进来先要把它包装成一个。若引用对象,这儿注意。
03:01
我们前面呢强调过啊。在县城这儿,我们这儿是有一个。Thread local这么一个。变量在这个local里面我们是用的,我们里面点开的话有一个local map,也即我们这个线程要去找local的时候,一传进来先把它整体打包成一个weak reference,若引用这是第一层包装,第二层专门定义了一个entry的这么一个子类。来继承这个弱引药,并对它进行扩展,所以说它是两层包装,这个10LOCAL对象,OK design就是N听力建池,对,那么我们下面就来说一下强软弱虚分别是什么,然后才能很好的回答为什么人家要用弱饮用。好,下面我们先来看看Java虚拟机里面关于引用的整体架构。来。
04:00
首先。Object所有Java对象的宗类,这没什么好说的,大家都懂。引用并列的有个引用队列,Reference q,然后这个引用啊,也就是我们一般所说的我们Java程序六一个对象默认长期经常使用的什么强引用,也即当我们六一个对象一般默认就是六了一个这个引用强引用,但是前引用也有三个子类,前soft,软weak,弱finder。虚拟幽灵的意思,这个是虚引用,所以说他们的组织架构就是这样,这听着一般虚引用要和引用队列勾搭上其他三个,那么我们待会来说,那么接下来我们都清楚Java虚拟机。会干一件事,不再用它的对象。他检测到以后用根可达算法,对吧,这个对象该被回收了,能不能拿走,但是呢,Java呢,允许用finalize这个方法,在垃圾收集器将对象从内存中清除出去之前,要做必要的清理或者是通知工作。好说白了就是。
05:11
你死后遗言,你这个对象要被回收之前,你想做点什么啊,一般这个方法Java程序用不到,好这个方法呢,是在Java long object这个类里面有一个final这么一个方法,那么首先从JAVA11啊,我现在用JAVA11这个JK的话呢,最终确定机制本质上存在的问题,它已经一过时了,注意有这么一个标签,那么巴拉巴拉这一堆你不用管,只有两句话,你需要关心就行,因为这个方法啊,一般不需要我们Java程序而去重写,它是给写Java虚拟机的人去用的,那么我们一般啊不会去重构个Java虚拟机,那么这样了解一下就行,我只是待会我来给大家讲虚引用的时候,可能会调用到这些方法好,它的作用是当垃圾收集器确定没有对该对象有更多的引用的时候,由对象上的垃圾收集器来调用,OK,那么作用就是什么?
06:07
怎么用呢?子类重写反方法以处置系统资源或执行其他清理,也即这个对象要被收集之前要干的事。那么说穿了,它的作用是,目的是在。对象被不可撤销的丢弃之前执行什么清理操作,OK,注意被不可撤销的丢弃就是肯定死定了,那么死定之前,你看之前执行一定的清理操作,OK,那么好我们就明白,如果说到时候啊,我们的垃圾对象。真真正正被收掉了,那么有可能会触发这个方法,那告诉你我掉到这了好,那么所以说我们这儿呢,我也给大家讲清楚啊,直接来吧一个案例,那么要新建一个带finalize方法的对象my object,那么来同学们,我们这呢,引用先进好一个类,注意final。那么这个方法啊,一般。
07:01
这个方法一般不用复习。OK,我们只是为了教学,给大家演示案例。做说明你日常工作中用不到啊,那么这我重写一下,我重写干什么呢?那么也就是说按照我们API上面所说的。那么来吧,他干的活就这个。在对象被不可撤销的丢弃之前执行清理操作,那么我们这儿呢,相当于是打出一句话O吗。那么这。Invoke了这么一个方法,如果它被打出来了,那么说明什么?这个方法被调用到,OK,我们先做好这么一个架子啊,那么待会儿我们呢,就要用强软弱虚四个案例来结合我们的。
08:00
对象的回收,来搞清楚他们到底是一种什么样的情况,最终给大家讲解清楚若引用他的关系和厉害以后再回到我们的是吗?所local给大家说一下为什么要用弱引用,不用又如何,以及它底层的设计思想和架构思路。
我来说两句