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

Java中的GC是什么?

        这节课给小伙伴们讲解的是GC是什么,以及Java如何判断对象可以进行回收和常见的GC算法有哪些。 这个面试题可能出现在面试笔试部分,也可能出现在面试中面试官直接问的部分。

1. GC是什么

        GC 全称 garbage collection,翻译过来叫做垃圾回收器。 GC的主要作用就是回收JVM中不再使用的对象所占内存。 JVM运行时堆内存和方法区中数据。而虚拟机栈、程序计数器、本地方法栈都是根据线程创建而创建, 随着线程销毁而销毁,所以不需要进行回收。

2. GC如何判断对象是否可以进行回收

2.1 引用计数(已淘汰)

        引用计数算法就是看对象是否被引用。如果引用则对象计数器加一。如果释放引用计数器减一。但是引用计数算法最大的问题就是循环引用问题。当出现循环引用时对象计数器至少为1.这时候对象可能已经是垃圾了,但是无法被回收。(循环引用)

2.2 可达性分析

        根达可算法没有引用计数算法中循环引用无法被回收的问题。 其主要思路是通过一系列名为GC Roots的对象作为根,从根开始往下搜索,搜索过程经过的路径称为引用链(Reference Chain),当一个对象到达GC Root时表示当前对象还在使用,如果没有引用的或者和 其他非GC Roots循环引用的内容都是垃圾。静态变量、线程变量、常量池、JNI(指针)都是GC Roots 。

 3.GC如何判断对象是否可以进行回收

3.1 标记清除算法(Mark-sweep)

  • 标记:从根节点(如栈、全局变量)开始,递归地遍历所有可达对象,并标记它们。
  • 清除:遍历整个对象空间,清除未标记的对象。

        缺点:简单,但可能产生内存碎片。

3.2 标记压缩算法(Mark-Compact)

  • 标记:与标记-清除算法相同,从根节点开始标记所有可达对象。
  • 整理:将所有标记的对象移动到对象空间的一端,整理出连续的空闲空间。

        减少内存碎片,但整理过程耗时。

3.3 复制算法(coping)

  • 复制:将对象空间分为两部分,每次只使用其中一部分。当这部分空间用完时,将所有存活对象复制到另一部分空间,然后清除原空间。

        避免内存碎片,但需要额外空间。

3.4 分代收集(Generational Collection)算法

  • 分代:将对象空间分为几代,新对象分配到年轻代,经过多次GC后,存活对象移动到年老代。
  • 收集:根据对象的年龄,选择不同的GC策略。年轻代使用复制算法,年老代使用标记-清除或标记-整理算法。

        提高GC效率,减少GC时间,是现代JVM中常用的GC算法。

都看到这里啦,点个小小的赞吧!

期待你的关注这将会是我更新的最大动力 !

关注我,回复:面试题  获取资料!!!

相关文章:

  • OpenWebUI:一站式 AI 应用构建平台体验
  • 【Leetcode】234. 回文链表
  • 调和Django与Sql server2019的关系
  • 【工具】huggingface 模型下载过程
  • Redis主从集群和哨兵集群
  • Go语言的负载均衡
  • 电子病历系统如何设计?
  • MySQL 性能优化:索引优化 + 读写分离 + Redis 缓存,TPS 提升 175% 实战解析
  • 生成式人工智能爆发:未来“人工”会被取代吗?
  • 【ARM】MDK-STM32g0xx.h文件与Define规则记录
  • C语言中qsort函数的详解,以及模拟
  • 数据通信与计算机网络——绪论
  • Spring组件初始化扩展点:BeanPostProcessor
  • CMake学习笔记(二):变量设值,源文件/文件查找
  • 为什么在域名注册后还需要进行解析?
  • 大模型时代:主流训练、微调、推理与部署框架深度解析及对比
  • Spring设计模式 八股速记 高层模块底层模块 依赖倒置原则 开闭原则 接口隔离原则
  • 洛谷每日1题-------Day22__P1421 小玉买文具
  • 技术债务的隐患:何时重构,何时妥协?
  • 【认知框架重构】
  • 商务部:对原产于美国、欧盟、台湾地区和日本的进口共聚聚甲醛征收反倾销税
  • 穆迪下调美国主权信用评级
  • 下周或迎外贸“抢出口”高峰,跨境电商敏感货物如何便利化“登机”?
  • 夜读丨什么样的前程值得把春天错过
  • 中欧互动中的合作与分歧:务实需求将克服泛安全化的“政治钟摆”
  • 商务部召开全国离境退税工作推进会:提高退税商店覆盖面,扩大入境消费