JVM垃圾回收器_jdk6默认垃圾回收器

JVM垃圾回收器_jdk6默认垃圾回收器JVM垃圾回收器垃圾回收器分类说明垃圾回收器工作原理垃圾回收器分类说明如果说垃圾回收算法是内存回收的方法论,那么垃圾回收器就是内存回收的具体实现,下图展示了7中作用于不同分代的收集器。其中用于新生代的回收器包括Serial,PraNew,ParallelScavenge,回收老年代的收集器包括SerialOld,Parallelold,CMS,还有作用于回收整个java堆的G1收集器,不同收集器之间的连线表示他们可以搭配使用。Serial收集器(复制算法):新生代单线程收集器,标记和清理

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

垃圾回收器分类说明

如果说垃圾回收算法是内存回收的方法论,那么垃圾回收器就是内存回收的具体实现,下图展示了7中作用于不同分代的收集器。其中用于新生代的回收器包括Serial,PraNew,Parallel Scavenge,回收老年代的收集器包括 Serial Old ,Parallel old,CMS,还有作用于回收整个java堆的G1收集器,不同收集器之间的连线表示他们可以搭配使用。
在这里插入图片描述

  1. Serial收集器(复制算法):新生代单线程收集器,标记和清理都是单线程的,优点是简单高效
  2. ParNew收集器(复制算法):新生代多线程收集器,实际是Serial 收集器的多线程版本,在多核CPU的环境下有着比Serial跟好的表现。
  3. Parallel Scavenge收集器(复制算法):新生代并行收集器,追求高吞吐量,高效利用CPU,吞吐量=用户线程时间/(用户线程时间+GC线程时间),高吞吐量课高效率的利用CPU时间,尽快完成程序计算任务,适合后台应用等交互相应要求不高的场景;
  4. Serial Old收集器(标记-整理算法):老年代单线程收集器,Serial收集器的老年代版本
  5. Parallel Old 收集器(标记-整理算法):老年代多线程并行收集器,吞吐量优先,Parallel Scavenge 收集器的老年代版本
  6. CMS(Concurrent Mark Sweep)收集器(标记-清除算法) :老年代并行收集器,以获取最短回收停顿时间为目标的收集器,具有高并发,低停顿的特点,最求最短的GC回收停顿时间。CMS 是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器,对于要求服务器响应速度的应用上,这种垃圾回收器非常合适。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS 是采用标记-清除算法所以gc的时候会产生大量的内存碎片,当剩余内存不满足程序运行要求时,系统将会出现Concurrent ModeFailure,临时CMS 会采用Serial Old 回收器进行垃圾回收,此时性能将会被降低。
  7. G1(Garbage First) 收集器(标记-整理算法):java堆并行收集器,G1收集器是JDK1.7提供的一个新的收集器,G1收集器基于“标记-整理”算法实现,也就是说不会产生哪内存碎片。此外G1 收集器不同于之前的收集器的一个重要特点:G1回收的范围是整个java堆,而之前六种收集器回收的范围仅限于老年代或新生代。

垃圾回收器工作原理

分代回收器有两个分区,老年代和新生代,新生代默认的空间占比总空间的1/3,老年代的默认占比2/3。
新生代使用的是复制算法,新生代里有三个区,Eden,To Survivor ,From Survivor,他们默认占比是8:1:1,执行流程如下:

  1. 把Eden+From Survivor 存活的对象放入 To Survivor 区
  2. 清空 Eden 和From Survivor 分区
  3. From Survivor 和To Survivor 分区交换,From Survivor 变TO Survivor ,To Survivor 变 From Survivor
    每次都在FromSurvivor 到To Survivor 移动时都存活的对象,年龄就加一,当你年龄达到15(默认配置是15)时,升级为老年代。大对象也会直接进入老年代。老年代当空间占比占用达到某个值之后就会触发全局垃圾回收,一般使用标记整理的执行算法,以上这些循环往复就构成了整个分代垃圾回收的整体执行流程。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194847.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号