肥宅钓鱼网
当前位置: 首页 钓鱼百科

深入理解jvm知识点(jvm学习记录二)

时间:2023-07-01 作者: 小编 阅读量: 1 栏目名: 钓鱼百科

深入理解jvm知识点?虚拟机栈都知道是运行咱们方法的,实际上他的里面放了一个一个的栈针,同时每一个线程中都会独有一份虚拟机栈的内存空间。我们的每一个栈针中存放的又是什么呢?因为我们java代码在服务器运行,然而具体到jvm中就是每一个栈针。同时我们的局部变量表是一个有序的数组,他的第一个元素放的使我们的this,然后就是一次放我们的定义好的各种变量。但是这样命名却是也没有问题。

深入理解jvm知识点?1.先从最不熟悉的来,虚拟机栈虚拟机栈都知道是运行咱们方法的,实际上他的里面放了一个一个的栈针,同时每一个线程中都会独有一份虚拟机栈的内存空间这是为什么呢?可以想一想,如何不是每个线程独有一份,那栈里面的栈针(每一个栈针就是一个方法)谁知道是哪个线程的,jvm也不是上帝(QUQ).所以我们的jvm大佬在设计jvm的时候每一个线程都会有一根栈资源和对应的程序计数器(各自记录自己的垃圾代码执行到哪里了),下面我们就来聊聊关于深入理解jvm知识点?接下来我们就一起去了解一下吧!

深入理解jvm知识点

上一章大致介绍了jvm内存模型,下来接着各区的详细内容

1.先从最不熟悉的来,虚拟机栈。

虚拟机栈都知道是运行咱们方法的,实际上他的里面放了一个一个的栈针,同时每一个线程中都会独有一份虚拟机栈的内存空间。这是为什么呢?可以想一想,如何不是每个线程独有一份,那栈里面的栈针(每一个栈针就是一个方法)谁知道是哪个线程的,jvm也不是上帝(QUQ).所以我们的jvm大佬在设计jvm的时候每一个线程都会有一根栈资源和对应的程序计数器(各自记录自己的垃圾代码执行到哪里了)。

我们的每一个栈针(就是每一个java方法)中存放的又是什么呢?和我们写的java代码又有什么关系呢?考点必会**

1.局部变量表(又叫本地变量表,都是一个意思),在这里面存放的就是我们在方法中定义的一个一个的变量,包括了咱们java的基础数据类型和引用类型(这些变量又是怎么进入到我们的栈中的呢?这个会在下文中解释,不急!),具体的比如咱么定义的int类型变量,或者new出来的对象。。。

为什么需要把这些变量放在局部变量表中呢?(补充,局部变量中还存放着咱们的当前类的对象的this,相信大家都用过,但是如果是static修饰的方法既没有,因为这个东西是属于类的)。因为我们java代码在服务器运行,然而具体到jvm中就是每一个栈针(再详细的可以查看我们的字节码文件)。

同时我们的局部变量表是一个有序的数组,他的第一个元素放的使我们的this,然后就是一次放我们的定义好的各种变量。这里提到一个问题,我们的变量放在我们的栈中是要占用我们的虚拟机内存的,所以我们的栈会发生垃圾回收吗(GC)?显然不会的,如果我们的栈中方法太多,比如我们写了一个递归,但是因为种种原因(代码太垃圾),导致没有结束,那我们的栈中会因为有太多的方法而导致stackoverflower错误(英文不知道写对没有)。或者我们的局部变量表太大,比如我们定义了1万万的数组,往里面装满了值。(你认为会出问题吗?)*

2.操作栈,这个地方大家可以简单的记住就是用来计算的。他计算的又是什么呢?其实这个地方计算的就是比如:1 1等于几(不要觉得简单,你知道底层原理吗?)类似的东西,当然不会这么简单。比如我们定义了2个变量相加,我们会把a变量先压入操作数栈,然后把b变量压入操作数栈,然后相加,最后的出的数值出栈然后赋值给我们接受计算结果的比如c变量。其实就是这样(具体的可以反编译我们的的字节码文件进行查看,后文会详细介绍这个技能,当前等级不够还不能用这个技能!!!!!!)

插播一句,作者码子不易,看了觉得有用的大佬请点一下关注,后面会接着记录学习过程,和大家一起共同成长!!!!

