00:00
那下边的话呢,我们给出一组代码,看看这个代码的话呢,它是在内存中怎么来解析的啊。这块的话呢,我们换一个这个位置啊。在这,那我写相应的这个代码,我们看看它的内存的一个解析情况。啊,这块我就来写了,那我写这个int型的数组啊,A等于new一个int型的数组,数组呢,初始化我们说有两种方式,那这个呢,我就先写成这种叫静态初始化。对,先看它怎么加载的,然后呢,我再写一个string型的数组A21啊,用一个string类型的。哎,这个位置呢,我先写上一个次。接下来我这个A1,我对它的第二个元素角标是一的负一个值。哎,附一个,比如叫刘德华。哎,附上了,附上以后啊,比如我再附一个啊A21这个写一个二。写一个这个,哎,张学友。
01:00
好写上这两个值,然后接下来我这个A21呢,我再写的复杂一点啊,我再new一个string,这个呢,我写成一个三。好,我们呢,来演示一下这样的几行代码在内存当中是如何进行分配和解析的啊,首先咱们这里边儿需要用到的一个是占结构。一个是堆结构。哎,这个我把它呢复制到下边这样啊,好,我们就用到栈和堆就可以了。那么在站当中,我们就按照顺序哈,一行一行代码呢去分析它,首先第一行代码这个结构呢,你看着挺简单,就一行,实际上它这个执行过程还挺复杂的啊。哎,我们这个AR2。现在咱们写的这个代码呢,都放在这个may方法当中了。哎,那咱们讲面向对象的时候,会说放在main方法,放在方法中的这个变量呢,都叫做局部变量啊。放在方法中的变量都叫求变量,现在咱们目前为止全都是在main里边的。
02:02
只要你看到这个变量就都叫局变量了,那局部变量呢,就应该放在站当中。哎,所以我们这儿左边我呢会加载一个变量,放到这个占空间了,叫AR2。好放在这儿了,放在这以后,那么我们右边呢,拗了一个结构。哎,New的这个结构呢,我们说应该在堆里边。只要是扭出来的结构都是在在堆里的啊,那扭出来以后呢,它这个数组的长度是三,所以我们自然而然的呢,我就插入一个长度是三的这样的一个,哎。这个结构了啊,而且呢,我们说在内存中它是连续存储的。所以我们就给它连到一起了,哎,我就放这儿啊。行。那么这时候呢,你这俩你怎么联系起来一个这样一个堆啊,诶我们说呀,这个堆空间的连续的这三个元素的这个空间,它会有一个首地址值。就是第一个元素这个地址值。这个首地址值的话呢,我们通常是用一个16进制的数来表示的,16进制咱们知道是0X开头的啊。
03:04
然后呢,比如说叫呃34AB吧。16进制的把这个地址值咱们付给占空间的A2,二,那就是0X34AB。那么占空间的这个变量AR2,通过这个地址值,它就能够找到我们堆空间当中的这个数组了。哎,他俩呢,就联系起来了。哎,就这样啊,这一行代码还没完事啊,我们的指过来以后大家知道,诶我们是不是赋值了。负的值是不是123呀。相当于这个呢,它是一,它是二,它是三。这就输了三个值。哎,就这样子的。实际上这个过程里边详细点说呢,他这个负123之前呢,咱们不是说过有默认值的情况吧。它其实呢,你要说详细的再说呢,应该是这样子的啊,他呢把这个对空间,这个空间给你开辟好以后呢,先给你附上的是零。
04:05
或者也不能叫先负上零,因为咱们说这个你这一排数下去没有,那那不就是因为我们每个二进制位不是零就是一。相当于他给你开辟完以后,像这是一个int int我们说占四个字节吧。相当于这一下就给你画了四个字节就给你了,这是你的第一个元素,在紧接着后边又四个字节又给你了,在后边又四个元素都给你了,那我们说每个位置不是零就是一,相当于默认的时候是不是就全是零了?对,相当于开始的时候,这时候算是有值啊,都是零,只不过哎,然后呢,你指过来以后呢,我们这个呢,显示的又给附上了一个123,诶也就是说这个时候呢,哎,我们再把这个零。哎,给他呢。删掉是吧。或者呢,给它替换掉,替换成咱们的123。
05:00
是这样的一个情况。那么到此为止呢,咱们第一行代码呢才结束。啊,大家理解一下刚才我的这样一个过程哈。行,那接着呢,我们再来看一下下边这个数组它的一个加载情况,那我声明了一个叫A21是string类型的数组,右边呢是new了一个string的数组。仍然是A21呢,我们在站空间当中去声明。A1冒号一下。接着呢,我们牛的这个结构仍然在堆里边去声明,长度呢是四。好,长度是四,我们又得插入一个表格,长度呢是四。这儿呢,我就放到这儿了。接着的话呢,我们锥空间开辟这个结构是一个连续的内存空间哈,然后它会有一个首地址值。
06:02
哎,这个首地值我们在这儿记录一下啊0X我叫一二啊AB吧。将这个手地值赋给咱们占空间当中。这个AR1。DNX啊。付过来以后,我们呢,通过占空间的这个地址值,就可以指向对空间我们这个数组的实体结构了。好,这行代码执行完了吗?算。还没完事呢,这是不是得有值啊?哎,咱们说这个默认值呢,是。Nur就是一个空值的意思啊。哎,就是这样的情况。那这呢,咱们可以理解为就是咱们第二行这个代码呢,算执行完了。好,第二行执行完以后,接着我们下边呢,通过角标的方式,我呢去调用这个数组中的指定元素了,先讲A211,我们这A21呢,找到这个地址,通过地址呢就指过来了。
07:07
啊,实际上呢,咱们说这个张话中说叫呃,去除了C语言中的指针,其实这也算是指针。啊,这其实也算一种指针,但这种指针的方式其实比C里边呢,要简单很多了啊。指过来以后呢,我找到角标识一的,也就是说第二个元素,把这个第二元素呢,做一个赋值。哎,这个闹。叫刘德华。当然肯定是写到里边了啊,我这里边由于覆盖不是不好看了,我就写到这了啊。这么大劲。这是刘德华啊,然后下边的话呢,第三个元素,哎,张学友。把这个干掉。改成了叫张学友。哎,注意我们这个改的是第三个元素哈,角标呢,跟这个第几个元素正好是差一个一的关系啊。
08:06
那么这呢,就算是写完了。啊,这三题写完了,然后再下边呢,我这个A21,我又扭了一个结构。注意大家以后呢,只要你见到new了,那就对空间中就重新开辟。就意味着我们现在是不是又重新又造了一个。对空间的一个数组是吧。常用的是三。我又造了一个,是他。然后呢,这个数组的话呢,咱们要想调用它,仍然是通过这个所谓的手机值值。哎,0X哎,比如我们5566啊。那么我把这个新用出来的这个数组呢,我又付给了这个A21。相不是相当于是不是把他的这个值给改了。他一开始叫012AB哈,现在呢,我把这个数呢,给它干掉了。
09:05
E没有了,没有以后改成了。5566。那既然你改了以后,那相当于原来我这个AR1指向这个数组的情况,是不是就没有了。现在这个指针就没有了。我这个指针我就不擦掉了啊,我还保留一下,我这打个叉。这其实是个乘号啊。拿来当个叉吧。哎,就没有这个指针了,现在呢,我们的AR1呢,它就指向了是上面这个接口了。啊,变了指向上面的这个结构,然后呢,接着上面的结构呢,我们是一个动态初始化,相当于这里边都是默认值是no啊。哎,这呢,就是几个这个闹的这个值。那这个代码呢,实际上到此为止就算是结束了。
10:01
那就是这样了,那就意味着哈,如果大家想,如果我要下一行代码呢,我写一个这个操作哈。我写一个呢叫cat简写了A21写个一问输出结果是刘德华吗?嗯,不是刘德华,是张学友啊。你一说不是,我还挺兴奋,来了个张学友,崩溃了什么呀,这个。I know?诶是诶就是这时候呢,你这个变量已经指向新的数组了。呃,原来这个数组呢,其实就没有了。或者准确的说,应该说这个数组。这个我们垃圾回收器就开始要判断了,我们这里边儿用的这个算法呢,叫引用计数算法。哎,当然这里边儿涉及到这个垃圾回收器有很多种算法啊,引用技术算法,就是我判断一下这个堆空间中的这个空间是否还有占空间中的引用呢,只过来。
11:08
哎,刚才呢,有个AR1指着你呢,说明呢,我们这个空间既然有指着你,就有可能呢,用户呢去调A21进而呢来调我现在的话呢,占空间已经没有变量指向我了。那就意味着你这个结构呢,哎,没办法被别人来调了。既然没有人吊你了。那就是一个垃圾啊,你要是垃圾那就会被回收啊,所以说呢,就是这个结构,它会在之后的某一个不确定的时间。这个咱们垃圾回收,你不是说一有马上就回收啊,诶他得在他有空闲的时候,哎,在一个不确定的时间呢,把它呢,就给回收掉了,这个就没有了。这个没有以后,那回头呢,比如说咱们不是讲过说变量都有作用欲吗?咱们这不是都定义在这个main方法了,那你这个main方法要是执行完以后,意味着这些变量是不是就没用了。这个变量没用,那我们就相继的这个A21啊就出战了。
12:03
A21出站这个指针是不是就没有了?这个指针一没有这个空间,哎,我们一判断是不是没有站,没有这个指针指向你了,是不是你也是个垃圾。所以随后呢,他也会被回收,然后下边的AR呢,也就会出战,他一出站以后呢,这个指针就没有了,进而的话呢,他一判断也是一个垃圾,所以也就回收掉了。相当于咱们整个这块空间呢,就全部清空掉。啊,这就我们说一个简单的啊,自动垃圾回收的一个过程。那我们现在关注的就是在这样一个片段的时候呢,占堆分别呢,都是放什么信息的啊,怎么去摆放的,这个就是我们说的一维数组的内存解析。这个呢,就是我说的一个典型的一个题目哈。什么叫典型呢?这里边有静态的,有动态的,有这个基本数据类型,有引用数据类型,然后还有呢,给它复制,再重新呢,又复一个数组的。
13:08
其实我要再多说一句的话呢,就是这里边其实我写的呢,稍微有一点点瑕疵哈。就是我们这个刘德华和张学友其实不是放在这的啊。这其实不是放在这的,如果有同学看过后边这个内容的话呢,就是我们后边呢,有一章给大家去讲。后边有一张呢,叫长类,到时候呢,给大家再准确的去说一下这个string,它是什么情况,这个string呢,其实咱们刚才那会提过,叫字符串常量池。它是放在那个常量池里边的,但是大家呢,先这样认为。啊,如果一开始我就给你讲一个特别准确的情况,特别精确的情况,这个你可能一下就晕倒了。啊,就像大家这个。小学的时候呢,你可能上一年级啊,老师告诉你说最小的数是零。啊,然后让你记住啊,考试的时候呢,说最小数几,你写个零打对勾对的,然后等到上到三四年级的时候,发现数还有负数是吧。
14:03
啊,还有负数,然后这时候说最小的数是几,你就写零,这时咔嚓就一个叉。对吧,就是大家这个认知呢,有一个有一个层次哈,就是大家呢,先这样去理解。啊,就是到后边呢,我们再详细的说,诶这个到底他是怎么着是吧,具体再细节一点变化啊。这呢,就是我们说的内存解析。
我来说两句