JVM体系

》类加载机制
》编译与反编译
》JVM内存结构
》JVM内存模型
》垃圾回收
》JVM参数及调优
》JVM对象模型

垃圾回收算法

标记清除

标记:先通过跟结点,标记从根节点开始的对象,没有标记的为垃圾对象
清除:清除垃圾对象
特点:效率不高,会产生碎片空间

复制算法

将内存区域划分为两个区域,当一个区域执行了GC以后,将这个区域的的存活的对象复制到另外一块没有使用的区域。
特点:不会残剩碎片区域,但是会把内存减少一半,效率低

分代回收算法:

不是一种新的算法,只是针对堆的区域的不同,而进行的特定的算法
新生代:对象死的多,选用复制算法
老年代:对象存活的多,选用标记清除或者标记-整理

整理

整理=标记清除算法+整理
整理:清理完成以后,会把所有的存活的对象进行整理

GC相关参数

-XX:+PrintGCDateStamps 打印 GC 日志时间戳。
-XX:+PrintGCDetails 打印 GC 详情。
-XX:+PrintGCTimeStamps: 打印此次垃圾回收距离jvm开始运行的所耗时间。
-Xloggc: 将垃圾回收信息输出到指定文件
-verbose:gc 打印 GC 日志
-XX:+PrintGCApplicationStopedTime 查看 gc 造成的应用暂停时间
XX:+PrintTenuringDistribution, 对象晋升的日志
-XX:+HeapDumpOnOutOfMemoryError 内存溢出时输出 dump 文件。

对象存活的判断

可达性分析算法

    思路:通过根节点,向下搜索,当有对象跟根节点没有关联的时候,就是不存活        对象

引用计算法

    思路:在各个对象中添加一个引用计数器。当有引用指向这个对象的时候,数量加一,当取消指向的时候,数字减一,当为0 的时候,则该对象不存活

垃圾收集器(HotSpot虚拟机)

Serial(串行收集器)

特点:单线程,在它工作的时候,要停止一切用户线程(Stop the world),值到结束
    针对新生代的收集器
    采用复制算法
    简单高效(跟单线程相比)

Parnew:(serial的多线程版本)

特点:它是许多运行在Server模式下的虚拟机的首要选择
    与CMS共同工作
    其余特征与serial类似
    多线程

Parallel Scavenge

特点:多线程 并行  采用复制算法 新生代收集器
关注点是吞吐量(如何高效的利用cpu)

Serial old:serial的老年代版本

特定:单线程 
    Server模式的用途
    与parallrl Scavenge搭配使用
    CMS的后备方案
    针对老年代
    采用:标记 整理 压缩算法

Parallal Old

特点:针对老年代
采用:标记 整理 压缩算法
多线程
在jdk1.6以后,用来替代serial old

CMS(Concurrent Mark Sweep):

一种以最短回收时间为目标的收集器
特点:针对老年代 采用 标记清除算法,产生内存碎片
    速度快,并发,低停顿,需要更多的内存
运行流程
    初始标记:暂停其他线程,标记可以被GC-roots可以关联到的对象,速度快
    并发标记:进行 GC Roots tracing , 消耗时间最长,但是不会STW.
        (GC Roots Tracing :对象是有必要执行finallize()和有没有覆盖,没有则可以真正的回收,如果有,则会被放置到F-Queue,然后进行二次标记,如果建立了引用链,,就会移除F-Queue队列,反之则会被回收)
    重新标记:修正因为用户进程而造成的标记的对象的改变,还是会STW,但是时间比初始标记更加的短
    并发清除:开启用户线程,同时GC线程开始对为标记的区域做清扫,回收所有的垃圾对象

G1:最新的收集器,目标用来替换CMS

特点:可预测的停顿:能让使用者明确指定在一个长度为M毫秒的时间片段内
    并行于并发:G1能充分利用CPU、多核环境下的硬件优势,使用多个CPU(CPU或者CPU核心)来缩短stop-The-World停顿时间。
    分代收集:它能够采用不同的方式去处理新创建的对象和已经存活了一段时间,熬过多次GC的旧对象以获取更好的收集效果。
    空间整合:G1从整体来看是基于“标记整理”算法实现的收集器;从局部上来看是基于“复制”算法实现的。
运行流程:
    初始标记:标记GC Roots可以关联的对象,修改TAMS,会停顿,时间短
    并发标记:对标记的对象进行可达性分析,找出存活的对象,时间长,与用户线程并发执行
    最终标记:修改因为用户线程而造成的线程的修改,会停顿,并发执行
    筛选回收:与用户并行执行,筛选回收对象