(1)JVM的运行模式
- Server
- Client
Client的启动比Server模式快,但是长期运行进入稳定期后Server模式的程序运行速度会比Client快,这是因为Server模式启动的是重量级的JVM,对程序进行了更多了优化。
命令行执行java -version即可查询自己电脑上的JVM运行模式:
(2)垃圾收集器之间的联系
不同的垃圾收集器可能针对不同的年代,有连线代表可以兼容。
(3)常见的年轻代垃圾收集器
- Serial收集器
采用复制算法,采用单线程进行垃圾收集,在进行垃圾收集时,必须暂停所有工作线程("Stop-The-World",导致系统全局停顿),简单高效,Client模式下默认的年轻代收集器。
- Par New收集器
采用复制算法,采用多线程进行垃圾收集,在进行垃圾收集时,必须暂停所有工作线程,在多核下执行有优势。
- Parallel Scavenge收集器
采用复制算法,采用多线程进行垃圾收集,在进行垃圾收集时,必须暂停所有工作线程,在多核下执行有优势,Server模式下默认的年轻代收集器。
(4)常见的老年代垃圾收集器
- Serial Old收集器
采用标记-整理算法,采用单线程进行垃圾收集,在进行垃圾收集时,必须暂停所有工作线程,简单高效,Client和Server模式下默认的老年代收集器。
- Parallel Old收集器
采用标记-整理算法算法,采用多线程进行垃圾收集,在进行垃圾收集时,必须暂停所有工作线程,在多核下执行有优势。
- CMS收集器
采用标记-清除算法,比较明显的问题就是容易产生大量的内存碎片,优点是并发清理低停顿,因为在整个过程和中最耗时的并发标记和并发清除过程收集器程序都可以和用户线程一起工作,所以总体来说,Cms收集器的内存回收过程是与用户线程一起并发执行的。
1. 初始标记:仅仅是标记一下GC roots 能直接关联的对象,速度很快
2. 并发标记:就是进行可达对象标记过程
3. 重新标记:重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段的时间稍长,远远比并发标记阶段时间短
4. 并发清理:并发进行垃圾清理
(5)同时用于年轻代和老年代的垃圾收集器
- G1收集器
采用复制+标记-整理算法,可以同时对年轻代和老年代进行管理,同时解决了内存碎片的问题。