谈JVM,各种过程

谈谈JVM 各种过程, XMind等我整理一下,稍后贴出 囧~
欢迎指教..
update: 2016-08-03 14:44:12 更新了图

总思路

编译过程 -> 运行过程[类加载器过程(类的装载过程) -> 执行过程]

总思路-v1.png

编译过程

.java文件 -javac编译-> .class文件 {-JIT编译(转化+优化)-> 本地方法}[执行过程,当方法执行频率高]

编译过程.png


运行过程

类加载器 -> (执行引擎 -> 本地库接口)[Java 运行时数据区] -> 本地方法库

运行过程.png


类加载器过程

[启动]类加载器(JNI) -> [扩展]类加载器 -> [系统]类加载器 -> [自定义]类加载器

类加载器过程.png


装载过程

加载文件到JVM内存 -> (校验语言规范 -> 分配结构存储类的信息 -> 该类常量池中符号更改为直接引用)[Linking] -> 类初始化

类装载过程.png


执行引擎执行过程(逐行读取指令)

Thread启动 -生成-> JVM栈 -执行方法-> 压入栈帧(包含 局部变量数组&操作数栈&运行时常量池) -> 逐行读取指令&&解释(JVM栈帧 程序计数器存放下一条指令) -> {JIT(转化+优化)-> 本地方法}[当方法执行频率高] -执行&运算-> 结果(存放 操作数栈中) -> 推出栈帧

执行引擎执行过程.png


Java 运行时数据区(贯穿整个执行过程)

共享型数据区:方法区(含运行时常量池[存放方法&变量的实际地址])、堆(存放对象实例)
隔离型数据区:JVM 栈、本地方法栈(JNI)、程序计数器

运行时数据图.png

分享到