深入理解java虚拟机-主体
2016-08-12 10:37:20 0 举报
AI智能生成
登录查看完整内容
java 虚拟机分析
作者其他创作
大纲/内容
深入理解java虚拟机
内存区域分析
程序计数器
线程私有
虚拟机栈
本地方法栈
堆
存放对象实例
垃圾回收器主要作用区域
方法区
已加载类信息
常量
静态变量
编译后代码
直接内存
nio
对象生命周期
创建
类是否加载
分配内存
初始化内存及对象头
<init>
结构
对象头
哈希码
GC 年龄
偏向锁标志
......
实例数据
对齐填充
访问方式
使用句柄
直接指针
垃圾收集
判断是否回收算法
引用计数器算法
可达性分析算法
垃圾回收算法
标记-清除算法
最基本算法
不足
效率不高
空间碎片化
复制算法
常用来回收新生代
标记-整理算法
常用来回收老年代
分代收集算法
不同代采用不同算法
垃圾收集器
Serial收集器
单线程
stop the world
简单高效
新生代:复制算法 老年代:标记-整理算法
ParNew收集器
Serial收集器多线程版本
Parallel Scavenge收集器
复制算法的新生代收集器
提升吞吐量
用于后台及少交互的任务
Serial Old收集器
Serial收集器老年代版本
Parallel Old收集器
Parallel Scavenge收集器老年代版本
CMS收集器
最短回收停顿时间
G1收集器
对象内存分配
新生代
Eden区
新对象优先分配此区
Survivor区
from survivor
to survivor
可用空间为Eden+一个Survivor区,另一个Survivor为操作存储中介
老生代
大对象直接分配在老生代
存活时间长的对象
GC
Minor GC
只清理新生代
Full GC
新生代老年代一起清理
类文件结构
魔数
u4
0XCAFEBABE
JDK版本号
次版本号
u2
主版本号
45开始
常量池
长度
数据(11+3种)
字面量
文本字符串
final 常量
符号引用
类和接口
字段
方法
访问标志
标识类或接口访问信息
索引
类索引
父类索引
接口索引
若干 u2
字段表
字段访问标识
简单名称
描述符
属性表集合
方法表
同字段表
属性表
Code 属性
方法表字节码指令
javap 命令
类加载机制
加载
全限定名获取Class字节流
字节流转化为方法区数据结构
内存生成 Class 对象,方法区数据访问口
验证
文件格式
元数据
字节码
准备
为类变量分配内存并初始化
解析
常量池符号引用替换为直接引用
初始化
执行过程
<cinit>所有类static调用
线程加锁
执行时机
new 或者获取 static 信息
反射
父类
虚拟机启动主类
JDK7动态语言
使用
卸载
指令
操作码长度为一个字节
大部分指令将 boolean、byte、char、short 转化为 int操作
分类
加载存储指令
传输栈帧中的局部变量表和操作数栈数据
运算指令
类型转换指令
对象创建和访问指令
操作数栈管理指令
控制转移指令
方法调用和返回指令
异常处理指令
同步指令
执行引擎
解释执行
解释器
编译执行
即时编译器(JIT)
栈帧
方法调用执行数据结构
局部变量表
方法表 Code 属性max_locals 确定大小
单位:slot
操作数栈
方法表 Code 属性max_stacks 确定大小
动态连接
方法返回地址
附加信息
0 条评论
回复 删除
下一页