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

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算法。

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

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

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


http://www.kler.cn/a/589712.html

相关文章:

  • STM32U575RIT6单片机(四)
  • 基于WebRTC与P2P技术,嵌入式视频通话EasyRTC实现智能硬件音视频交互,适配Linux、ARM、RTOS、LiteOS
  • 深度学习处理时间序列(1)
  • 嵌入式学习笔记-C语言知识点:栈的作用,C语言函数参数的入栈顺序,C++ 拷贝构造函数,数组名和指针的区别与联系,指针运算,指针和引用
  • Apache Spark_解决生产环境数据倾斜问题方案及思路
  • Tomcat新手入门指南:从零开始安装与基本配置
  • Python驱动CATIA自动化建模:科赫雪花算法实现与工程应用
  • 《解锁华为黑科技:MindSpore+鸿蒙深度集成奥秘》
  • 咪咕MG101_晨星MSO9380芯片_安卓5.1.1_免拆卡刷固件包
  • Bash语言的手动测试
  • Keepalived 多主模型与 LVS 高可用
  • 基于System V的共享内存函数使用指南
  • Flume详解——介绍、部署与使用
  • 2025深圳国际数字能源展全球招商启动,9月18日盛大开启
  • XGPT x DeepSeek:微步AI安全助手满血升级
  • 蓝桥杯备考-----》差分数组+二分答案 借教室
  • python局部变量和全局变量
  • nodejs 使用 puppeteer 打印PDF 有元素没有打印出来
  • 什么是广播系统语言传输指数 STIPA
  • 【云原生技术】容器技术的发展史