网站怎么提高权重,最好的产品网站建设,custom post type wordpress,网站图怎么做会高清VM内部结构 对于jvm来说他的内部结构主要分成三个部分#xff0c;分别是类加载阶段#xff0c;运行时数据区#xff0c;以及垃圾回收区域#xff0c;类加载我们放到之后来总结#xff0c;今天先复习一下类运行区域 首先这个区域主要是分成如下几个部分 下面举个例子来解释…
VM内部结构 对于jvm来说他的内部结构主要分成三个部分分别是类加载阶段运行时数据区以及垃圾回收区域类加载我们放到之后来总结今天先复习一下类运行区域 首先这个区域主要是分成如下几个部分 下面举个例子来解释一下 public class Example {// 静态变量static int staticVar 10;// 实例变量int instanceVar;public static void main(String[] args) {// 局部变量int localVar 20;// 创建对象Example example new Example();example.instanceVar 30;// 调用方法example.addAndPrint(localVar, 5);}// 两个数相加的方法public void addAndPrint(int a, int b) {int sum a b;System.out.println(Sum: sum);}
}1. 方法区Method Area 方法区存储类的结构信息、常量池、字段、方法等。 类结构Example.class 类的字节码、常量池、字段、方法等都存储在方法区。 常量池包含常量 staticVar 10常量池是类的静态数据部分。方法信息存储 main 方法、addAndPrint 方法的字节码。字段信息存储类中的静态字段 staticVar 和实例字段 instanceVar。 2. 堆区Heap 堆区存储所有通过 new 关键字创建的对象实例和数组。 对象实例当执行到 Example example new Example(); 时Example 类的一个实例会被分配到堆区。这个实例包含一个 instanceVar 字段它的初始值是 0。对象属性example.instanceVar 30; 时实例对象的 instanceVar 被更新为 30。 3. 栈区Stack 栈区存储每个方法的局部变量和方法调用的参数、返回地址等。每当一个方法调用时都会为该方法分配一个栈帧。 main 方法的栈帧 存储局部变量 localVar 20。存储方法参数 args即 String[] args虽然我们没有用到但它也会存在于栈帧中。存储局部变量 example它指向堆区中创建的 Example 对象。addAndPrint 方法的栈帧 addAndPrint 方法有两个参数 a 和 b其中 a localVar 20 和 b 5它们都存储在 addAndPrint 方法的栈帧中。存储局部变量 sum用于存储两个数相加的结果。 4. 程序计数器PC Register 每个线程有一个程序计数器PC它保存当前线程正在执行的字节码指令的地址。对于每个线程程序计数器是独立的。 main 方法的程序计数器当执行 main 方法时程序计数器指向 main 方法的字节码指令。指令顺序执行时程序计数器会根据程序流程指向不同的代码行。addAndPrint 方法的程序计数器当 main 方法调用 addAndPrint(localVar, 5) 时程序计数器会切换到 addAndPrint 方法指向 addAndPrint 方法的字节码指令。 5. 本地方法栈Native Method Stack 本地方法栈用于支持 Java 调用本地方法如 C/C。在这个例子中Java 程序没有调用本地方法因此本地方法栈没有被使用。