1 java-内存区域详解
- 1.1 常见面试题
- 1.2 运行时数据区域
- 程序计数器
- Java 虚拟机栈
- 栈帧
- 局部变量表详解
- 操作数栈
- 动态链接解析
- 方法出口(方法返回地址)
- 栈帧
- 本地方法栈
- 堆
- 方法区
- 方法区和永久代的关系
- 常用参数
- 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢?
- JAVA8 与元数据
- 运行时常量池
- 直接内存
- 1.3 HotSpot 虚拟机对象探秘
- 对象的创建
- 类加载检查
- 分配内存
- 初始化零值
- 设置对象头
- 执行 init 方法
- 对象的内存布局
- 对象头
- 实例数据
- 对齐填充
- 对象的访问定位
- 句柄
- 直接指针
- 对象的创建
- 1.4 OutOfMemoryError异常(OOM)
- Java堆溢出
- 虚拟机栈和本地方法栈溢出
- 方法区和运行时常量池溢出
- 本机直接内存溢出
- 1.5 重点补充内容
文章参考
2 JVM内存管理
- 2.1 揭开 JVM 内存分配与回收的神秘面纱
- 堆空间的基本结构
- 新生代
- Eden
- From Survivor
- To Survivor
- 老年代
- 新生代
- Minor GC 和 Full GC 有什么不同呢?
- 内存分配与回收策略
- 对象优先在 eden 区分配
- 大对象直接进入老年代
- 长期存活的对象将进入老年代
- 动态对象年龄判定
- 堆空间的基本结构
- 2.2 对象已经死亡?
- 引用计数法
- 可达性分析算法
- 再谈引用
- 强引用
- 软引用
- 弱引用
- 虚引用
- 不可达的对象并非“非死不可”
- 如何判断一个常量是废弃常量
- 如何判断一个类是无用的类
- 2.3 垃圾收集算法
- 标记-清除算法
- 复制算法
- 标记-整理算法
- 分代收集算法
- 2.4 垃圾收集器
- Serial 收集器
- ParNew 收集器
- Parallel Scavenge 收集器
- Serial Old 收集器
- Parallel Old 收集器
- CMS 收集器
- G1 收集器
- 2.3 调优工具详解
- JDK命令
- jps
- jstat
- jinfo
- jmap
- jhat
- jstack
- jconsole详细使用
- jvisualvm详细使用
- JDK命令
3 JVM类加载机制详解
- 类加载的时机
- 类加载过程
- 加载
- 验证
- 准备
- 解析
- 初始化
- 类加载器分类
- 启动类加载器(Bootstrap ClassLoader)
- 扩展类加载器
- 应用程序加载器
- 启动类加载器(Bootstrap ClassLoader)
- 双亲委派模型(Parents Delegation Model)
JVM调优实战
- GC日志分析
- JVM参数调优分析