首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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指令查看字节码:
提示
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
11-21 14:27
暨南大学 机械设计师
爱玛供应链制造
上个月就签了供应链制造,谈薪还是挺顺的,offer发的也是挺快,刷到别的岗位的同学还在走流程,我感觉别担心,爱玛的流程还是挺效率的。
点赞
评论
收藏
分享
11-20 19:48
深圳大学 测试开发
26届秋招 - 小米 - 后端面经
点赞
评论
收藏
分享
11-12 17:27
已编辑
北京理工大学珠海学院 嵌入式软件工程师
这个工资你们去干吗?
#投了多少份简历才上岸#
投了多少份简历才上岸
点赞
评论
收藏
分享
11-06 17:44
哈尔滨工业大学(威海) Java
27届Java后端约不到面试,简历有什么问题吗
沟通了700+ 只投了50多份简历,两个面试,是简历问题吗😢😢ps:面试两次都不出意外的秒挂了,抄的星球项目很多地方都忘了,感觉需要更熟悉一点。两次面试基本都没问我java八股😇,感觉和面经内容好不相符!我还想在其中一个项目加点ai内容,合适吗?
出海电商码农:
27实习明年春天投吧
我的简历长这样
点赞
评论
收藏
分享
昨天 21:12
复旦大学 Java
有实习经历之后,面试官会怎么拷打实习经历?
当你有实习经历之后,一般来说面试官会优先问你的实习经历,那针对于实习经历,面试官一般会问哪些问题呢,今天咱们来看一下通用的问题!1.如果让你来评估一下你们系统的QPS参数是多少,你会怎么去评估?不需要去压测,只是根据现在的硬件机器参数配置应该达到什么样子的水平?2.16C4G,普通机械硬盘,做秒杀系统,你会去修改哪些配置参数?不考虑Redis和Kafka等,只需要考虑SpringBoot的配置参数,线程数、堆大小,具体的数值配置?3.秒杀场景下的垃圾收集器,JVM堆如果配置过大的副作用有哪些?4.Full GC应该是多久?如果堆内存是128G,Full GC应该会停顿多久?5.线上部署机器的数...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
27无实习不投日常了明年3月直接战暑期或者找日常可行吗
3258
2
...
秋招总结,春招加油
1846
3
...
【现金奖励】26秋招薪资爆料征集,瓜分现金红包!
1803
4
...
Gemini3用了吗,前端是不是无了?
1760
5
...
腾讯云智 一面
1621
6
...
不是,现在计算机都喜欢去电网了?
1472
7
...
秋招结束,总结一下吧
1241
8
...
《记不住不是我的错,是为了问你啊!》
1100
9
...
双非不要走后端
881
10
...
去年水灵灵的拿了offer
859
创作者周榜
更多
正在热议
更多
#
OC/开奖
#
200936次浏览
1347人参与
#
材料转码还有必要吗?
#
32145次浏览
152人参与
#
小红书开奖了
#
34967次浏览
168人参与
#
你面试时吹过最大的牛
#
1325次浏览
13人参与
#
设计人的面试记录
#
167117次浏览
1545人参与
#
实习学到最有价值的工作习惯
#
41517次浏览
363人参与
#
百度秋招
#
53065次浏览
390人参与
#
蚂蚁求职进展汇总
#
133457次浏览
1212人参与
#
你知道哪些职场黑话?
#
64861次浏览
449人参与
#
2022毕业即失业取暖地
#
121628次浏览
710人参与
#
正在春招的你,也参与了去年秋招吗?
#
335326次浏览
2563人参与
#
应届生应该先就业还是先择业
#
148212次浏览
746人参与
#
为了秋招你都做了哪些准备?
#
25957次浏览
497人参与
#
科大讯飞工作体验
#
29142次浏览
71人参与
#
那些年,我收到的‘奇葩’回复
#
30636次浏览
179人参与
#
CVTE求职进展汇总
#
26627次浏览
327人参与
#
华为工作体验
#
242820次浏览
1297人参与
#
秋招你经历过哪些无语的事
#
28021次浏览
308人参与
#
实习需要主动找活干吗?
#
56489次浏览
297人参与
#
双非本科的出路是什么?
#
179071次浏览
1457人参与
#
牛客十周岁生日快乐
#
186208次浏览
1829人参与
#
校招薪资来揭秘
#
100802次浏览
621人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务