JVM结构
- 主要包含 类加载器 执行引擎 运行时数据区 本地接口
类加载器
- ClassLoader类加载器
- 双亲委派模型
- 类加载过程
- 加载
- 连接
- 初始化(执行静态代码块,静态变量)
JVM运行时数据区
VM Stack /Native Method Stack
Heap
存储对象或者数组的空间 线程共享 Heap划分 (年轻代,老年代)
- Eden (新生代 new)
- s0 幸存者区
- s1 幸存者区
- Tenured (对象超过某个大小,会直接放在这里)
JMM
Volatile
- 可见性
- 保证可见性的方法
- Volatile
- Synchronized
- fianl
指令重排
- 有序性
- 线程串行语义
- 怎么保证有序性
Trace跟踪参数
Heap内存分配参数
- Xmx
- Xms
- Heap Memory是如何分配的
查看内存的代码
- 设置运行参数
- -Xmn 新生代大小 eden+2s
- -XX:NewRatio 年轻代(eden+2s):老年代
- -XX:SurvivorRatio 2s:eden
查看
Stack内存分配参数
-Xss 对栈的深度的影响
JVM内存回收
- 标记-清除算法
- 标记阶段 标记未使用
- 清除阶段 清除未使用
- 缺点 (空间不连续,内存碎片)
- 优点 速度快
- 复制算法
- 原理 复制,整理复制内容,再清除原先内存
- 优点:内存清理干净 缺点:浪费内存,速度慢
- 标记-整理算法
- 原理 整理对象,移动到内存的一端,清除其余的部分。
- 分代收集算法
针对不同的【内存代】进行不同的算法
垃圾收集器 (算法的具体实现)
并发: 可以同时执行 并行: 可以同时执行,但要一个让一个。