[译]JVM运行时数据区
(本篇文章翻译自JVM Run-Time Data Areas)
这是我阅读JVM规范的笔记,而且我画了一个图来帮助我理解。
1.每一个单独的线程(非共享的)的数据区
针对每一个单独的线程的数据区包括程序计数器、JVM栈、和本地方法栈,当一个新的线程被创建的时候他们都会被创建。
(程序计数器)Program Counter Register:用于控制每个线程的运行
(JVM栈)JVM Stack:它包含下面图中画的帧。
(本地方法栈)Native Method Stack:它用于支持本地方法,比如非Java语言的方法。
2.被所有线程共享的数据区
所有的线程共享堆和方法区。
(堆)Heap:这是我们最常用到的区域。当JVM启动的时候,它存储着被创建的数组和对象。垃圾回收器对这个区域起作用。
(方法区)Method Area:它存储着运行时常理池,域和方法数据还有方法和构造器。
(运行时常理池)Runtime Constant Pool:它是在class文件中一个每个类或每个接口的运行时constant_pool表的表示。它包含几种常量,包括编译时方法的字面值和在运行时必须被解析的域的引用。
栈包含帧,而且一个方法被调用的时候帧被放置到栈中,一个帧包含局部变量数组、操作栈、常量迟的引用。