00:00
下面的话呢,说对象的创建和对象的内存解析,这呢是咱们通过这个强化的时候呢,说到的问题,典型的代码,这我就举一个例子了哈,就比如说咱们造的这个person,这叫P1,等于new一个person,这是造了个对象,然后呢,我这个P2啊又new一个person,这呢也是又造了个对象,但是这样person p3p1,这呢是不是不能叫新创建了一个对象,哎,这要注意哈,说没有新创建一个对象,跟我们前面讲数组讲那个赋值和赋值,哎,当时这个套路是一样的啊好,那具体这块说明呃,咱们提到了,说如果你要是创建了多个对象啊,那就大家呢各自拥有一套这个啊类的属性,咱目前都没有涉及到study的问题啊啊,那就意味着你有一套,我有一套,我把我的这个呃,P2的属性改了,P1呢,不会改啊,而我们这个P1和P3呢。
01:00
其实是相当于共用了一个对象实体,哎,共用一个堆空间中的,哎对象实体,哎,这个大家要注意啊,啊这是这个问题,你看这个粘过来它就少个括号了啊,有时候它就会这样行下面的话呢,就是关于这个内存的解析,咱们刚才呢,考察这条问题的时候呢,也又让大家画了一下,昨天呢,咱们画了一个图,诶我把这个图呢就粘过来,哎粘过来就可以啊,就涉及到这个P1P2和P3的问题啊行,这个大家呢,不熟的话,下来再画一画,PPT当中呢,我还有其他的几个以前已经画好的,大家也可以对照着看看这里边的代码,自己画一画,哎,要能够画出来啊行,下面呢提到一个匿名对象,这是咱们昨天没有讲啊,这算一个新知识,一会儿咱们复习完以后呢,再来谈这个事儿啊,那么这个内存图呢,咱们画出来了,在这里边呢,咱们相当于是一个补充了哈,就是。
02:00
到目前为止,咱们关于这个内存的一个结构,这个Java虚拟机啊,咱们这个新程序啊,Java源代码咱们第一天讲课也提过啊,源代码编译以后呢,生成的叫自节码文件,这都还记得呢,是吧?啊下一步呢,咱们是叫解释运行啊,咱们前两天呢,都是在命令行Java c Java去执行的,现在呢,在eclipse当中啊,点右键rise,相当于这两个过程呢,就给你一下子就都完成了,但是你要注意呢,它仍然是有中间的,先编译后运行这个事儿。啊,这要注意,嗯,我们看一下在这个nay navigator啊,比如咱们之前写的这个代码,像这个D08昨天写的src呢,是咱们存放的具体的代码了,那这还有一个bin b,你打开看到是不是点卡文件了,哎,就是咱们呢,是直接在这个右键直接run as,实际上这里边呢,也是两个过程,先编译以后运行,那编译以后生成的码文件呢,就在上边啊所以你你比如说诶是不是就省了或者怎么着了,没有,仍然是两个过程啊,仍然是两个过程,那么这个内存这块解析或者叫加载内存的事儿,是出现在编译时候还是运行时候。
03:21
运啊果真还确实有不清楚的,我们现在呢,在内存中说啊,你这个变量放的站那个放的对,这是讲编译的时候还是运行的时候,运行运行的时候啊,你想编译时候呢,编译完不还是硬盘中的一个文件,运行的时候呢,我们才把这个文件,它实际这对应的是一个类啊,我们说自源码文件,这不都对应的是个类嘛,我们才把这个类呢加载到内存中啊这个时候呢,我才给你去分配内存空间的啊这要注意啊,那把这个我们写一写,就是编译完源代码以后,呃呃源源源程序应该叫啊以后呢呃生成一个或多个自节码文件,然后呢,我们呃使用其实呢是GVM中的啊类的加载器啊和解释器,哎,对这。
04:21
给我们生成的这个自解码文件啊,进行解释运行啊,那这个解释运行就意味着呢,我们要把这个呃,自解码文件对应的那个类呢,加载到内存中了啊,意味着需要将自解码文件对应的这个类啊加载到内存中啊,然后就涉及到内存解析,诶这个先明白这个事儿啊,所以说这个内存解析这块呢,是在运行的时候,就是我们执行这个java.exe命令的时候才出现的,前面都不涉及到啊。
05:02
行,那就这个事儿了啊,那这个事儿的话呢,我们看看这里边儿内存的这个结构。哎,内存的结构,那后续的话呢,咱们会讲一个技术叫做GVM,那GVM里边呢,就涉及到你不是要加载到内存吗?那你得告诉我怎么加载,加载到哪,内存长什么样,诶这呢就涉及到一个内存的结构,这个呢大家可以关注一本书呢,叫GVM的一个,GVM的一个这个开发规范了啊嗯,GVM的一个叫规范啊,这个规范就是关于GVM的书呢,在市面上其实还是屈指可数的,就那么两三本可以看,一个呢是官方的,另外一个呢是叫周志明的吧,啊这个书啊,可以去看的就这两本,大家刚开始学,现在还没有必要去接触,到后期的时候呢,投币之前我们也会讲这个课啊,那在这个GM当中呢,就提到了内存的这个结构了,那我们主要关注的是这个叫运时运行时这个数据区,它把这个内存呢,分成了这样五部分,哎,咱们在Java基础这个阶段,或者我们平时开发中用的话呢,主要呢,其实也就用到这样几个啊。
06:14
哎,第一个呢,叫做虚拟驿站。哎,这也就是我们俗称的站啊,极为哎,平时提到的这个站结构啊,这个本地方法站呢,这个不是啊,这是一个native的method stack,哎,甚至我们涉及到底层要调C和C加加的时候呢,调的一个站结构啊,这个不用管,哎,咱们平时提的呢,都是它,那么这里边重点需要大家能够记住的啊,我们将局部变量存储在。哎,这个暂解播中,诶这个大家呢,记住咱们回头呢,在写这个内存解析的时候呢,诶你就知道谁放这儿了啊,这是第一个,然后下个呢,就是堆啊堆就是咱们平时说的堆啊这个那堆的话呢,我们说将呃这个呃。
07:10
用出来的结构,嗯,然后呢,加载在这个对空间中。啊,那典型的话呢,哎,我们这个new出来的结构。哎,就是比如这个数组,哎,New的一个数组,New的一个对象啊,这是在对空间中,那尤其需要注意的就是我们,嗯,这个补充啊,就相当于是我们这个类的这个属性。啊,或者准确说应该叫对象了啊,因为你加载的是一个对象了,对象的这个属性啊,我们说呢,加载在啊这个堆空间中,哎这里呢,对也强调一下这个属性呢,咱们目前哈,没有涉及到static的问题,所以这块呢,我先写个叫非static的啊这就相当于我们这个更严密一点,哎,Static的话呢,不在这儿,Static的话呢,在这个方法去。
08:11
那方法区加载什么呢?就是类的加载信息,呃,像我们整个这类的这个结构,还涉及到一些方法呀,代码块啊等等,它都是在方法区中加载的啊,类的加载信息,然后呢,叫常量池,就这些常量还有静态域。或者叫静态变量,哎,这就涉涉及到这个静态呢,就是我们说的是static的结构都是在这个方法区的,哎这块呢,大家去关注一下。嗯,你有了这样的几个这个标准以后,大家后边呢,你谁画这个内存结构,谁该放哪这个你就清楚了,就是参照这样的一个标准就OK啊。
我来说两句