JVM总结
Java虚拟机
自动内存管理机制
Java内存区域和内存溢出
运行时数据区域
- 程序计数器
- Java虚拟机栈
- 本地方法栈
- Java堆
- 方法区
- 运行时常量池
- 直接内存
HotSpot虚拟机对象探秘
- 对象创建
- 对象的内存结构
- 对象的访问定位
垃圾收集器和内存分配策略
引用已死吗
- 引用计数算法
- 可达性分析算法
- 可作为GC Roots的对象
- 虚拟机栈(栈帧中的本地变量表)中引用的对象
- 方法区中类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中JNI(即一般说的Native方法)引用的对象
- 再谈引用
- 生存还是死亡
- 回收方法区
垃圾收集算法
- 标记-清除算法
- 复制算法
- 标记-整理算法
- 分代收集算法
hotspot的算法实现
- 枚举根节点
- 安全点
- 安全区域
垃圾收集器
- serial收集器
- parnew收集器
- parallel scavenge收集器
- serial old收集器
- parallel old收集器
- parallel scavenge老年代版本
- 标记-整理算法
- cms收集器
- 过程:初始标记 并发标记 重新标记 并发清除
- 标记-清除算法
- 优点:并发收集 低停顿
- 缺点:对CPU资源敏感 无法处理浮动垃圾 收集结束后会有大量碎片
- g1收集器
- 特点:并行与并发 分代收集 空间整合 可预测的停顿
- 整体看是标记-整理,局部看是复制算法
- 步骤:初始标记 并发标记 最终标记 筛选回收
- 垃圾收集器参数总结
内存分配与回收策略
- 对象优先在eden区分配
- 大对象直接进入老年代
- 长期存活的对象将进入老年代
- 动态对象年龄判定
- 空间分配担保
虚拟机性能监控和故障处理工具
JDK命令行工具
- jps:虚拟机进程状况工具
- jstat:虚拟机统计信息监控工具
- jinfo:Java配置信息工具
- jmap:Java内存映射工具