原文参考:http://blog.csdn.net/c504665913/article/details/8262127
- PC寄存器(PC register):每个线程启动的时候,都会创建一个PC(Program Counter ,程序计数器)寄存器。PC寄存器里保存有当前正在执行的JVM指令的地址。
- JVM 堆栈(JVM stack):每个线程启动的时候,都会创建一个JVM堆栈。它是用来保存栈帧的。JVM只会在JVM堆栈上对栈帧进行push和pop的操作。如果出现了异常,堆栈跟踪信息的每一行都代表一个栈帧立的信息,这些信息它是通过类似于printStackTrace()这样的方法来展示的。
- 栈帧(stack frame):
- 每当一个方法在JVM上执行的时候,都会创建一个栈帧,并且会添加到当前线程的JVM堆栈上。当这个方法执行结束的时候,这个栈帧就会被移除。每个栈帧里都包含有当前正在执行的方法所属类的本地变量数组,操作数栈,以及运行时常量池的引用。本地变量数组的和操作数栈的大小都是在编译时确定的。因此,一个方法的栈帧的大小也是固定不变的。
- 局部变量数组(Local variable array):
- 这个数组的索引从0开始。索引为0的变量表示这个方法所属的类的实例。从1开始,首先存放的是传给该方法的参数,在参数后面保存的是方法的局部变量。
- 操作数栈(Operand stack):
- 方法实际运行的工作空间。每个方法都在操作数栈和局部变量数组之间交换数据,并且压入或者弹出其他方法返回的结果。操作数栈所需的最大空间是在编译期确定的。因此,操作数栈的大小也可以在编译期间确定。
- 本地方法栈(Native method stack):
- 供用非Java语言实现的本地方法的堆栈。换句话说,它是用来调用通过JNI(Java Native Interface Java本地接口)调用的C/C++代码。根据具体的语言,一个C堆栈或者C++堆栈会被创建。
- 方法区(Method area):
- 方法区是所有线程共享的,它是在JVM启动的时候创建的。它保存所有被JVM加载的类和接口的运行时常量池,成员变量以及方法的信息,静态变量以及方法的字节码。JVM的提供者可以通过不同的方式来实现方法区。在Oracle 的HotSpot JVM里,方法区被称为永久区或者永久代(PermGen)。是否对方法区进行垃圾回收对JVM的实现是可选的。
- 运行时常量池(Runtime constant pool):
- 这个区域和class文件里的constant_pool是相对应的。这个区域是包含在方法区里的,不过,对于JVM的操作而言,它是一个核心的角色。因此在JVM规范里特别提到了它的重要性。除了包含每个类和接口的常量,它也包含了所有方法和变量的引用。简而言之,当一个方法或者变量被引用时,JVM通过运行时常量区来查找方法或者变量在内存里的实际地址。
- 堆(Heap):
- 用来保存实例或者对象的空间,而且它是垃圾回收的主要目标。当讨论类似于JVM性能之类的问题时,它经常会被提及。JVM提供者可以决定怎么来配置堆空间,以及不对它进行垃圾回收。
-
相关推荐
Runtime data areas shared among all threads: Method area: holds the details of each class loaded by the class loader subsystem. Heap: holds every object being created by the threads during execution ...
JVM体系结构是指虚拟机的内部构造,包括类加载器(Class Loader)、运行时数据区(Runtime Data Areas)、执行引擎(Execution Engine)、本地接口(Native Interface)和垃圾回收器(Garbage Collector)等组成部分...
Jvm 的主要组件包括:Class Loader、Runtime Data Areas、Execution Engine、Native Method Interface 等。 Class Loader 负责加载 Java 类文件,Runtime Data Areas 负责提供 Java 程序的运行时环境,Execution ...
- **运行时数据区(Runtime Data Areas)**:包括程序计数器、虚拟机栈、本地方法栈、堆内存和方法区(在Java 8后被元空间取代)。 - **执行引擎(Execution Engine)**:解释字节码并执行指令。 - **垃圾收集器...
JVM主要包括类加载器(ClassLoader)、运行时数据区(Runtime Data Areas)、执行引擎(Execution Engine)等核心组件。 JVM性能瓶颈通常与内存管理、垃圾回收(GC)、线程调度等方面有关。内存管理涉及堆内存...
- **运行时数据区(Runtime Data Areas)**:包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。 - **执行引擎(Execution Engine)**:解释和执行字节码指令。 - **本地方法接口(Native Method Interface)**...
2. **运行时数据区(Runtime Data Areas)**:JVM在运行过程中会划分多个区域来存储不同类型的对象和数据,包括方法区、堆、栈、程序计数器和本地方法栈。 - **方法区**:存储类的元数据,如类名、方法信息等。在...
- **运行时数据区(Runtime Data Areas)**: - **方法区(Method Area)**:存储已加载的类信息、常量、静态变量等。 - **虚拟机栈(Java Virtual Machine Stack)**:每个线程都有一个独立的栈,用于存储局部...
2. 运行时数据区(Runtime Data Areas):包括堆、方法区、虚拟机栈、本地方法栈和程序计数器。 3. 执行引擎(Execution Engine):执行字节码并管理垃圾回收。 4. 类文件格式:定义了Java类文件的结构,包括常量池...
JVM主要包括以下几个组件:类装载器(Class Loader)、运行时数据区(Runtime Data Areas)、执行引擎(Execution Engine)、本地方法接口(Native Method Interface)和本地库(Native Library)。每个部分都有其...
- **运行时数据区(Runtime Data Areas)**:包括堆内存、方法区、虚拟机栈、本地方法栈和程序计数器。 - **执行引擎(Execution Engine)**:执行字节码,包括解释器和即时编译器(JIT)。 - **内存管理(Memory...
3. 运行时数据区(Run-Time Data Areas),包括堆、栈、本地方法栈、方法区和程序计数器。 Java代码的编译过程由Java源码编译器完成,主要步骤包括源码解析、注解处理和生成class文件。生成的class文件包含结构信息、...
JVM Architecture由Class Loader SubSystem、Runtime Data Areas和Execution Engine三个主要部分组成。其中,Runtime Data Areas包括Method Area、Heap Area、Stack Area、PC Registers和Native Method Stack等部分...
2. **运行数据区(Runtime Data Areas)**:包括程序计数器、虚拟机栈、本地方法栈、堆和方法区。每个线程都有自己的程序计数器和虚拟机栈,而堆和方法区是所有线程共享的内存区域。 3. **执行引擎(Execution ...
JVM由以下几个主要部分组成:类加载器(Class Loader)、运行时数据区(Runtime Data Areas)、执行引擎(Execution Engine)、本地接口(Native Interface)和垃圾收集器(Garbage Collector)。类加载器负责将....
它包括类加载器(Class Loader)、运行时数据区(Runtime Data Areas)、执行引擎(Execution Engine)等多个部分。文档中提到的`jvm.dll`和`java.exe`都与JVM相关,其中`java.exe`是启动JVM的命令行工具,而`jvm....
2. 运行时数据区(Runtime Data Areas):包括堆、方法区、虚拟机栈、本地方法栈和程序计数器。 3. 执行引擎(Execution Engine):执行字节码,包括解释器和即时编译器(JIT)。 4. 类文件格式检查器:验证类文件的...
- **运行时数据区(Runtime Data Areas)**:包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。 - **执行引擎(Execution Engine)**:负责执行字节码,包括解释器和即时编译器(JIT)。 - **本地方法接口...