首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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指令查看字节码:
提示
全部评论
推荐
最新
楼层
还没有回复哦~
相关推荐
11-21 23:17
门头沟学院 研发工程师
秋招可以暂告一个段落啦
上周腾讯开奖后,本来想这周把字节三面和叠纸的hr面面完再决定的,但是不是很想折腾了,叠纸后面还有高管面,感觉就算过了最后也不一定有鹅香,就直接不拖签三方了。七月底开始的秋招,投了将近百来家,初筛/笔试/复筛挂了将近一半,面试了应该有五六十场,也经历了不少压力面,其实早就倦怠了,8月高强度八股后就再也没看过八股,也不想刷题了,每天处于一种躺等面试的状态,就这样一直拖到11月,终于等到结果了。可以轮到鼠鼠来写经验分享咯:一、 稳住心态整个秋招流程中一定会经历各种心态崩了的时刻,比如:为什么我这么匹配这个岗位结果初筛挂了?为什么我笔试都做出来了把我挂了?为什么我都答上来了还是没通过面试?其实都是正常...
查看6道真题和解析
点赞
评论
收藏
分享
11-19 00:01
华南师范大学 DFT工程师
秋招真是我经历过的最折磨人的事情
今天填简历时,竟然要提供身份证照片和父母的单位、职务收入,我直接关掉网页,心累得不行。之前发烧时去面试,头脑不清,连HR的问题都听不清,结果挂了两个梦厂。群面简直是人间地狱,真心觉得这个社会没有适合我的工作,全是销售。。。
牛客创作赏金赛
点赞
评论
收藏
分享
11-01 19:18
蚌埠坦克学院 智能驾驶系统工程师
不是哥们
这面试时间是认真的吗😰
Natrium_:
这时间我以为飞机票
点赞
评论
收藏
分享
11-19 16:31
哈尔滨理工大学 算法工程师
练习16,G题,新函数定义
题目如下:乎优塔病好了,他又开始研究定义一个新函数,该函数的声明形式为: long long fun(int n); ,其作用为:分解出n的每一位,并计算每一位的阶乘,然后将计算后的结果相加后返回,请编程实现(要求必须使用函数实现,否则不计入成绩)。输入描述:一个整数n(1≤n≤1000000)。输出描述:一个整数,计算后的结果。此题目如果要以函数声明形式,那么这个题需要分为两个函数,一个是计算阶乘的函数,另外一个是计算加和的函数,此题数据可能会太大,所以我们要使用longlong类型来定义函数,计算阶乘的函数代码如下: long long fun1(int n) { long lon...
点赞
评论
收藏
分享
点赞成功,聊一聊 >
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
爱信等
8717
2
...
秋招圆满结束
6434
3
...
总结一下鼠鼠找实习的历程
6188
4
...
11.25校招&实习招聘信息汇总
4995
5
...
阿里云VS腾讯VS华为,决赛圈
4701
6
...
真心觉得25届的求职之路太艰难了
4662
7
...
offer比较的一些建议:互联网、银行、金融科技、国企、央企
4662
8
...
阿里云管培生开奖了
4382
9
...
华为开奖
3282
10
...
重生之我变成了小学生
2854
正在热议
#
25届秋招总结
#
303529次浏览
2693人参与
#
如果不工作真的会快乐吗
#
59487次浏览
519人参与
#
阿里云管培生offer
#
17888次浏览
297人参与
#
地方国企笔面经互助
#
3897次浏览
11人参与
#
美团求职进展汇总
#
1328383次浏览
12453人参与
#
选完offer后,你后悔学本专业吗
#
20199次浏览
144人参与
#
百度开奖
#
164036次浏览
982人参与
#
正在实习的你,几点下班
#
52138次浏览
391人参与
#
国央企薪资爆料
#
8696次浏览
69人参与
#
如何一边实习一边秋招
#
992681次浏览
12640人参与
#
提前批简历挂麻了怎么办
#
146599次浏览
1948人参与
#
学历or实习经历,哪个更重要
#
51328次浏览
402人参与
#
海康威视求职进展汇总
#
399131次浏览
3406人参与
#
米哈游求职进展汇总
#
176183次浏览
1458人参与
#
求职遇到的搞笑事件
#
70915次浏览
577人参与
#
投递实习岗位前的准备
#
1179892次浏览
18398人参与
#
面试体验感最好的是哪家?
#
85183次浏览
846人参与
#
实习生应该准时下班吗
#
167509次浏览
1159人参与
#
得物求职进展汇总
#
66416次浏览
682人参与
#
网申一定要掌握的小技巧
#
5358次浏览
53人参与
#
招聘要求与实际实习内容不符怎么办
#
10322次浏览
273人参与
#
0offer是寒冬太冷还是我太菜
#
899125次浏览
8015人参与
牛客网
牛客企业服务