说道JVM不得不提的几个点:
一、java 内存区域:
1程序计数器 program counter register
2元数据区metaspace
3本地方法栈native method stacks
4JVM栈 jvm stacks
5堆heap old区 young( eden s0 survivor1)
code cache
二、JAVA内存模型
1程序计数器
一级缓存
二级缓存
三级缓存
主内存
JAVA堆区的垃圾回收
三、垃圾回收机制:
1引用计数法 相互循环引用问题
2可达性分析算法 HotSpot用的这个
四、垃圾收集算法
名称 理解 不足
1标记-清除算法 Mark-Sweep 效率都不高,大量不连续的内存碎片
2复制算法 当这一块的内存用完了,就将还存活着的对象复制到另外一块上面 内存缩小为了原来的一半,分配担保 (新生代用这种方法)
3标记整理算法Mark-Compact 让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存 无 (老年代)
4分代收集算法Generational Collection 综合上述,新生代用复制,老年代用标记整理算法
到了安全点才能STOP THE WORLD 扩展为安全区
五、垃圾收集器
年轻代YOUNG(复制算法)
1Serial收集器(串行收集器) 它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束
2ParNew 收集器 Serial 收集器的多线程版本
3Parallel Scavenge收集器 吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)
老年代TENURED(标记-清除/标记整理算法 )
1Serial Old 收集器 Serial Old 是 Serial 收集器的老年代版本
2Parallel Old收集器 Parallel Old 是 Parallel Scavenge 收集器的老年代版本
3CMS收集器 Concurrent Mark Sweep 是一种以获取最短回收停顿时间为目标的收集器
初始标记(CMS initial mark)并发标记(CMS concurrent mark)重新标记(CMS remark)并发清除(CMS concurrent sweep)
导致吞吐量降低,无法初灵并发清楚阶段产生的浮动垃圾,产生空间碎片
G1(Garbage-First)收集器 将整个 Java 堆划分为多个大小相等的独立区域(Region)(三层标记+整理)
初始标记(Initial Marking)
并发标记(Concurrent Marking)
最终标记(Final Marking)
筛选回收(Live Data Counting and Evacuation)
JVM配置项
-Xms20M 初始化JAVA堆的大小
-Xmx20M java堆可以扩展到的最大值
-Xmn10M 年轻代大小为
-XSS 每个线程虚拟机栈及堆栈的大小
-XX