当前位置: 首页 > backend >正文

JVM的垃圾回收算法和多种GC算法

GC也就是java的垃圾回收机制作用区域如下:

JVM在进行垃圾回收的时候,并不是在新生区,养老区,元空间这三个区域统一回收的,大部分的时候,回收的都是新生区。新生区的幸存区可以分为from和to

GC的两种类:轻GC(普通GC),重GC(全局GC)

GC常考的问题:

  • JVM的内存模型和分区,每个分区放的什么?

  • 堆里面的分区都有哪些?说说它们的特点。

  • GC算法有哪些?

  • 轻GC和重GC分别发生在什么时候?

GC的算法:

引用计数法
复制算法:
  • 复制算法主要的作用范围就在新生区,在这个算法当中重点在于复制,也就是说幸存区里面有from和to这两个划分,我们的新生区在进行GC清理之后都会将Eden区的幸存对象转移到幸存区里面,如果转移到了from区,那么就无事发生,如果转移到了to区,那么就会从to区复制到from区里面,如果二者都有幸存对象,那么同样to区的会把幸存者复制到from区,所以我们要保证to区里面是没有幸存者的

  • 当一个对象默认经历了15次GC之后还没有被淘汰,那么就会被送入养老区这个参数是可以进行调整的-XX:MaxTenuringThreshold=?具体数值根据实际需求进行调整

  • 复制算法好处:没有内存的碎片,很整洁。

    坏处:浪费了一个幸存区的内存空间,to区永远为空。

复制算法的使用场景,对象存活度较低的时候。

标记清除算法

优点:不需要额外的空间。

缺点:两次扫描,浪费了时间,会产生内存碎片。

标记压缩算法

在标记清除的算法上面进行了优化

还有一种标记清除压缩,也不算是一种新的算法,也就是说我们进行多次的GC清除然后在进行压缩。

总结:

  • 内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度排序)。

  • 内存整齐度:复制算法=标记压缩算法>标记清除算法

  • 内存利用率:标记压缩算法=标记清除算法>复制算法

我们可以通过上面了解到,我们的GC算法并没有最好的,所以我们只能在不同情况下最合适的算法。

我们的GC分代收集算法:

年轻代:存活率低选择复制算法。

老年代:区域大,存活率高,在内存碎片不是很多的情况下,我们使用标记清除压缩算法。

http://www.xdnf.cn/news/15290.html

相关文章:

  • Redis面试精讲 Day 1:Redis核心特性与应用场景
  • Day59
  • JavaWeb(苍穹外卖)--学习笔记05(MD5)
  • 2D转换之缩放scale
  • Cursor创建Spring Boot项目
  • 关于赛灵思的petalinux zynqmp.dtsi文件的理解
  • 网络连接:拨号连接宽带PPPOE
  • 使用 Java 开发大数据应用:Hadoop 与 Java API 的结合
  • Golang 面向对象(封装、继承、多态)
  • Eureka实战
  • Git企业级开发(多人协作)
  • 【设计模式】装饰(器)模式 透明装饰模式与半透明装饰模式
  • Java生产带文字、带边框的二维码
  • Flink创建执行环境的三种方式,也是Flink搭建程序的第一步
  • React 组件中怎么做事件代理?它的原理是什么?
  • MyBatis实现分页查询-苍穹外卖笔记
  • openGauss数据库管理实战指南——基本常用操作总结
  • Sentry 集成
  • 【王树森推荐系统】行为序列02:DIN模型(注意力机制)
  • 【LeetCode453.最小操作次数使数组元素相等】
  • 深入解析C#接口实现的两种核心技术:派生继承 vs 显式实现
  • 论文阅读:HybridTrack: A Hybrid Approach for Robust Multi-Object Tracking
  • 前端开发中的资源缓存详解
  • 面试现场:奇哥扮猪吃老虎,RocketMQ高级原理吊打面试官
  • Spring Ai Alibaba Gateway 实现存量应用转 MCP 工具
  • AI领域的黄埔军校:OpenAI是新一代的PayPal Mafia,门生故吏遍天下
  • 浅谈 Python 中的 yield——生成器对象与函数调用的区别
  • 力扣 hot100 Day42
  • 若依前后端分离Vue3版本接入阿里云OSS
  • 20250712-1-Kubernetes 监控与日志管理-K8s日志管理与维护_笔记