JVM运行时的数据区域情况

本文详细介绍了JVM运行时数据区域的划分,包括每个线程单独拥有的程序计数器、JVM栈和本地方法栈,以及所有线程共享的堆和方法区。深入探讨了这些区域的具体作用及其在程序执行过程中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


以下这种图有助于理解JVM运行时数据区域的情况




1、每个线程单独拥有的数据区


每个线程单独拥有的数据区包括 程序计数器、JVM栈、和本地方法栈。但一个新的线程创建时他们都将被创建。


程序计数器:用于控制每个线程的每一次执行操作。


JVM栈:JVM栈包含有帧(Frame),将在以下图进行说明。


本地方法栈:用于支持本地方法,如一些非java语言的方法。


2、所有线程共享的数据区域


所有线程共享的数据区是堆和方法区


堆:堆是经常操作的区域。数组以及对象都在此区域中,但JVM启动时,它们将被创建。


方法区:它包含运行时常量池,属性,方法的数据,以及方法、构造方法的代码。


运行时常量池:是class文件中每一个类或接口的常量池表。存放各种常量,包括从只有在编译时才知道的字面量到只有在运行时才能确定的方法以及属性的引用。




栈包含帧,但一个方法被调用时,一个帧将会压入栈中。


一个帧由本地变量数组、操作对象栈,常量池的引用组成。


参考:JVM Specification – Run-Time Data Areas


原文地址:http://www.programcreek.com/2013/04/jvm-run-time-data-areas/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值