JVM内存模型及类加载
2022-03-16 18:55:30 11 举报
jvm详解及类加载
作者其他创作
大纲/内容
3
运行时的字符串常量
程序计数器
1创建llo
操作数栈
类型信息字段信息方法信息类加载器的引用常量池对应的class实例的引用
1
hello
字节码执行引擎
S1
字符串常量池
System.err.println(s2==s4);
System.err.println(s1==s2);
class
本地方法栈
class实例对象头
System.err.println(s3==s4);
启动类加载器
String s2 = s1.intern();
true
5
false
tlab
Class classA = new Class()
符号引用(1.类和方法的全限定名 2.字段的名称和描述符 3.方法的名称和描述符。)字面量静态常量
1、new String(he)
验证
栈
执行init方法
共享区域
初始化
解析
S3
6
堆
线程栈n...
2
to
然后当执行main方法和new创建类时,则会使用类加载器去加载类
2 hello
初始化赋零值
eden
运行时内存
动态链接
String s1 = new String(\"zzzzz\");
类装载子系统
方法区(元空间)
自定义类加载器
1、new String(llo)
第二步判断s1中的hello在常量池是否存在,不存在直接拿到堆中的hello的地址存在常量池中,并返回常量池中堆的引用
zzzzz
系统类加载器
3、new String(he)
方法出口
第三步,因为常量池中已有he\\llo所以直接创建堆中实例
2new String在堆中创建了一个实例String对象,指向常量池中的字符串
old
运行常量池
4
survivor
线程栈A
准备
字符串常量
分配内存
String s4 = s3.intern();
String s1 = new String(\"he\")+new String(\"llo\");
1创建he
3、new String(llo)
栈帧
String s3 = new String(\"he\")+new String(\"llo\");
例子1
局部变量表
拓展类加载器
加载
jvm
from
第一步,堆和常量池中都创建he\\llo,堆中相加创建hello
设置对象头
0 条评论
下一页