3.动态链接,这个东西一看有点蒙。但是这样命名却是也没有问题。因为这个东西关联到了我们方法区中的东西(java8叫元空间),我们都知道,我们的字节码中的(没看过字节码的自己看看,如果不想看先忽略后文问有详细介绍)会有很多的符号引用,在我们运行java代码的过程中,比如我们引入一个int类型的变量a他的值是5,虽然我们写java代码的时候知道我们自己写了这一段代码,但是我们需要把我们的java代码转换成字节码,然后转换成机器指令(01010101.。),首先java代码转换成字节码的时候,我们就需要告诉jvm我们的代码逻辑是什么,我们先执行那个再执行那个,同时我们的代码在编译成字节码的时候,我们的类信息是放在我们的方法区的,所以我们需要一些符号引用放在我们的栈针中,这里会有一个问题,我们的数据不都有一个内存地址吗?为什么不用这个,而是用符号引用,我可以告诉你就是为了简洁,所以我们的动态链接就是指向的我们的方法区一个个符号引用,他们在运行时候会转换成一个一个的直接引用(在讲方法区的时候会详细介绍),为什么叫动态,因为他是运行的时候用的,还有的叫静态链接没他事类加载,初始化的时候用到,总结一句话就是:我们的类信息,包括类中的方法,修饰符,变量,变量类型,字面量,这些东西都是放在方法区的,如果我们的栈针中要用,就要去方法区中找,然而找的时候就是用的符号引用,就是相当于他们的序号,二这就叫动态链接,不知道懂了没有,后面会懂得(嘿嘿嘿),

    推荐阅读
  • 为什么晚上不能吃南瓜(晚上为什么不能吃南瓜)

    接下来我们就一起去了解一下吧!南瓜的食用时间并不没有严格的规定,早中晚都可以吃,但饱腹后不宜吃,因为南瓜淀粉含量丰富,本身肚子很饱的情况下,再吃南瓜容易反胃、烧心、呕吐、腹胀、消化不良的现象。还有部分体热上火的人群也不建议吃南瓜,否则性温的南瓜容易加重体内的热气,从而影响身体康复。

  • 煮汤调料包(熬老汤用的料包制作配方超级详细)

    第二遍熬汤然后这个汤来熬第二遍,第二遍汤的熬制3小时。将猪大骨捞出,用细网漏勺捞除料渣杂质,保留汤汁就可以了。这种老汤调卤后,用来卤猪头肉,卤出来的味道极其鲜美。注意:香料包,在第二遍汤里煮30分钟后取出不用了。觉得此文章对大家有用,欢迎各位朋友评论转发。

  • 喝青汁怎么反而胖了(喝青汁会变胖吗)

    作为一种保健饮品,青汁的热量其实是十分低的,而且其中还含有丰富的纤维素,可以增加饱腹感,还能促进肠道的蠕动,帮助食物的消化以及排泄,所以对于减肥有一定的帮助。

  • 苹果微信拍一拍是什么意思(怎么使用呢)

    下面更多详细答案一起来看看吧!苹果微信拍一拍是什么意思苹果微信拍一拍是相当于QQ上面的抖一下一样。是微信新出的修改微信号上面附带的一项功能。先检查下自己微信是不是最新版本,微信APP内点击我-设置-关于微信版本在7.0.13不是就点击底部的版本更新。双击需要拍的联系人的头像。底部就会出现一个你拍了谁的提醒,好玩的是也可以自己拍自己。

  • 如何用日历记账(教你记录时间的多种显示模式)

    下面就以为例教大家操作。在浏览器中搜索并安装到电脑上,此款软件绿色安全,可以放心使用双击图标弹出登录窗口,先添加账户,按提示操作,比如输入:账户名、问题等等,再去登录账本进入软件,主界面简洁大方,上排是工具栏,下排是显示栏,记录好的收支都会显示在中间的显示栏中,而且当前的时间显示模式是“只显示日期”至于时间的其他呈现方式呢?

  • 吃猪油有什么好处 经常吃猪油有什么好处

    2、诱发肥胖猪油中含有大量的脂肪酯,会产生堆积,如果他们不能及时代谢出体外,就会让人们的体重明显增加,这是身体肥胖症状会不断加重,如果不能及时控制还会危害人体健康,会让人体多个器官的负担明显加重。

  • 杭州香积寺参观指南 杭州香积寺介绍

    咨询电话:0571-88316633注意事项:1、疫情防控期间,入寺参观人员请确保“一码、一证、一券、一米”,并佩戴口罩。入寺参观期间如有身体不适,尤其是出现发烧、咳嗽等症状,请及时就近联系工作人员,切勿隐瞒。

  • 阿帕奇上面配备了什么武器(是什么造就了阿帕奇)

    “阿帕奇”武装直升机不仅火力凶猛,而且防御也是一流的。这样可以使“阿帕奇”直升机在中弹时避免燃料箱发生燃烧以及爆炸。此外,工作人员还在防弹泡沫塑料外涂抹一些特制的树脂,这种特殊树脂能在“阿帕奇”直升机的燃料箱受到撞击时,隔绝气囊以避免火势蔓延。并且,在“持久自由行动”期间,不少“阿帕奇”是在都市作战时受损。值得一提的是,目前仍有1300多架“阿帕奇”在世界各地服役。

  • 下划线怎么打(下划线打法)

    接下来我们就一起去研究一下吧!下划线怎么打方法一:首先打开Word文档,将输入法切换到英文状态,然后同时按住“shift”和“减号”键就可以打出下划线了。操作简单易上手。

  • 武汉国庆十一是否有烟火晚会表演(武汉国庆十一是否有烟火晚会表演的)

    020十一国庆武汉哪里好玩?武汉十一好玩的活动又有哪些?国庆景点还免费吗?怎么预约呢?一起来看看吧!