Java虚拟机笔记(1)垃圾收集(GC )

1、并行:程序的多条线程并行工作,但此时用户的线程仍然处于等待状态;

并发:用户线程和程序线程同时执行(但不一定是并行,可能会交互执行)。

2、各类垃圾收集器(标记—清除、复制算法、标记—整理、分代收集)

①Serial收集器是单线程的(简单而高效);

②ParNew收集器时Serial收集器的并行版本(即多线程);

③Parallel Scavenge收集器关注点在:达到一个可控的吞吐量(吞吐量=用户代码运行时间/(用户代码运行时间+垃圾回收时间),涉及两个参数:控制最大垃圾回收时间、设置吞吐量大小;

④Serial old收集器,是Serial收集器的老年版本,使用“标记—整理”算法,主要给client模式下的虚拟机使用;

⑤Parallel old收集器,是Parallel Scavenge收集器的老年版本,使用“标记—整理”算法;

⑥CMS收集器,使用“标记—清除”算法,目标是获取最短的停顿时间,步骤:初始标记、并发标记、重新标记、并发清除。缺点:对CPU资源敏感,当资源较少时对用户程序影响较大、无法处理浮动垃圾(浮动垃圾是指伴随程序运行产生的新的垃圾,只能在下一次Gc时处理掉)、由于“标记清除算法”会产生大量碎片,无法找到足够大的连续空间来分配当前对象;

⑦G1收集器,最新的收集器,特点:并行并发、分代收集、空间整合(基于标记—整理)、可预测的停顿。过程与CMS收集器类似:初始标记、并发标记、最终标记、筛选回收(会优先回收价值最大的Region)

3、GC日志

“Full Gc”表示这次GC发生了“Stop-the-world”

4、Java里内存自动管理包括两个方面:给对象分配内存、回收分配给对象的内存。

分配规则:

①对象优先在Eden分配

②大对象直接进入老年代

③长期存活的对象进入老年代

④动态对象年龄判断

⑤空间分配担保

你可能感兴趣的:(Java虚拟机笔记(1)垃圾收集(GC ))