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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Xenu-死链接检测工具「建议收藏」

    Xenu-死链接检测工具「建议收藏」Xenu是一款深受业界好评,并被广泛使用的死链接检测工具。时常检测网站并排除死链接,对网站的 SEO 非常重要,因为大量死链接存在会降低用户和搜索引擎对网站的信任。我们推荐的死链接检测工具Xenu主要具有以下特征:需要下载安装,不到1M大小,用户界面非常简洁,操作简单。检测彻底:能够检测到图片、框架、插件、背景、样式表、脚本和java程序中的链接。报告形式合理多样

    2022年7月23日
    13
  • C++ typedef typename 作用

    C++ typedef typename 作用C 的一些语法让人看着费解 其中就有 typedeftypen vectorT size typesize type

    2025年7月10日
    2
  • 特立独行的理解_特立独行的感觉

    特立独行的理解_特立独行的感觉原题链接对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;其独立性就是依附于它的的幸福数

    2022年8月9日
    4
  • kotlin相比于java的好处和坏处_kotlin和java

    kotlin相比于java的好处和坏处_kotlin和java什么是Kotlin?什么是Java?主要区别:Kotlin的特点Java的特点Kotlin的历史JAVA的历史Kotlin和Java的区别Kotlin的优势Java的优势Kotlin的缺点Java的缺点哪个更好?

    2025年8月15日
    2
  • 走近webpack(3)–图片的处理[通俗易懂]

    上一章,咱们学了如何用webpack来打包css,压缩js等。这一篇文章咱们来学习一下如何用webpack来处理图片。废话不多说,咱们开始吧。首先,咱们随便找一张你喜欢的图片放到src/images

    2022年3月25日
    50

发表回复

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

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