jvm
2022-06-23 11:52:33 10 举报
jvm架构 jmm
作者其他创作
大纲/内容
编译为class文件
5 -iadd 弹出变量1和2的数值并且进行加操作存储3 -iload_2 -加载变量22 -iload_1 -加载变量1
年轻代1/3
调用内部类创建扩展类加载器
com.gh.User.java
静态变量分配内存设置初始值
往上调用到ClassLoader
将静态变量初始化为指定的值,执行静态代码块
传入路径进行注册扩展类加载器
2 -iconst_1 -istore_1 (del)
先获取加载路径
instance = createExtClassLoader();
STW
初始化
Luncher
15次分代=4bit
hello.classklass
instance == null
int b = 3 -istore_2
full GC
调用创建后返回对象
this.ucp.initLookupCache(this);
栈(FILO)
Launcher.ExtClassLoader var1 = Launcher.ExtClassLoader.getExtClassLoader();
程序计数器
堆
准备
main线程
加载生成class对象
修改
动态链接
操作数栈
this
静态链接将符号引用替换为直接内存引用
Thread.currentThread().setContextClassLoader(this.loader);
eden(8/10)
类对象加锁再创建
扩展类加载器是否已经加载过没有就去初始化
字节码执行引擎
50 -imul 弹出的数并且进行乘操作存储
hello 对象实例
s0(1/10)
var1 = System.getProperty(\"java.class.path\")
局部变量表
会一直调用父类的构造
int c = 50 -istore_3
直接内存物理内存
50 -iload_3 加载变量3
initialized = true;
synchronized(Launcher.ExtClassLoader.class)
方法出口
50 -istore_3(del)
s1(1/10)
本地方法栈
10 -bipush
this.parent = parent;
main()-栈帧
int a = 2 -istore_1
元空间(方法区)存放:静态变量,常量,类信息
这里传入parent为空
survival
System.getProperty(\"java.ext.dirs\")
类装载子系统
加载
获取读取路径
设置线程上下文的类加载器为appClassLoader
var1x是读取路径var0是传入的Ext
验证
校验class文件
解析
minor GC
this.loader设置为appClassLoader
循环注册里面的路径
new Launcher.ExtClassLoader(var1)
3 -iconst_2 -istore_2 (del)
main()xxx方法-栈帧
执行
栈
new hello
MetaIndex.registerDirectory()
会设置parent为ExtClassLoader
类加载全流程参考https://www.cnblogs.com/huxuhong/p/12769460.html
分配方法栈帧
老年代(2/3)
com.gh.User.class
this.loader = Launcher.AppClassLoader.getAppClassLoader(var1);
0 条评论
下一页