00:00
好,同学们,接下来我们来看一下传统经典的五大结构底层C语言的源码分析,先说好,这章比较难也比较重要,是我们本章的精华,说人话就唠唠这些C语言里面写的是些什么,再直白一点,再看一下,大家请看你后面是不是自动的打出来这么多提示啊,它是怎么来的,怎么出现的,所以呢,弟兄们,我们呢,打起精神,屏幕前的你。或者是各位上网课的同学,烦请喝杯咖啡提提神,这张拿下来了,你的功力内功是会大补大增的。好,首先开篇名义本章的学习思路和重点,那么杨哥呢,给大家总结一下,我们呢,按照这么一个动作,就是走分,走一句话,杨哥现在呢,你要跟我们讲这些底层的数据结构和模型没问题,那么总体一个大纲是什么?然后挨个挨个的五大经典数据类型,我一个一个的给你介绍,这个就是我们的分,最后给大家做一下小总结,好,兄弟们开工,那么现在我们都清楚了,学了这么多了,操作了这么多命令,我在这写个赛K1V1,到底底噪,我操作的是个。
01:37
什么样的数据类型,有哪些一一对应的话,我操作的是哪一些?比如说我们嘴巴上说,台面上我们会说string,哈希、list set the set等等等等,那么你底子到底操作是个啥?面试的过程当中,它考的是个啥?要求同学们全部拿下,Let's go首先。
02:01
我们大家来看一眼源码分析我们总体大纲数据结构就这八种,分别是动态字串、双向链表、压缩列表、zip list、哈希表、跳表、整数集合,快速列表和紧凑列表。那杨哥它是怎么来的呢?那么下面请允许我回到家吧,和大家呢?简单的说一下弟兄们这两行代码,我相信每一位坐在教室网课教室,坐在屏幕前的B站股粉网友们绝对没有任何问题,面试作为一个初学者也会被问。同学,当我们new了一个哈希赛特,或者在操作哈希赛特的时候,底噪操作的是个啥?那么你一定会答,根本就没有哈希赛特这种数据结构,Design操作的是哈希map。那么一样,我现在想要操作的。
03:01
是个string,那么请问我操作的是个啥?说人话面上叫哈希叫哈map好,第二个我们经常操作的a list集合带。面上我们说的操作的是一个a list这么一个对象,那底子呢?同学们请看这是不是有个东西叫element data,是不是,是不是一个object类型的数组?听懂了吗?所以结合这我们走向我们的RA的分析方法看源码和对应的思路也是这样的,所以这八大数字类型结构,杨哥先给大家呢总结整理好,来看我们第一个走得到的结论。我们对于传统经典的五大数据结构,请大家注意我们的string在red这个层面啊,弟兄们,Red结构啊,我们这儿参考Java来理解,假设我们这这个在这个结构,我们操作的string其实底子是等于SDS的,这个是个什么,你先不要管,先给我背下来,它俗称动态字符串,OK,这是第一步。好,那假设啊,我们下面还学过了set ready,以下都是red啊。
04:34
它呢,不像我们加va哈希set,底子是个哈希map,没有这种说法,它底子是个什么哈希表加整数速组是等于特set,再加一个我们的哈table OK,好,那么基于此,这个叫z set,就是排序的set,它等于什么跳表加压缩列表好注意啊,我为什么要写一遍,你放心加深记忆,另外要给你介绍。
05:07
从六到七对应特性的变化和数据结构的优化,大家都学过一个东西叫gbm,我们也画过一条线,JAVA8之前GVM是不是叫什么新生养老永久Java之后弟兄们是不是叫新生养老,叫元空间,哎,类似于这样对标的来学习,那么我们z set看好啊,这。有个重要东西叫压缩列表,听懂了吗?好,Z set跳表加压缩列表啊。跳表加压缩列表,这是z set,再来list,等于双端列表加压缩列表,那么在这块这个双端链表,那么也就是我们的link的。
06:04
List能跟上,但是呢,他又做了优化,叫quick list再加我们的一个压缩列表能跟上,好,最后是我们哈希等于压缩列表加哈希表好了,那么同学们,它这块呢,是等于哈希再加我们的压缩列表,弟兄们。没问题吧,挺好。这个是red料相关的底层模型和结构,那对不起。七以后呢?也就是我们现在2023年需要了解和处理的东西呢?那杨哥你这张图全部给我们写了一遍哈,还啰里啰嗦的,你这上面不是有八种数据类型的吗?我怎么没看到什么叫紧凑列表,这个派在哪?所以呢,弟兄们,Red为什么优秀?因为它在底层的不停的迭代和进化是非常牛逼的。
07:21
所以在这听好这张图没问题了吧,我们到期了以后,底子发生了变化来。开篇名义一个重点,从七号压缩列表z list没有了。听懂了吗?不再用了,但是它为了兼容性还是保留了,这么说听懂,所以各位亲,READY7以后大家看2023年。请学这张图,那么我们的string还是等于我们的SDS,我们的set还是哈希表和整数数组加哈希表,但是我们的z set就变成跳表,The set就变成skip list跳表注意加什么list pack。所以说在这六跟七的最大的一个变化就是底噪压缩列表变成了list派这个俗称紧凑列表。后面这两种数据结构我们会分别介绍是什么,有什么用,面试啊,考就考这一个重点。
08:44
请你谈谈你所操作的传统五大数据类型底层分别是什么?六是什么?七是什么?好,那么来搁到这list变成了quick list啊,直接没有了,因为七以后不再使用压缩列表。
09:02
好,那么哈希呢?大家请看哈希表加什么list pack?所以在这我们得到一个结论,六跟七相关的区别就在这。所以同学们务必把这张表给我背下来,从2023年,如果你用的是七,直接学这张表就行了。但是非常抱歉,因为面试面试官的题库还没有更新到七,他们还是在考六以前的,所以呢,经常会问这个z please,那么杨哥作为2023年的重磅的新视频,所以我两个都讲,六跟七都会跟你说清楚。那么接下来你所需要掌握的就是它底层数据模型的变化和迭代分别是什么,优缺点是什么,怎么进化成紧凑列表的,就这要东西好。
10:01
这张图务必拿下,请作为你的个人笔记保存到你的百度云盘。好,那么在这我们也要复习一下我们之前讲的red新特性,看看数据结构的变化。那么弟兄们还记不记得我们在小白篇说过这么一个入门篇,它的新特性,其中啊有一部分是这么讲的一个重点,现在来复习一下。多AF支持秒懂了吧,RDB和AF config命令的增强,那么也就是说你看config set get可以一个两个三个多个命令来进行处理,OK,那么也就是说啊,比如说现在我们之前是不是学过,比如说看F。Get,假如说啊在这块是叫port,那么PT多少,是不是6379,这么说没问题吧,这是不是以前只能是一次一个命令,那么现在它的意思就是说一次可以可以给你多个命令啊,那么来假设max memory,大家请看啊,以前呢?
11:13
KVKV一次一个,现在可以多个KV同意一次性给你拿出来多个啊,这个都是一些小毛病,无所谓。那么接下来啊,同学们lower,重要的我们要复习的就这货list pack紧凑列表的调整,它的意思是list pack用来替代了压缩列表,就是从RED7开始z list,它呢,基本上没有相关的配置了,你可以无视,但是呢,从六到七,它为了一种过渡性的兼容,它在里面配置里面还是保留了压缩列表相关的配置,但是呢,只要你去做压缩列表相关的配置,默认他都会认为你动的是紧凑列表的配置。再次强调七以后的新特性,压缩列表已经被紧凑列表所代替,也即z list被list pack所代替。好,这个就是我们对应。
12:14
的心特性,那么最终回到我们现在的这张章节,那么就给大家呢,完成了第一步走,然后接下来分,那么就是挨个挨个一个数据,一个数据类型的过怎么演变到每种结构分别是什么,完成对应的考试要求和数据结构面试要求各位同学做好烧脑的准备,我们继续。接下来源码分析,我们来做一下这个总体大纲,从我们的程序操作,从hello word说起来给大家呢进行讲解和介绍,各位亲,Set hello word最简单的一个字符串的操作。T和value,我相信这条代码一打谁都懂。那么对于我们一个RA程序员,他写代码的时候脑子的底层思维是什么样的呢?老爷,我们写了那么多命令,常用的五大数据类型,我们台面上我们操作的是string、哈希、list set z set,台面以下这五大数据结构分别是这些对东其实就分为跟人打交道的和跟机器打交道的。
13:28
换句话说都清楚我们嘴巴上说你你的a list对吧?这是我们程序员,但底子咱们操作的是不是object数组,所以搁到这,弟兄们我们来看看那么上帝视角最右边的编码他是如何出来的,就这个啊,我们讲过了,从服务器加载进内存形成一个red分布式数据库,而一个数据库真真正正的是KV建止对字典,而每一个字典KVKV,每一条KV就是一个哈奇表,每一个哈希表里面存着就是一个dictionary entry实体,而每一个实体对应着就是我们些类型。最右边啊,请看这个章节的说明,是最右边的编码,什么东到这些,什么raw in,什么link list等等等等。那么结合到这,我们大家要清楚啊,Write object操作底层的定义这堆堆它又是来自于哪儿呢?所以给。
14:29
各清请看我们在RED7源码里面有个server.h2,就是服务器一加载的时候,大家请看,实质而言,你操作一个list,那么这比如说叫链表啊,当然这是这张图是RED6,那么到期了以后说人话,大家看这是不是有link list,这是不是有一种东西叫list pack,这是不是有一种东西叫skip list,我们这儿先说好,C语言里面这个server.h就是你服务器一加载的时候,相当于这就定义了我们Java里面的一大堆常量。
15:06
Key value key value,比如说像404啊,等于not found,那么在这块它就告诉你,如果是这种编码,你看def DeFine是不是叫常量声明嘛,它定义的话就是K是多少,值是多少。好在这儿因为我们后续源码分析会经常出现这样的大写的这样的产量,我就不再啰里啰嗦的说从哪来的,一开始server.h red服务器一启动的时候就给你声明好了,好,那么同学们了解这些以后,咱们从helloard开始说。第一个,每一个建制队都会有这么一个字典实体,接下来我们来先看看这个编码,然后咱们再回到这个笔记,大家请看。我这写了个set hello word,那么type hello,它告诉你是个string,没问题吧,但是呢,我们接下来我们来进行一下编码的一个翻写,Objectco hello,也就是对我们这个key来进行一下更深层次的底层源码的翻译,那么这个时候就是什么objectcoding hello,请看好。
16:16
它叫什么?哎,Embs tr,哎,这啥意思呢?首先emb的意思代表内嵌嵌入式的意思,那不对啊,杨哥,这个我们写个hello word这么简单呢,这个hello,这个key不就是我们介绍的圈类型吗?怎么圈类型会变成一个什么叫B卷?那是不是有点类似于就是面上操作的是string底子,还有这种东东呢?那么请问是不是只有这么一种?它会不会有其他种。明说了,死菌的编码格式有三种,下面请听杨哥一一道来,来,我们搁到这,以这个为例啊,Red是TV建筑队,每一个都有,这个不说了,里面。
17:07
指指明定义了key和value的指称。我们这个字典实体KV建制对K红色框框value next是指向下一个dictionary key是个字符串,但是red没有直接使用C语言的字符串数组,字符数组恰中括号,而是存储在red自定义的SDS当中,那么也就是我们的动态字符串value既不是直接作为字符串存储,注意这个word是不是就是我们的value。听好这句话,它不是直接作为字符串存储,也不是直接存储在SDS当中,而是存储在write object当中。因为我们前面说过,你在这儿要操纵这么多多多多的数据,Ready,它要做高度的抽象封装,你在面上你会说这个叫string,这个叫哈希,这个叫list,但是我底层数据结构千奇百怪,各种各样,中间我们统一如前面所说,中间这块承上启下的。
18:22
就封装成了一个统一的write object对象来进行映射和处理,所以各位同学看一下,这实际上五种常用的数据类型的任何一种都是通过right object来存储的。那么同学们,我们搂一眼你干了一个KB电止对key和value指向下一个,那么答。首先这个hello,这个K是个字符串,它叫存进SDS里面。那么SDS我们后面聊是内部的一种字符串啊,然后呢,这个key就像一个Java对象的引用一样,是不是要指向一个value,由这个key,因为我们都明白吗?Get hello,是不是就可以得到这个word,所以呢,由这个key我们就要得到这个value,而这个value。
19:14
就是统一封装成object对象来存储,所以其实质而言,我拿出来的是个red object,搁到这,我们大家就会明白了,你的字典实体和底层的KV建制队以及对应的red object是如何一一映射。基于此,我们就会明白你说这个key整体而言是个什么类型。它就是死猪类型,这个没错,但是为什么对这个hello进行objectco的时候,他会干出来这么一个in doing是什么东东呢?那么这个就是我们后面所要给大家介绍的red对应的字符编码。在介绍讲清楚red的string类型的底层结构编码之前,我们要搞清楚这个结构编码它哪来的,怎么会变成这个?还记得我们前面说过这个吗?你面各种类型,下面各种数据结构中间这条线,对不起,只有一个一,那就是right object。所以为了讲清楚结构编码体,我们先要说一下red结构来,弟兄们都清楚,为了便于操作和write数据转换,我管你上下有多少种路类型,我统一封装成这个,那么这样所有的数据类型都可以相同的形式啊,就叫re接口在函数间传递,而不用使用特定的数据类型。另外为了识别不同的数据结构,注意write object定义了type和encoding字段,对不同的数据类型加以区别,也记啊。
20:59
我们在这儿。
21:02
我们在这写set,看见问见r push对吧,LIST123,然后呢,H set这块USER03 ID是多少?C name是张三,A是25等等等等,这是string吧,这是list吧。这是哈希吧,人家怎么知道的,因为最底层而言,我都叫object,那凭什么我用个type对吧,给我一个key,比如说list,我就知道呢,是在我们的right object。内部它有两个东西,一个叫type,一个叫所以right object就是这些具体数据类型的老爸。附类,它呢,就隐藏这些具体的类型信息,反正我们套传都叫write object,你用的时候你再去看这个对象里面的type encoing l ru re count和指向实际数据结构的支称,那么在这都给同学们写好了注释,接下来具体情况漏言来详细了解red object各个字段的含义,弟兄们他在s.H这个下面听好type。
22:27
当前值对象的数据类型。我们在数据里面的传递都传同一个对象,叫object,至于它里面是什么,实质而言,Red在底层解读,就它这个对象里面的这个是个什么东东。四位的type表示具体的数据类型,那么就是string、哈希、list等等。第二个including,当前对象底层存储的编码类型。也记我们刚才给大家所演示的什么object including这个key,它具体的编码类型。好,大家请看四位的encoding表示该类型的物理编码。
23:08
同一种数据类型可能有不同的编码方式啊,注意明说了数据类型叫什么?这个哈,叫string没问题,但是它的这个string啊,Type hello,大家请看hello,它叫数据类型驱类型没有错,但是它的编码方式我们常用的它有三种,那么来比如我们的驱类型就提供了三种,分别叫int inb string,大家看inb string是不是见过了,还有raw,那么这个时候这个coding就代表的是当前值对象底层存储的编码类型,那杨哥有多少呢?我们翻一下官网的源码,有这么多。OK,所以你面上你操作的是某种类型,但是某种类型它的物理编码是有这么多的,就由这个字段来决定,那接下来LRU,前面我们讲缓存淘汰策略的时候说过吧,所以在这个对象自己身上就带着一个LRU和瑞LRU最近最少使用count,就代表有多少人引用,有没有点像我们讲过的Java虚拟机知识,每个对象被引用的次数,是不是讲过一种东西啊,东西叫引用计数法,它有点类似LRU字段表示当内存超限时,采用L算法清除内存中的对象,Count表示对象的引用计算,哎,那如果说现在有很多人引用我是不是也不容易回收啊?那最终PT2指针指向真正的底层数据结构。
24:52
哎,那么来,弟兄们helloard见过了,那么现在我们来看看set age17来体会一下什么叫同一种数据类型有不同的物理编码方式。好,同学们请看杨格操作,现在啊,我们大家都清楚set hello word,这个大家绝对不会有任何问题,Get hello TV键直对,那么来type hello,什么类型?String,那么现在这个hello是string类型,我明白了,那么它的物理编码方是什么呢?那么object including hello,弟兄们enb没问题吧?那么接下来杨哥set age17回答我可以吧?那么type age什么鬼还是此种类型?那这个时候请看我们执行一下我们的A级变成了什么in。
25:51
哎,所以说你面上操作的都叫此菌,但是噪更深层次的,它是有三种物理编码方式啊,那么另外一种待会我们也是啊,基于此,弟兄们对照着我们write object这个对象的结构题,类似于Java一个类,它对应的引用我们可以得到来sat a时期,你明面上你是执行了这么一条命令,底层就会给你生成一个red object这个对象,这个type就是string including,就是in l ru river can,请看。
26:30
对应的type类型,Co编码,Ru最近被访问的时间,Count等于一,表示当前对象被引用的次数。PTR,那么就是value值是多少,当前就是17,它指向一个真实的数据结构类型,也即我们这的17最终对外暴露就是个rob。接下来我们说一下传统的五大经典数据模型的结构解析和底层源码分析开工。在进行这五大结构的源码分析之前,我们需要完成两个最重要的偏向知识的介绍和一些分支知识的概述。首先,各个类型的数据结构和编码映射的定义,大家呢,看这有个object.c,下面呢,它有个字符对应的编码,你的编码扣的以及各种产量的转换。
27:30
Row raw in哈,Table quick list list pack、紧凑列表,Set,整数结果集,Skip list跳表,Inbound string,嵌入式字符串,还有我们的STEM,由于我们说过现在外面考的和目前主流常用的前五大数据类型,那么对于说string这样的类型的底层源码分析,我们暂时不展开,如果到后面外面考了我们2024年再说这块就告诉你了,产量相关的定解好,那么大家呢,了解一下就OK。前面我们也说过字典啊,服务器启动以后,Object c这个也就是red object对象一个常用的标配辅助变量,很多常量的东西都定义到这,最终落地到C元的,它要出来一个对象来包罗底下千奇百怪各种分支的对象。总体而言对外提供好,这是第一个,第二个。
28:30
介绍一个命令,也记我们的debug object key东东是个啥呢?来,同学们,我们再看一次s age17,好吧,那么来各位亲,我相信啊,S age17这个命令对大多数同学毫无压力,会操作了,那杨哥我们打开看一下。都了解我这一个key,一个value,最终底子是封存的一个write object,放心,不会浪费你时间。这个东西前面讲过,我不会讲两次重复的知识,接下来复习一下杨哥这个type string,晓得type age是个啥词中类型。
29:17
那这个coding物理编码是T,好,我们前面是不是讲过一个东西叫objectco age,它这是樱桃,哎。以前不是叫什么烟,嵌入式的。字符串,嵌入式字符串怎么现在又变成int了?好,这是第二个小知识点,第三一个l are you,上一节上一章我们讲过缓存淘汰策略,我也知道L是最近被访问的时间。最近最少使用,它就会被淘汰清除来和print数字等等,那杨哥这两个眼见为实,那这两个我没见过呀,这个数字是指向我们一个具体的值,这个倒好说,前面讲过,Object源码也说过了,求杨哥解析一下,那么来上述解读我们来尝试一下,接下来就要学一下这个命令的子命令,或者说兄弟命令啊,那么就是debug object key,好,那这个时候。
30:31
看一眼register debug object命令是一个调试命令,Debug所有Java程序都懂它不应该。被客户端所使用,哎,不让用,那我这个时候我偏要用呢,它的公式叫debug object key,来,同学们deb个object k k是哪个age?一回车,哎呀呀,直接报错,那杨哥你讲个命令都讲不清楚,用了用错了,是不是你讲错了,对不起,请看提示啊,A级别它不是异常,这是直接A,他说了错误的使用第八个命令是这个命令呢是不被允许的,和我们的笔记如出一辙,他不应该被客户端所使用,也就7.0以后,他不希望你在客户端来debug某个key啊,他把它关了,他说如果这个enable debug command这个选项被设置为local,就是本地调试开启激活,你呢才可以用。
31:37
否则的话,对不起,你是不可以用这个命令的,所以呢,它直接是说,如果你需要把这个选项设置开启激活,请你去调你们的config file,然后重启服务器。明白了吗?所以在这儿,那杨哥这个跟我们有什么用呢?那么来吧,我们这个命令现在请告诉我啊,我们叫can get,这个选项叫enable deb command1回车弟兄们,什么鬼,No,所以说这个debug它默认出场。
32:13
Debug k这样的命令它是被封禁,它是被关闭的,那么接下来啊,为了给同学们更加深刻的讲清楚Li ru和riverer,看,包括后面的这个值,这个倒好说,直线关键要讲清楚这两个的话,比如说杨哥你长期说的什么缓存淘汰策略,那最近最少使用他肯定要记一个时间戳呀,记在哪就记在这个right of对象里面的LRU这个字段里面。好那么来弟兄们,我们前面呢也强调过l object的作用,这是不是有个东西叫ru 24位对象最后一次被命令程序访问时的时间与内存回收为有关引用计算等等。好吧,那么在这块弟兄们允许我先把我们的RED7关掉,重新修改,然后请看啊,现在呢是没有开启,所以说它的值是no,你用这个命令就会报错,那么接下。
33:14
来给它打开VM,我们的myredred7.com氢大家眼在133行,这大家看默认是不是直接给你关闭好,原有的我们不动,直接给你开启,注意它不是从no变成yes。对方说的很清楚,直接告诉你我们的错误是什么鬼,大家看一下啊,需要把这个选项设置成什么local,所以说不是从no变成yes,而是变成local OK,好,同学们保存退出,此时我们再启动我们的red连进来啊,那么现在大家请看get age是多少?17岁来吧第八个object,来个age看好之前是报错,我们现在开启以后啊,已回车什么鬼?是不是出现了value at re count,然后呢?Co,然后呢?等等等等这一大堆命令,这波没问题吧?好,那么同学们其中有一个东西是不是叫LRU?
34:33
它是不是就记录了你本次所使用的时间戳,那么它内部底层计算了以后就发现这个是不是时间间隔上很久很久很久没有用了,比如说单前系统时兆已经到九了,而你这个才到一,那对不起,可能下次内存淘汰就先把这个A级给干掉,OK,当然啊,现在我们看TT它呢是永不过期,我们没有设置,那么再来set k3V3兄们没问题吧,Debug object k3弟兄们请看。
35:11
这个时候我们的指数又发生了变化,那么接下来就要给大家介绍介绍这几个东东是啥样来吧,我们开启之后看f get干嘛?是不是就是我们前面这一大个字段来,弟兄们现在是不是叫enable debug command get这个选项如何?是不是变local了?那么所以说我们打开以后,弟兄们把它从no变成local,直接就出现了对应的这些值来吧,Value at,俗称什么动道内存地址0X是不是16进制了count引用次数,那么这个呢?可能比如说某些变量,这个T它被很多人引用,那么引用一次就加个一,那么including,这个叫什么?物理类型编码,大家请看我现在的编码是不是叫嵌入式的什么字符串。那么来我们之前。
36:12
看过的这个age大家请看,这个时候我们的编码是不是叫int OK,好一回事,其实这个就是什么用debug调试red key,它某一个细节上面的相关的明确的指标参数,大家请看最后这个叫sir长度,序列化后的长度,注意啊,什么化后的序列化以后的不是它的真实长度啊,因为它为了RDB文件,那么它不是真正存储在内存的大小,会对字符串做一些可能的压缩,以便底层优化,最后r ruu记录最近使用的时间戳好那么同学们假设啊,我们现在再搞一次K3,上次是不是9834,那么现在我又回车,大家看1419983414199834好,这个时候这是什么?我们刚刚第8UG的,此时我再get k3,告诉我是不是现在我又用到一次K3了,那么大家请看时间戳是不是九。
37:12
569834啊,时间是不是往前记录下了,最近被调用了这次时间,那么好,我以后就拿这个时间间隔来作为我的淘汰内存的依据,假设它设置了过期时间,或者我们到最后要不得不压缩我们的内存的话,那么这些就是我们的什么记录最近使用的时间戳好,那么同学们。请看这个时候IRU的I的值是多少?五这个是什么意思啊,叫空闲时间,哎,那么这个时候数字越大是不是说明越空闲?那么来请大家再看啊,现在是不是get k3,我又用的get k3 get k3get k3好几次用了吧,我们再来看看变成多少,是不是使用的比较频繁了,哎,所以说在这块我们就会明白,原来write封装了这个write object的对象,它底子啊,就是记着每一个K上面有这些关键的参数来进行对应的数据的缓冲,淘汰,淘汰等等等等各种指标参数的依据就来自于这儿,OK,好,那么同学们,这个就是我们第二个命令,那么搞清楚,一产量映射表,二,真真正正明白了我们的red的结构,12345,那么把这个write object这个对象整明白了,你。
38:36
就会明白,底层再怎么变跟你没关系,无非整过来整过去,也就是常用的这五个,最多再加个STEM,对你而言都叫object,它里面就分为类型。具体的物理编码类型LRU24位对象的最后一次被命令程序访问的时间与内存回收有关,是不是就是我们前面讲的软缓存的淘汰策略?然后引用计数为零的时候表示不被任何对象引用,则可以进行垃圾回收,最后指向对象的实际类型,最终类似于我们加入的一个对象,出现一个ru rob以及red object结构体封装,那么每一个参数给同学们说的明明白白。
我来说两句