JVM学习-(2)

垃圾回收的算法

1,引用计数法

2,标记清除法

3,标记压缩法

  与2的区别在于进行回收时,会把对象压缩到内存的一端

4,复制法

5,分代法

  年轻代  老年代  永久代分别用不同的算法

垃圾回收器

1,串行的垃圾回收器

  单线程的进行垃圾回收,同时要暂停java应用的所有线程,一直到垃圾回收完毕。这种现象就是 (stop-the-word)

2,并行垃圾回收器

  并行垃圾回收器是在串行垃圾回收器的基础上做了改进,将单线程改为了多线程,这样可以缩短垃圾回收时间

  a,ParNew垃圾收集器,主要工作在年轻代上,只是将串行的垃圾回收器改为了并行

  b,ParallelGC收集器工作机制和ParNewGC收集器一样,只是在此基础之上,新增了两个和系统吞吐量相关的参数,使得其使用起来更加的灵活和高效。

3,CMS垃圾回收器

  CMS全称 Concurrent Mark Sweep,是一款并发的、使用标记-清除算法的垃圾回收器,该回收器是针对老年代垃圾回收的,通过参数-XX:+UseConcMarkSweepGC进行设置。

4,G1垃圾回收器

  G1垃圾回收器是jdk1.7推出来的,jdk9用来代替CMS垃圾回收器成为默认的垃圾回收器,该回收器取消了之前年轻代,老年代的物理划分,取而代之的是将堆分为若干个区域,这样做的好处其实就是我们不必对每个代进行单独的设置

  在G1划分的区域中,年轻代的垃圾收集依然采用暂停所有应用线程的方式,将存活对象拷贝到老年代或者Survivor空间,G1收集器通过将对象从一个区域复制到另外一个区域,完成了清理工作。这就意味着,在正常的处理过程中,G1完成了堆的压缩(至少是部分堆的压缩),这样也就不会有cms内存碎片问题的存在了。在G1中,有一种特殊的区域,叫Humongous区域。

  a,Young GC主要是对Eden区进行GC,它在Eden空间耗尽时会被触发。

  b,Mixed GC,当越来越多的对象晋升到老年代old region时,为了避免堆内存被耗尽,虚拟机会触发一个混合的垃圾收集器,即Mixed GC,该算法并不是一个Old GC,除了回收整个Young Region,还会回收一部分的Old Region,这里需要注意:是一部分老年代,而不是全部老年代,可以选择哪些old region进行收集,从而可以对垃圾回收的耗时时间进行控制。

猜你喜欢

转载自www.cnblogs.com/wangpengtao/p/10439071.html