时间:2021-07-16 | 标签: | 作者:Q8 | 来源:网络
小提示:您能找到这篇{java虚拟机垃圾收集器}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的java虚拟机垃圾收集器内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
对象的存活时间有长有短,所以对于存活时间长的对象,可以避免不必要的开销。这样我们就把内存分成新生代和老年代,下面和小编一起来了解一下吧。
第一阶段,串行收集器
Serial收集器
Serial收集器是一个单线程收集器,并且在JVM收集的过程中,必须暂停其它正在工作的线程,直到它收集结束。历史悠久,在JDK 1.3.1之前是新生代收集的唯一选择。目前仅是JVM运行在client模式下的默认新生代收集器。(因为client端资源有限,而它在处理时停顿时间可以控制在几十毫秒以内)
Serial Old收集器
Serial Old收集器是Serial收集器的老年代版本,也是一个单线程收集器,使用标记整理算法实现。目前仅是JVM运行在client模式下收集老年代使用。
第二阶段,并行收集器
ParNew收集器
ParNew收集器是Serial收集器的多线程版本。
Parallel Scavenge收集器
Parallel Scavenge收集器和ParNew收集器类似,也是新生代收集器,使用复制算法实现。
Parallel Old收集器
Parallel Old收集器也是老年代收集器,使用标记整理算法实现。
第三阶段,CMS收集器(Concurrent Mark Sweep)
CMS收集器是一种以获取最短回收停顿时间为目的的收集器,使用标记清理算法实现,是一个针对老年代进行回收的GC。
CMS处理4个阶段:
初始标记:这个阶段需要暂停所有正在执行的线程,官方叫法是STW(Stop The World)。标记和GC Roots直接关联的对象,执行很快。
并发标记:这个阶段进行GC Root Tracing,多线程执行,继续标记可达到的对象。
并发预处理:这个阶段标记从新生代晋升的对象,新分配到老年代的对象以及并发阶段被修改的对象。
重新标记:暂停所有用户线程,重新扫描堆中的对象,进行可达性分析,标记活着的对象。
并发清除:用户线程被重新激活,同时清理那些无效的对象。
重置:CMS清除内部状态,为下次回收做准备。
第四阶段,G1收集器(Garbage-First)
G1收集器(或者垃圾优先收集器)的设计初衷是为了尽量缩短处理超大堆(大于4GB)时产生的停顿。相对于CMS的优势而言是内存碎片的产生率大大降低。在G1中,堆被划分成许多个连续的区域(region)。每个区域大小为2的倍数,大小相等,在1M~32M之间。当一个对象空间大于一个区域的50%
G1处理4个阶段:
初始标记:这个阶段是SWT的,并且会触发一次普通的Mintor GC。
并发标记:这个阶段在整个堆中进行并发标记,若发现区域对象中的所有对象都可被回收,那这个区域会立即被回收。如果有不可被回收的对象,怎样做信息流会计算该对象所在区域的对象活性(对象存活比率)。
重新标记:这个阶段是SWT的,标记上一阶段产生的垃圾。
并发清理:用户线程被重新激活,同时清理那些无效的对象。
G1优点:
并发:G1能充分利用CPU、多核环境下的硬件优势,使用多个CPU(CPU或电视广告是否要说明产品价者CPU核心)来缩短stop-The-World停顿时间。部分其他收集器原本需要停顿线程执行的GC动作,G1收集器仍然可以通过并发的方式让程序继续执行。
分代收集:虽然G1可以不需要其他收集器配合就能独立管理整个GC堆,但是还是保留了分代的概念。它能够采用不同的方式去处理新创建的对象和已经存活了一段时间,熬过多次GC的旧对象以获取更好的收集效果。
空间整合:与CMS的“标记清理”算法不同,G1从整体来看是基于“标记整理”算法实现的收集器;从局部上来看是基于“复制”算法实现的。
可预测的停顿:这是G1相对于CMS的另一个大优势,降低停顿时间是G1和CMS共同的关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段内。
|
上一篇:如何优化VMware Linux虚拟机的性能?
下一篇:Java虚拟机的内存结构
小提示:您应该对本页介绍的“java虚拟机垃圾收集器”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通java虚拟机垃圾收集器的相关事宜。
关键词:java虚拟机垃圾收集器