JVM垃圾回收器_jdk6默认垃圾回收器
JVM 默认 垃圾 回收 jdk6
2023-06-13 09:13:39 时间
大家好,又见面了,我是你们的朋友全栈君。
JVM垃圾回收器
垃圾回收器分类说明
如果说垃圾回收算法是内存回收的方法论,那么垃圾回收器就是内存回收的具体实现,下图展示了7中作用于不同分代的收集器。其中用于新生代的回收器包括Serial,PraNew,Parallel Scavenge,回收老年代的收集器包括 Serial Old ,Parallel old,CMS,还有作用于回收整个java堆的G1收集器,不同收集器之间的连线表示他们可以搭配使用。
- Serial收集器(复制算法):新生代单线程收集器,标记和清理都是单线程的,优点是简单高效
- ParNew收集器(复制算法):新生代多线程收集器,实际是Serial 收集器的多线程版本,在多核CPU的环境下有着比Serial跟好的表现。
- Parallel Scavenge收集器(复制算法):新生代并行收集器,追求高吞吐量,高效利用CPU,吞吐量=用户线程时间/(用户线程时间+GC线程时间),高吞吐量课高效率的利用CPU时间,尽快完成程序计算任务,适合后台应用等交互相应要求不高的场景;
- Serial Old收集器(标记-整理算法):老年代单线程收集器,Serial收集器的老年代版本
- Parallel Old 收集器(标记-整理算法):老年代多线程并行收集器,吞吐量优先,Parallel Scavenge 收集器的老年代版本
- CMS(Concurrent Mark Sweep)收集器(标记-清除算法) :老年代并行收集器,以获取最短回收停顿时间为目标的收集器,具有高并发,低停顿的特点,最求最短的GC回收停顿时间。CMS 是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器,对于要求服务器响应速度的应用上,这种垃圾回收器非常合适。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS 是采用标记-清除算法所以gc的时候会产生大量的内存碎片,当剩余内存不满足程序运行要求时,系统将会出现Concurrent ModeFailure,临时CMS 会采用Serial Old 回收器进行垃圾回收,此时性能将会被降低。
- G1(Garbage First) 收集器(标记-整理算法):java堆并行收集器,G1收集器是JDK1.7提供的一个新的收集器,G1收集器基于“标记-整理”算法实现,也就是说不会产生哪内存碎片。此外G1 收集器不同于之前的收集器的一个重要特点:G1回收的范围是整个java堆,而之前六种收集器回收的范围仅限于老年代或新生代。
垃圾回收器工作原理
分代回收器有两个分区,老年代和新生代,新生代默认的空间占比总空间的1/3,老年代的默认占比2/3。 新生代使用的是复制算法,新生代里有三个区,Eden,To Survivor ,From Survivor,他们默认占比是8:1:1,执行流程如下:
- 把Eden+From Survivor 存活的对象放入 To Survivor 区
- 清空 Eden 和From Survivor 分区
- From Survivor 和To Survivor 分区交换,From Survivor 变TO Survivor ,To Survivor 变 From Survivor 每次都在FromSurvivor 到To Survivor 移动时都存活的对象,年龄就加一,当你年龄达到15(默认配置是15)时,升级为老年代。大对象也会直接进入老年代。老年代当空间占比占用达到某个值之后就会触发全局垃圾回收,一般使用标记整理的执行算法,以上这些循环往复就构成了整个分代垃圾回收的整体执行流程。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194847.html原文链接:https://javaforall.cn
相关文章
- 《面试季》经典面试题-JVM篇(一)
- jvm的垃圾回收器_java 垃圾回收器
- JVM相关 - 深入理解 System.gc()
- https://haobin.work/2021/12/01/jvm/jvm参数调优/
- Volatile:JVM 我警告你,我的人你别乱动!
- 阿里P8架构师爆肝分享内部开源的JVM垃圾回收PDF文档,共23.3W字
- 相信自己,这次一把搞定JVM面试(上篇)
- Tomcat的JVM设置和连接数设置详解编程语言
- visualVM远程监控JVM详解编程语言
- Linux下调整JVM参数的步骤(linux设置jvm参数)
- 参数Linux下修改JVM参数的指南(linux修改jvm)
- Oracle JVM大路在何方(jvm路径 oracle)
- 解锁Oracle指引你的JVM下载之旅(jvm下载oracle)
- Oracle中Java虚拟机的应用与研究(oracle中jvm)
- Oracle JVM安装指南(oracle jvm安装)
- 在Oracle JVM环境下进行下载的指南(oracle jvm下载)
- 基于JVM调优的技巧总结分析