谈谈JVM 各种过程, XMind等我整理一下,稍后贴出 囧~
欢迎指教..
update: 2016-08-03 14:44:12 更新了图
总思路
编译过程 -> 运行过程[类加载器过程(类的装载过程) -> 执行过程]
图
编译过程
.java文件 -javac编译-> .class文件 {-JIT编译(转化+优化)-> 本地方法}[执行过程,当方法执行频率高]
图
运行过程
类加载器 -> (执行引擎 -> 本地库接口)[Java 运行时数据区] -> 本地方法库
图
类加载器过程
[启动]类加载器(JNI) -> [扩展]类加载器 -> [系统]类加载器 -> [自定义]类加载器
图
类装载过程
加载文件到JVM内存 -> (校验语言规范 -> 分配结构存储类的信息 -> 该类常量池中符号更改为直接引用)[Linking] -> 类初始化
图
执行引擎执行过程(逐行读取指令)
Thread启动 -生成-> JVM栈 -执行方法-> 压入栈帧(包含 局部变量数组&操作数栈&运行时常量池) -> 逐行读取指令&&解释(JVM栈帧 程序计数器存放下一条指令) -> {JIT(转化+优化)-> 本地方法}[当方法执行频率高] -执行&运算-> 结果(存放 操作数栈中) -> 推出栈帧
图
Java 运行时数据区(贯穿整个执行过程)
共享型数据区:方法区(含运行时常量池[存放方法&变量的实际地址])、堆(存放对象实例)
隔离型数据区:JVM 栈、本地方法栈(JNI)、程序计数器