Java虚拟机运行时数据区的构成

下面是虚拟机runtime data areas:

由方法区(method area), heap, pc register 和stack, 以及本地方法区(native method area)构成。

每个虚拟机实例有一个方法区和一个堆(heap),在一个虚拟机中运行的所有线程共享这两个区。

当虚拟机load一个class文件时,.将class的相关信息放入方法区

随着程序的运行,虚拟机逐步将所有的实例放入heap

可见,为了实现实例间的互相调用,方法区和heap必须是可共享的。


当一个线程诞生时,它有自己的pc register (program counter)Java stack

在一个java方法(not native method)运行时,pc register总是存放着下一条要执行的语句。也就是,该线程下一步要调用的语句。

stack 存放着一个java方法(not native method)调用的状态。比如本地变量,该方法的输入参数,中间计算结果,返回结果等等。


下面是关于heap和stack的概括,便于记忆:

Reference types are in heap.

Any primitive type data and references to values on heap (parameters / local variables of method) are on the stack.

Each thread has its own stack.

All threads in the application share same heap.


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