JVM内存结构(如下)
JVM内存结构其中
堆
、方法区
为线程共享;虚拟机
、本地方法栈
、程序计算器
则线程隔离,每个线程各有一份。
其中虚拟机栈结构如图
虚拟机栈结构本地方法栈
本地方法都是由C语言去实现的,如unsafe
类。
程序计数器
用来记录各个线程执行的字节码地址。
方法区
方法区结构常量池 --- 静态常量池 (也叫class文件常量池)主要存放:
- 字面量:例如文本字符串、final修饰的常量
- 符号引用:例如类和接口的权限定名、字段名的名称和描述符、方法的名称和描述符。
常量池 --- 运行时常量池
- 当类加载到内存中后,JVM就会将静态常量池中的内容存放到运行时的常量池中;运行时常量池里面存储的主要是编译期间生成的字面量、符号引用等等。
常量池 --- 字符串常量池
- 字符串常量池,也可以理解成运行时常量池分出来的一部分,类加载到内存的时候,字符串会存储到字符串常量池里面。
案例
public class JVMTest1 {
public static void main(String[] args) {
Demo demo = new Demo("aaa");
demo.printName();
}
}
class Demo {
private String name;
public Demo(String name) {
this.name = name;
}
public void printName() {
System.out.println(this.name);
}
}
截屏2021-07-26 20.06.53.png以上代码的在JVM中的分布如下图所示
网友评论