00:00
在说完战的基本存储结构,我们说叫战帧,以及呢,我们也熟悉了一下站的运行原理之后呢,咱们来看一下战帧当中又有哪些东西,就跟咱们说大象呢,现在已经看到细胞了,那么细胞里边都有什么呢?诶,细胞壁,细胞质,细胞核,呃,线粒体呃,这些结构是吧?那我们看看这个对于战争来讲,它内部又是什么呢?我们说呀,战争的内部又分成这样的一些结构。哎,这个图呢,也比较清楚的表达出来了一个战争,咱们说对应着一个方法。一个战争的入战,对应着一个新的方法的调用。一个战争的出战,对应的这个方法执行的结束啊,那如果有异常的话呢,这个异常还会返回给这个将这个战争或者调用这个方法的这个调用者,比如是方法二调的方法三,那么三如果有异常未被处理,那么这个异常呢就抛给二了,然后二呢,看看它是否处理啊意思再往下执行,OK,这呢是我们说的这个战针的单位,那么这个战针它呢是需要有大小的,战针的大小呢,实际上就取决于它内部的这些结构的。
01:14
多少或者叫大小了,那它内部都有什么呢?我们说战争的内部呢,分成了这样的五部分结构。分别是局部变量表啊,叫local variables,有时候呢,我们就直接叫LV了,不是路易威登啊,是LV,是这个LV哈,然后操作数站opera stack,也称作呢,叫做表达式站啊,大家在网上你看一些帖子的时候呢,这两个词呢都可能会用,有的时候呢,也叫做操作站了,你知道是一个意思就行,然后下一个呢,叫做动态链接啊,因为呢叫dynamic linking啊,直接翻译过来的动态链接,有时候我们也承诺呢,叫指向运行时常量池的方法引用,诶大家你看一些帖子或书的时候呢,可能叫的是这个名,那这个呢,动态链接是从它的这个。
02:05
这个这个叫什么形上来看啊,它这个链接了,然后呢,呃,它的实质上呢,其实就是这个事儿,所以呢,是从两个不同的角度对它进行的一个命名,嗯,就像我们说这个static,它修饰的这个代码块,哎,你要从这个形上来看,我们叫静态代码块,就代码块加了静态码,叫静态代码块,那它的作用呢,是用来初始化的,所以我们也把它称作叫静态的初始化块。哎,叫初始化块,哎,就跟我们这有点类似啊,是从两个不同的角度来命名的,哎还有一个叫做方法返回地址叫return address,诶返回地址也称作呢,就是方法正常退出或者是异常退出的定义,哎咱们说了方法返回不就两种情况吗?要么就是正常退出,要么就是异常退出,诶这两种情况啊,有一个异常表啊,然后后边呢,还有一些这个附加的一些信息,诶应该说完整来讲是有五部分的,这大家注意啊,你看很多的这个书上呢,等等各个地方写,可能就写四部分,那就是前面这四个,最后一个附加信息呢,可能就忽略了,那有的时候呢,确实还会有一些附加信息,所以完整的要说的话呢,应该是有五部分,那对应的这个名字呢,也建议大家呢,就用我们括号之前的这个叫法,在网上呢更通用一些。
03:17
啊,像以前我最初学这个张亚逊机的时候呢,呃,确实也困惑过啊,就是你会发现呢,这个网上呢,尤其是帖子大家学GM的时候,呃,一方面呢,可能会觉得稍微难一点,这个难呢,主要是在于它的这个理论偏多一些,不像咱们写代码,你调个方法呃,用个框架一搭配,呃这个一搭建好以后,然后做一些配置,哎,就可以用起来了,Bug呢有我们调一下,对它的内部呢,运行原理诶清楚一下就OK了,那理论的话呢,往往没有实践的时候会看着稍微的难一些,理论偏多,这是其一。然后第二个原因呢,还是因为现在呃网络当中的这个信息量太大啊,其实很多这个,尤其是像GM这块帖子错误的信息很多,之前我也参照了很多的帖子,就是咱们作为成员开发的话呢,其实你遇到一些问题,我们这个考虑的话呢,就是比如百度啊,或者你去这个翻墙用谷歌呀啊是吧,还有我们这个staf flow这样等等一些网站上,我们去看看它的解决方案呀等等,那其实呢,这也是我们主要的。
04:18
一种解决问题的方式。当然呢,大家不要觉得说用百度觉得很low啊,那你能够很好的用百度或者翻墙这样的一些平台把这个问题解决,其实它绝对是人的一种能力啊,诶这种能力呢,也非常重要,就解决问题的能力,不管你是怎么解决的,对吧,这个能力很重要,嗯,好了,那么我们这个翻回来啊,翻回来再说这个网上这些帖子,在虚拟机这块呢,帖子错误的很多,所以呢,大家呃,这个你怎么去辨别呢?嗯,有困难,你只能是多看一些,然后呢,你自己还得去把这个知识得梳理了啊,你不能他说是什么就是什么啊,是这样子的一个情况啊,那刚开始学习的时候呢,也确实遇到过这样的一些困惑,所以呢,导致大家就会觉得说啊虚拟机这块好像挺难的,其实呢,真正你要是呃理解透以后呢,它其实没有多难哈,你现在你学个数学啊等等,那这还是要简单很多的是吧,你像他这都是现成的,又不需要你自己去探索。
05:15
探索都是人家探索好了,你只需要了解一下,或者熟悉他人家是怎么设计的,怎么做的啊,你说一个垃圾回收算法对吧?嗯,你不用你去设计了,人家设计好,人家告诉你说我是这样设计的跟前的之前的这个算法比有什么呃优良的特性,诶你一熟悉啊,然后一看人家这个过程OK挺好是吧,确实呢,好了,为什么好谈一谈细节,呃,其实你是轻松的啊,哎,这个大家诶应该能理解。这呢就是我们说的这个战争当中存储的这五部分,大家需要记住它啊,需要能记住它,然后红色的呢,是咱们说的这个战争当中咱们主要关心的结构,一个呢叫做局无变量表,一个呢叫做操作数战,这也是咱们下边啊,咱们这每一部分呢,都要展开来讲啊,重点讲的就是局变量表和操作数站啊这两个结构,那我们刚才也说了这个,呃,昨这个前面讲的哈,说这一个。
06:07
站一个站这个它可以设置成固定大小,或者说是可以动态的呃,来扩展的哈,呃,总之的话呢,如果你要是满的话呢,它可能会这个,如果你要是固定大小满了,他就报sta warf flow了,那么这个战到底能放多少战针呢?能放多少战针呢?是不是取决于我们这个战针的大小啊,你要战针小了,我就能多放点,你要战针大了呢,我就只能少放点,这个也很好理解对吧,你一个瓶子里边,你想装核萄装十个,你要装葡萄呢,可能能装30个,因为这个核桃大,核桃比这个葡萄大嘛,对吧?诶这个战针也就说呢,战针的大小。战争的大小,决定了我们这个战当中可以存放多少战争。啊,然后这个战争的大小又取决于我们战争内部的这个结构,那主要呢,是我们的这个像局部变量表,当然这个操作数战啊也是啊,就是他们的这个大小,其实是重点影了我们战争的大小,那战争的大小呢,又重点影响了战当中可以存放战争的个数的多少,以及呢,大概什么时候会出现异常。
07:12
诶,会出现这个sta flow是吧,这个大家清楚啊,行,这呢是针对一个展,呃,一个这个线程来说的,那如果要是多个线程的话呢,那也很好理解,那好几个线程,每个线程呢,各自有自己的这个战,然后站里边呢放战针,每个战争里边呢,也有好几部分结构,诶这个大家就清楚了,OK啊清楚从整体上来看,战争里边都有什么,要记住它。
我来说两句