【云计算】Java内存模型(深入JVM原理)
小标 2019-02-25 来源 : 阅读 557 评论 0

摘要:本文主要向大家介绍了【云计算】Java内存模型(深入JVM原理),通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

本文主要向大家介绍了【云计算】Java内存模型(深入JVM原理),通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

【云计算】Java内存模型(深入JVM原理)

Java程序执行流程


实际上,当JVM将所需要的 .class 文件加载到 JVM 进程之中,我们需要一个类加载器(ClassLoader),类加载器的好处在于:可以随意定指定 *.class 文件所在的路径。


JVM:java虚拟机,所有的程序都要求运行在JVM上,是因为考虑到了可移植性问题 ,但如果真正去执行程序,无法离开操作系统的支持。


在 java 中可以使用 native 实现本地C函数的调用,Native Interface,但是这些都是属于程序的辅助手段,而真正的程序运行都在“运行时数据区”之中。


在整个的运行时数据区中,分为如下几个内存空间:

1、堆内存:保存所有引用数据的真实信息,对象都存储在堆内存中;

2、栈内存:基本类型、运算、指向堆内存的指针;

3、方法区:所以定义的方法的信息都保存方法区中,属于共享区;

4、程序计数器:是一个非常小的内存空间,用来保证程序依次执行;

5、本地方法栈:每一次执行本地方法的时候,都会将一个方法入栈;


那么栈中我们是存的什么呢? 栈内存指的就是虚拟机栈

如图:


线程都会有自己的调用,此时,每个线程都要有自己独立的空间,所以,每个栈内存都是线程私有的。

我们在java JVM 中用栈帧(Stack Frame)来定义栈的数据,每一个栈帧表示每个可能执行的方法。


栈帧中则包含了:局部变量表,操作树栈,指向运行时常量池的引用,方法返回地址和动态链接。

局部变量表(Local Variables):方法的局部变量或形参,其以变量槽(solt)为最小单位,只允许保存32为长度的变量,如果超过32位则会开辟两个连续的solt(64位长度,long和double);

操作树栈(Operand Stack):表达式计算在栈中完成;

指向当前方法所属的类的运行时常量池的引用(Reference to runtime constant pool):引用其他类的常量或者使用String 池中的字符串;

方法返回地址(Return Address):方法执行完后需要返回调用此方法的位置,所以需要再栈帧中保存方法返回地址;


当产生一个方法调用的时候,原本的方法会入栈,当方法执行完毕之后,方法将会进行栈帧的出栈,这样就能定义每个栈的详细信息。


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程