×
新网 > 虚拟主机 > 正文

java虚拟机垃圾收集器

  • 作者:新网
  • 来源:新网
  • 浏览:100
  • 2018-04-26 15:53:54

对象的存活时间有长有短,所以对于存活时间长的对象,可以避免不必要的开销。这样我们就把内存分成新生代和老年代,下面和小编一起来了解一下吧。

 t01e13bc12995716371.jpg

<div>         对象的存活时间有长有短,所以对于存活时间长的对象,可以避免不必要的开销。这样我们就把内存分成新生代和老年代,下面和小编一起来了解一下吧。

         第一阶段,串行收集器
  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毫秒的时间片段内。
 

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:operations@xinnet.com进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

免费咨询获取折扣

Loading