首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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指令查看字节码:
提示
全部评论
推荐
最新
楼层
国泰君安
校招火热招聘中
官网直投
相关推荐
爱刷美剧的菠萝蜜
06-05 11:16
Java
6月了,好公司都开始校招了
时代真的变了啊,5月真的是个神奇的时间点,我看大家还沉浸在暑期实习中呢,结果6月一到,校招就来了,妈耶,猝不及防。我跟你们讲,今年秋招肯定会有大变动。互联网去年就招聘收缩的厉害,加上各个行业都在做数字化转型,其实某种意义上讲,现在早就全是“互联网”公司了,毕竟技术是第一生产力,没有科技创新,这个行业可能就会停在那里了。金融科技就是一个非常典型的走在技术前沿的领域,最直观的展现就是举办技术大赛了,因为金融科技是真的需要最前沿的技术,这样才能提升金融效率以及生产力,比如可以推动金融业朝着精准服务、智能服务、场景服务发展,其中华泰证券2019年就率先启动数字化转型,综合实力和品牌影响力位居国内证券业...
点赞
评论
收藏
分享
找实习找到😭
06-06 14:09
已编辑
门头沟学院
小厂日常实习Java面经
一面(25min)自我介绍学习Java多久了?除了Java之外还学习过别的技术栈吗?你简历上写的这两个项目都是你自己做的吗?你的项目亮点是什么?主要解决了什么问题?你的主要做了什么功能? 排行榜是怎么做的?你对哪个技术栈比较熟悉?(回答的MySQL)怎么去优化SQL? (从表的结构回答的不好,建立索引增加查询速度) 回答的不好分表的依据是什么?(什么情况下要去分表,依据什么来去分表?) Java中堆和栈的区别?==和equals的区别?-为什么重写equals方法一定要重写hashcode方法呢?Spring中的IocSpring和SpringBoot的区别?Redis的持久化机制?Redis...
查看53道真题和解析
点赞
评论
收藏
分享
牛客989679137号
05-30 18:25
广州大学松田学院 计算机类
这hr是在好心教我改简历吗?😅
#你见过最离谱的招聘要求是什么?#
你见过最离谱的招聘要求是什么?
点赞
评论
收藏
分享
秦始皇嬴政
06-02 16:47
百度_软件开发(准入职员工)
偶遇明星
人麻了,忘记戴眼镜了。。
点赞
评论
收藏
分享
小飞侠哈哈
06-03 15:46
字节跳动_商业化技术_前端开发
字节广告急招前端
实习生:2025、2026届,实习时间大于6个月;表现优异可以转正 社招:2-5年工作经验;职级1-2 ~ 2-1,接受内部转岗; 岗位base:北京 招聘对象:实习生和社招 内推亮点:本组急招,投递既有反馈
投递字节跳动等公司8个岗位 >
点赞
评论
收藏
分享
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
计算机去央国企(银行软开篇)
2.6W
2
...
24届985计算机废物春招感想(央国企、银行)
1.5W
3
...
秋招在即,求刷题搭子!!
1.2W
4
...
有个好导师真幸福
8698
5
...
问一下大家的实习薪资是多少?
7676
6
...
暑假0offer教训
7491
7
...
初入职场雷点tips-1
5278
8
...
网易互娱40min(感觉是G了)
5155
9
...
华黑子的暑期实习总结
5109
10
...
美团 实习
4590
正在热议
#
和牛牛一起刷题打卡
#
24334次浏览
1993人参与
#
我在牛爱网找对象
#
53995次浏览
381人参与
#
不去互联网可以去金融科技
#
31109次浏览
400人参与
#
牛客帮帮团来啦!有问必答
#
1192594次浏览
17548人参与
#
软件开发笔面经
#
4802次浏览
206人参与
#
如何拒绝/反向PUA
#
20656次浏览
180人参与
#
OPPO开奖
#
32192次浏览
478人参与
#
双非本科求职如何逆袭
#
236869次浏览
3474人参与
#
你觉得通信/硬件有必要实习吗?
#
26721次浏览
463人参与
#
租房前辈的忠告
#
59326次浏览
4517人参与
#
机械只有转码才有出路吗?
#
4525次浏览
115人参与
#
听劝,我这个简历该怎么改?
#
64267次浏览
645人参与
#
选了这个offer,你有没有后悔?
#
134474次浏览
1293人参与
#
如何缓解入职前的焦虑
#
50166次浏览
524人参与
#
腾讯工作体验
#
157071次浏览
1529人参与
#
同事是个抢功怪怎么办
#
12877次浏览
95人参与
#
0offer是寒冬太冷还是我太菜
#
460365次浏览
5163人参与
#
产运销实习日记
#
2603次浏览
104人参与
#
职场上哪些事情令人讨厌
#
2985次浏览
22人参与
#
机械人值得去的国央企
#
17821次浏览
195人参与
#
24届软开秋招面试经验大赏
#
1187733次浏览
18242人参与
#
非技术薪资爆料
#
80922次浏览
1022人参与
牛客网
牛客企业服务