javac
java
JVM是如何运行这个Java程序的:
1. JVM启动并完成初始化。Hotspot初始化做的事情很多很多
2. 完成类加载器的创建,然后去找main方法所在的类
3. 触发加载阶段将硬盘上的字节码文件载入内存,进行解析,生成klass对象
字节码解析器的工作
class文件
klass模型
元空间
4. 根据方法名及方法描述符,在这个klass对象中找到main方法
5. 构建方法运行环境
6. 调用方法
字节码指令
7. 调用完清理环境
内存模型
用的JVM自己的
执行引擎
虚拟机栈
栈帧
字节码指令
完全模仿Hotspot的
—————————-
垃圾收集器
gc
jit
sync
1M
执行流
gc root
oop
jvm + JNI
————————
Hotspot
云原生
java
c++
汇编
硬编码、机器码
jvm解释器
字节码解释器
模板解释器 执行流
机器码
汇编
栈帧
1、写这种文字
2、花堆栈图 下节课
0 getstatic #2
1、取静态属性
2、压入栈
3 ldc #3
1、从常量池(运行时常量池)取出字符串对象
2、字符串对象压入栈
5 invokevirtual #4
aa(int a, int b, int c)<br /> <br /> 解析它的签名得到的<br /> <br /> println(String)<br /> <br /> obj, println, String.class<br /> <br /> sout(add())
1、构建运行环境:创建栈帧……、参数出栈、给this指针赋值<br /> 2、执行方法<br /> jdk自带的(反射实现的) 奇特的问题<br /> 自定义的(6节课、方法重复调用、嵌套调用……)
静态方法中为什么不能调用非静态方法
非静态方法中是可以调用静态方法的
输出
8 return
清理
栈帧
如果是最好一个栈帧,清理虚拟机栈
栈帧
虚拟机栈