jvm中线程本地内存是真实存在的,还是一个抽象概念

 我来答
百度网友5bd0e95aa1
2017-02-24 · TA获得超过302个赞
知道答主
回答量:346
采纳率:0%
帮助的人:40.6万
展开全部
jvm内存模型:Java代码是运行在Java虚拟机之上的,由Java虚拟机通过解释执行(解释器)或编译执行(即时编译器)来完成,故Java内存模型,也就是指Java虚拟机的运行时内存模型。

运行时内存模型,分为线程私有和共享数据区两大类,其中线程私有的数据区包含程序计数器、虚拟机栈、本地方法区,所有线程共享的数据区包含Java堆、方法区,在方法区内有一个常量池。java运行时的内存模型图,如下:

从图中,可知内存分为线程私有和共享两大类:

(1)线程私有区,包含以下3类:
程序计数器,记录正在执行的虚拟机字节码的地址;
虚拟机栈:方法执行的内存区,每个方法执行时会在虚拟机栈中创建栈帧;
本地方法栈:虚拟机的Native方法执行的内存区;

(2)线程共享区,包含以下2类
Java堆:对象分配内存的区域;
方法区:存放类信息、常量、静态变量、编译器编译后的代码等数据;
常量池:存放编译器生成的各种字面量和符号引用,是方法区的一部分。

楼主提到的Java栈,一般而言是指图中的虚拟机栈,在代码中的方法调用过程中,往往需要从一个方法跳转到另一个方法,执行完再返回,那么在跳转之前需要在当前方法的基本信息压入栈中保存再跳转。

三、关于寄存器的问题

对于java最常用的虚拟机,sun公司提供的hotspot虚拟机,是基于栈的虚拟机;而对于android的虚拟机,则采用google提供的dalvik,art两种虚拟机,在android 5.0以后便默认采用art虚拟机,这是基于寄存器的虚拟机。 楼主问的是jvm(即java vm),这是基于栈的虚拟机。那么关于虚拟机栈,这块内存的内容,我们再进一步详细分析,如下图:

可以看到,在虚拟机栈有一帧帧的 栈帧组成,而栈帧包含局部变量表,操作栈等子项,那么线程在运行的时候,代码在运行时,是通过程序计数器不断执行下一条指令。真正指令运算等操作时通过控制操作栈的操作数入栈和出栈,将操作数在局部变量表和操作栈之间转移。
百度网友77a016f
2018-09-26
知道答主
回答量:3
采纳率:0%
帮助的人:2715
展开全部
是一个抽象的概念,并不是真实存在的,涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化,每一个线程都有一个本地内存,其中有主内存中对象的拷贝值,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式