首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
upjmbai5800
2019-08-11 10:08
已编辑
中国银联_技术开发中心_应用开发
关注
已关注
取消关注
JVM总结(2)
JVM总结(2)java内存区域、字节码执行引擎
1、内存区域
程序计数器:知道线程执行位置,保证线程切换后能恢复到正确的执行位置。
虚拟机栈:存栈帧。栈帧里存局部变量表、操作栈、动态连接、方法返回地址。局部变量表又存了各种基本数据类型和对象引用(句柄)。
本地方法栈:为Native方法服务
堆:存放对象实例和数组,可以处于物理上不连续的内存空间
方法区:存类信息、常量、静态变量。有运行时常量池,存放类的符号引用
堆主要用来存放对象,栈主要用来执行程序。
2、对象的创建
虚拟机遇到一条new指令时,会先去常量池检测能否找到new对应的类的符号引用,并检测这个类是否加载、初始化。
如果加载检查通过,则分配内存。分配内存有两种方式:⑴指针碰撞,针对连续内存区域;⑵空闲列表,针对不连续内存区域。
内存分配完之后,会对内存初始化零值,保证实例字段能在java代码不赋初值也能使用。
接下来对对象信息进行设置,把类的元数据信息、对象的哈希码、对象的GC分代年龄等信息存放在对象头之中。
最后执行用户的Init方法
3、对象的内存布局
分为三部分,对象头、实例数据、对齐填充
对象头:⑴对象自身运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁等。⑵类型指针,虚拟机通过这个来确定这个对象是哪个类的实例。⑶如果对象是一个Java数组,那么对象头中还必须有一块用于记录数组长度的数据。
实例数据:对象真正存储的有效信息,也是在程序代码中定义的各种类型的字段内容。
对齐填充:JVM要求对象的起始地址必须是8字节的整数倍,因此当对象实例数据没有对齐时,这部分来补全。
对象的访问定位
取决于虚拟机的实现而定,有“句柄”和“直接指针”两种方式
“句柄”的好处是,在对象被移动(垃圾回收时很普遍),只用修改句柄中的实例数据指针,而reference本身不用修改。
“直接指针”的好处是,速度更快,毕竟节省了一次指针定位的时间开销。由于对象的访问在Java中非常频繁,因此这部分开销节省下来也很可观。
JVM字节码执行引擎
字节码文件即类文件被加载后,就能送入执行引擎了:
输入:字节码文件
处理:字节码解析
输出:执行结果。
物理机的执行引擎是由硬件实现的,虚拟机的执行引擎由于自己实现的。
• 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。
• 每个栈帧都包括了一下几部分:局部变量表、操作数栈、动态连接、方法的返回地址 和一些额外的附加信息。
• 每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。
• 一个栈帧需要分配多少内存,不会受到程序运行期变量数据的影响,而仅仅取决于具体的虚拟机实现。在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧,与这个栈帧相关联的方法称为当前方法,执行引擎运行的所有字节码指令都只针对当前栈帧进行操作。
局部变量表:
一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。以变量槽slot为单位,一个slot可以放32位数据类型,对于long\double占用2个slot。
操作数栈:
即用来存放操作数的栈结构,当一个方法刚开始执行的时候,这个方法的操作数栈是空的,在方法的执行过程中,会有各种字节码指令向操作数栈中写入和提取内容,也就是入栈和出栈的操作。
java虚拟机的解释执行引擎称为基于栈的执行引擎,其中所指的栈就是操作数栈。
动态连接:
运行期将相关的符号引用转换为直接引用
方法返回地址:
方法执行完成的结果值
方法调用:
解析方法的符号引用和确定方法的版本
方法的执行:
解释执行(通过解释器执行)
编译执行(通过JIT编译器产生本地代码执行)
基于栈的代码执行示例
下面我们用简单的案例来解释一下JVM代码执行的过程,代码实例如下:
使用javap指令查看字节码:
提示
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
12-01 11:23
西安邮电大学 后端工程师
到底要不要逃课学习技术?
一句话总结:这个问题并不是“要不要”的问题,而是“值不值”的问题。关键看哪一种方式更有利于你的目标,以及你是否能够承受逃课所带来的代价。线上或者线下只是学习形式而已,真正要关注的点是是否在有效学习,而不是一直死扣形式本身。1.你的目标到底是什么?就业OR考研逃课的前提是你有清晰的发展目标。而且这个目标的价值远超课堂所带来的价值内容。若你的目标是就业 / 项目实战:面对纯理论堆砌、内容重复(比如已通过线上课吃透)或老师照本宣科的 “水课”,逃课去深耕岗位所需技术(如后端的 Spring 框架、前端的 React 实战),或做能落地的项目,性价比更高。若你的目标是保研 / 考研:专业课(数据结构、...
代码之外的生存之道
点赞
评论
收藏
分享
12-05 16:53
门头沟学院 大数据开发工程师
要去实习吗?
双非学历,一段中厂实习,秋招只1面,目前找到一家杭州小厂实习,但是转正结果要到3、4月份才能知道,还要去吗?如果不去,很担心春招也是这个状态,没面试,还会更焦虑,而且还有毕业论文的压力如果要去,实习薪资4500,没有其他补贴,但部门是公司的核心部门,锻炼肯定是有的到底怎么选😖#求助##实习#
哈哈哈,你是老六:
去实习挺好的,还能赚钱也能学技术
点赞
评论
收藏
分享
11-04 22:43
门头沟学院 前端工程师
28届前端简历求拷打
想问问大佬们都是从哪里找的前端项目,感觉项目这一块还是太拉跨了
如何写一份好简历
点赞
评论
收藏
分享
10-17 17:54
门头沟学院 Java
26届Java开发,求拷打简历
求大佬拷打简历,不玻璃心。秋招简历挂麻了
求个oc吧:
你简历和学历都比我牛,你也这样,那我凉了
你的秋招简历被谁挂了?
点赞
评论
收藏
分享
12-03 09:51
海康威视_技术支持部_云存储开发工程师(准入职员工)
海康威视内推,海康威视内推码
真实工作体验!【工作时间】 海康实行弹性工作制,一般九点半之前到公司就可以。对于实习生来说,一般只要打够八个半小时的卡就好了。这点还是不错的,早点上班就可以早点下班。正式工可能需要大小周,具体看部门要求。实习生应该都是双休的,不过周末去的话也会给你发工资。中午休息一个半小时,大部分员工都会自己买午休床。 【公司环境】 实习报到的时候会给你分配一台电脑,一般都是无盘机,配置很普通,不允许自己带电脑。海康对网络管控比较严格,很多网站不能访问。想要访问外网的话只能通过虚拟机,然后通过公司内部的文件传输工具传到红网,这点还是比较麻烦的。 海康食堂还行,样式挺丰富的,价格也不贵。早餐我一般在5-10r,...
海康威视公司福利 1382人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
7天10面 来分享一下我的11月面筋!
5192
2
...
零经验也能斩获实习offer
1346
3
...
小红书商业化技术Java一面(挂)
1298
4
...
27届211本 百度测开实习要去吗
1101
5
...
我觉得年轻就应该选择"高薪高压" | 技术至上、业务为王.
865
6
...
26岁的我,后悔读双非硕士
864
7
...
都是匆忙的选择,感觉人生真的很儿戏
726
8
...
快手日常实习能转正吗?
630
9
...
简历书写格式参考
591
10
...
试用期没通过
541
创作者周榜
更多
正在热议
更多
#
offer帮选
#
4809521次浏览
29196人参与
#
0经验如何找实习?
#
940次浏览
28人参与
#
百融云创求职进展汇总
#
1400次浏览
17人参与
#
校招薪资来揭秘
#
349003次浏览
1898人参与
#
产品每日一题
#
72115次浏览
639人参与
#
OC/开奖
#
281715次浏览
1749人参与
#
你开始找寒假实习了吗?
#
1472次浏览
18人参与
#
如果公司降薪,你会跳槽吗?
#
108232次浏览
670人参与
#
实习,不懂就问
#
134942次浏览
1249人参与
#
跳槽时有那些注意事项
#
113157次浏览
581人参与
#
2025年终总结
#
20533次浏览
288人参与
#
你会为了工作牺牲生活吗?
#
64350次浏览
433人参与
#
Offer比较,你最看重什么?
#
241828次浏览
1493人参与
#
职场新人体验
#
152711次浏览
1110人参与
#
第一份工作能做外包吗?
#
88483次浏览
588人参与
#
硬件兄弟们 甩出你的华为奖状
#
117905次浏览
702人参与
#
25届暑期实习
#
1029922次浏览
20516人参与
#
实习中的菜狗时刻
#
449791次浏览
3516人参与
#
学历or实习经历,哪个更重要
#
204299次浏览
1086人参与
#
实习要如何选择和准备?
#
125820次浏览
1478人参与
#
uu们,春招你还来吗?
#
17756次浏览
125人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务