码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 几种常见的垃圾回收器和垃圾回收算法


    目录

    常用版本默认垃圾回收器

    1. Serial 收集器(串行收集器)

    2. Serial Old 收集器

    3. ParNew 收集器

    4. Parallel scavenge 收集器(吞吐量优先收集器)

    5. Parallel old 收集器

    6. CMS 收集器(时间优先收集器)

    7. G1 收集器

    标记清除算法

    标记整理算法

    复制算法


    常用版本默认垃圾回收器

    • jdk1.7 默认垃圾收集器Parallel Scavenge+Parallel Old(吞吐量优先垃圾回收器)
    • jdk1.8 默认垃圾收集器Parallel Scavenge+Parallel Old(吞吐量优先垃圾回收器)
    • jdk1.9 默认垃圾收集器G1(进一步降低STW时间,同时兼顾良好的吞吐量)


    在cmd中输入,查看当前jdk的垃圾回收器

    java -XX:+PrintCommandLineFlags -version
    

    1. Serial 收集器(串行收集器)

    工作在新生代,采用单线程,进行回收垃圾时,必须暂停所有其它线程——stop the world,采用复制算法;能与CMS收集器配合工作,但效果不好

    2. Serial Old 收集器

    工作在老年代,与Serial 收集器相同工作方式,采用“标记—整理算法”

    3. ParNew 收集器

    工作在新生代,本质为Serial收集器的多线程版本,采用“复制算法”;只有它能与CMS收集器配合工作

    4. Parallel scavenge 收集器(吞吐量优先收集器)

    工作在新生代,JDK8默认新生代垃圾回收器,使用需求为高吞吐量时使用该收集器,采用“复制算法”;

    5. Parallel old 收集器

    工作在老年代,Parallel scavenge 收集器的老年代版本,采用的是“标记-整理”算法;

    6. CMS 收集器(时间优先收集器)

    工作在老年代,即Concurrent Mark Sweep收集器,追求最短停顿时间,采用“标记-清除”算法;

    只有在初始标记和重新标记时,会STW,消耗时间很短,而并发标记和并发整理清除消耗时间最长 

    卡表:JVM 在进行垃圾收集的时候,有一项非常重要的工作就是确定这一次垃圾收集的对象到底有多少个,卡表设计目的尽量减少无用的垃圾扫描范围

    卡表是 CMS 的解决方案

    7. G1 收集器

    全代回收器,可以设置STW的时间,将整个堆分为内存大小相等的区域(Region),每个区域有一个称为回收价值的属性,G1通过该属性判断是否进行垃圾回收,从而达到最高垃圾回收效率


    标记清除算法

    优点:速度快

    缺点:内存不连续,会有内存碎片产生

    标记整理算法

    优点:没有内存碎片

    缺点:需要移动对象,速度慢

    复制算法

    将内存空间二等分, 每次只使用其中一块,找出其中不是垃圾的对象

     将不是垃圾的对象移动到另一半内存空间

    整体删除之前内存的对象,然后两个内存地址互换

    优点:内存不会发生碎片化

    缺点:堆的使用效率低, 只有1/2

  • 相关阅读:
    java计算机毕业设计婴幼儿玩具共享租售平台源程序+mysql+系统+lw文档+远程调试
    phtread_cancel函数用于取消线程,但不是实时的
    使用“文心一言”编写技术博文《搭建企业知识库:基于 Wiki.js 的实践指南》
    input允许多行输入
    用户代理字符串检测技术【1】
    mybatis配置文件
    Clickhouse 索引原理
    数据结构001:最大子数组和
    大数据指标 透视50个DeFi头部协议
    在群晖NAS上搭建导航页_通过Web Station搭建
  • 原文地址:https://blog.csdn.net/m0_46628950/article/details/125994774
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号