以下内容是阅读JVM8的规范时,临时记录下来。如果朋友们发现有什么问题请不吝指正。谢谢。

在JVM8的规范中,是以Runtime Data Area出现的,主要包含两部分:

1.JVM启动时创建,退出时销毁;

2.线程区域,线程启动时创建,退出时销毁。

具体包括以下组成部分:

1.pc register,即为 program counter,用来记录method 的return address。

2.JVM stacks: 每一个线程创建时,对应的stack也被创建出来,存放本地变量和部分方法调用的返回结果。 stack的内存区域无需连续。注意,如果线程运行时需要的内存大于stack的容许值,则会stackoverflow error。如果jvm stacks的空间允许动态扩展,但是没有更多内存可以用来创建新thread时,会OutofMemoryError

3.Heap : 在jvm threads 间共享的区域。heap中存放 classes instances 和 arrays。JVM启动时,heap被创建。如果需要的内存超过的heap的值,则OutOfMemoryError

4.Mehod Area : Mehod is shared  among all JVM threads. 存放class的constant pool,fields, method和constrctor的代码(类似于代码区或者文本区); JVM启动时创建。逻辑上 method area属于heap的一部分。

5.Runtime Constant pool. 位于 JVM method area。如果需要的空间不够了,则ooe。可以理解成每个class或者interface被jvm创建时,会在method area创建一个pool,类似于a table,内容包括数值常量,引用地址?

6.Native method area: for native thread.

需要加入一张图来解释 JVM heap

07-06 07:24