首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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指令查看字节码:
提示
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 17:19
华中科技大学 嵌入式软件工程师
警惕租房中的"最后一次博弈效应"
最后一次博弈效应 (Last Period Effect / Endgame Effect)指在有限次重复博弈 中,当参与者明确知道博弈将在某一特定轮次结束时,他们在最后一轮博弈 中会采取非合作策略 (如背叛),因为此时不存在未来的惩罚机制,导致理性参与者最大化当前收益。 亲身说法:从上研究生开始我就开始租的房,租了三年,虽然房子是超级简装:墙皮从第一年开始脱落,床也睡散架了一次,乱七八糟的东西坏;但是房东也都会来修,平常也不来房子不会打扰我们,前两年感觉还行。事情要追溯到去年最后一次签租房合同,我们是一年一签。由于今年要毕业,但是我们租期只到五月底,我们去年签合同的时候就和房东说续一个月,想...
我的碎碎念~
我的租房踩坑经历
点赞
评论
收藏
分享
06-09 18:43
华南理工大学广州学院 数据分析师
双非想找实习,可以给点建议吗?什么建议都行😭
目前在boss投了很多与数据分析相关的岗位,无论大小企业都投了,包括一些岗位要求只需要会excel等办公软件的,但是都没有回应,需要换方向吗?大家都是怎样找到的实习呀?
编程界菜鸡:
cpdd
点赞
评论
收藏
分享
05-03 16:22
大连工业大学 Java
鼠的这段实习挺水的
大家帮我看看简历,要不要再加一个项目
点赞
评论
收藏
分享
04-17 09:29
已编辑
湖南农业大学 后端
0Offer的我心里暖暖的
25届0Offer,投的比较晚,兄弟们都怎么样了? 0offer互助地##
睡姿决定发型丫:
本硕末9也是0offer,简历挂了挺多,只有淘天 美团 中兴给了面试机会,淘天二面挂,美团一面kpi面,中兴一面感觉也大概率kpi(虽然国企,但一面0技术纯聊天有点离谱吧)
现在还是0offer,延毕还是备考
点赞
评论
收藏
分享
昨天 14:20
已编辑
重庆邮电大学 Java
oppo一面(汗流浃背版)
感觉问得很深实习:1.说一下你实习期间真正负责的一些东西2.针对EasyExcel表的导入,如何对数据进行校验?3.如何对数据进行解析?*4.有研究过EasyExcel源码吗?如果让你针对源码所实现的方法来设计数据导出,如何在导出时合并单元格?*5.写了一个简单的demo,如何使用RocketMQ来发送消息?producer和consumer的具体参数有哪些,源码有了解过吗?八股+场景+sql:6.怎么才能在一个java项目里面实现引入?怎么实现配置?7.引入的依赖为什么会生效?8.如何在java里存储一个redis的list数据*9.怎么设置缓存的过期时间?在哪里设置?10.redis锁的过...
查看16道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
信息差补全:哪些假国企要避雷
4517
2
...
27届腾讯一面,强度太大了..
3904
华为开奖进度👉
热聊中
3
...
双一流本的春招失败总结 面试近40家公司 0offer结局 准备转行了
3904
4
...
一文详解各大厂人才项目差异点(吐血整理)
3884
5
...
宝宝你是最棒的宝宝
3644
6
...
所以毕业就是分手季吗?
3559
7
...
在西二旗上班真的没有一点活人感
3011
8
...
我的21岁
3001
9
...
逆天领导行为大赏
2898
10
...
从竞赛到实习:我的成长之路与经验分享
2565
创作者周榜
更多
正在热议
更多
#
聊聊这家公司值得去吗
#
232284次浏览
2181人参与
#
职场人,说说你的烦心事
#
8399次浏览
70人参与
#
你认为哪个岗位找工作最卷
#
11609次浏览
40人参与
#
kpi面有什么特征
#
31294次浏览
201人参与
#
一人一个landing小技巧
#
78659次浏览
1123人参与
#
职场上哪些事情令人讨厌
#
16599次浏览
82人参与
#
秋招最大的收获是什么?
#
33806次浏览
296人参与
#
职场吐槽大会
#
205174次浏览
1635人参与
#
为了找工作你投递了多少公司?
#
9044次浏览
122人参与
#
大家每天通勤多久?
#
41920次浏览
329人参与
#
通信硬件牛牛的实习日记
#
7127次浏览
65人参与
#
小红书求职进展汇总
#
56045次浏览
484人参与
#
职场破防瞬间
#
234852次浏览
2125人参与
#
tplink提前批进度交流
#
162653次浏览
1378人参与
#
总结:哪家公司面试体验感最好
#
47556次浏览
336人参与
#
找工作前vs找工作后的心路变化
#
9557次浏览
102人参与
#
机械制造岗投递时间线
#
22679次浏览
346人参与
#
研究所VS国企,该如何选
#
180539次浏览
1769人参与
#
考公还是考研,你怎么选?
#
26506次浏览
135人参与
#
硬件人你反向读研了吗
#
41734次浏览
630人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务