Java

Java运行时数据区

2018-04-20  本文已影响1人  打铁大师

原文戳这里JVM Run-Time Data Areas

下面是我阅读JVM规范的笔记。

JVM-runtime-data-area.jpg

1.单个线程的数据区(不共享)

每个单独的线程的数据区都包括程序计数器(Program Counter Register),虚拟机栈(Java Virtual Machine Stacks),本地方法栈(Native Method Stack)。当一个新线程被创建时,这些数据区会被一同创建。

程序计数器(Program Counter Register)被用来控制每个线程的执行,记录每个线程执行到哪了。

虚拟机栈(Java Virtual Machine Stacks)包含了栈帧,下面会给出视图。

本地方法栈(Native Method Stack)用来支持native方法,非java语言的方法。

2.所有线程共享的数据区

所有线程共享堆和方法区

(Heap)是我们最频繁处理的数据区。它储存了数组和对象。当虚拟机启动时就会创建这块数据区。垃圾回收GC主要在堆中工作。

方法区(Method Area):它存储的是已被虚拟机加载的类信息、常量(从JDK7开始已经移至堆内存中)、静态变量等数据。

运行时常量池(Runtime Constant Pool):每一个类或者接口,在其编译后生成的 .class文件中,有一个部分叫做 常量表(constant_pool_table),JVM将class文件加载以后,就解析常量表的内容到运行时常量池。

JVM-Stack.png

栈包含了若干个栈帧,当一个方法被调用时,一个栈帧就会被推入栈中。一个栈帧包含了局部变量数组(Local Variable Array),操作数栈( Operand Stack),常量池引用(Reference to Constant Pool)三部分。

有关更多信息,请到JVM规范官网。

推荐阅读 JVM入门——运行时数据区

上一篇下一篇

猜你喜欢

热点阅读