码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java 垃圾回收机制


    ​
    ​

    活动地址:CSDN21天学习挑战赛

    目录

    • 一、什么是垃圾?
    • 二、为什么要回收?
    • 三、垃圾回收机制
    • 四、可达性分析算法
      • 1、4种可作为GC Roots的对象
    • 五、垃圾回收算法
      • 1、Marking-Sweep(标记-清除法)
      • 2、Marking-Compat(标记-整理法)

    一、什么是垃圾?

    垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。
    如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。

    二、为什么要回收?

    内存迟早都会被消耗完.
    甚至可能导致内存溢出。
    释放没用的对象,垃圾回收可以清除内存里的记录碎片。
    JVM将整理出的内存分配给新的对象。

    三、垃圾回收机制

    Java语言规范没有明确地说明JVM使用哪种垃圾回收算法,但是任何一种垃圾回收算法一般要做2件基本的事情:

    (1)发现无用信息对象.
    (2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。

    四、可达性分析算法

    可达性分析算法,也称为根搜索算法,这个算法的基本思路就是通过一系列的名为“GC Roots”的对象为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到“GC Roots”没有任何引用链相连,则证明对象是不可用的,可以对其进行垃圾回收。

    1、4种可作为GC Roots的对象

    • 虚拟机引用的对象
    • 方法区中的类静态属性引用对象
    • 方法区中常量引用对象
    • 本地方法栈中JIN(Native方法)引用的对象
      在这里插入图片描述
    • 引用类型:

    强引用(Strong Reference):最常见的普通引用,只要还有强引用指向一个对象,就不会回收
    软引用(Soft Reference):JVM认为内存不足阿时候,才会去试图回收软引用指向的对象(缓存场景)
    弱引用(Weak Reference):虽然是引用,但随时有可能被回收掉
    虚引用(Phantom Reference):不能通过它访问对象,提供对象被finalize以后,执行指定逻辑的机制。

    • 可达性级别:

    强可达(Strongly Reachable):一个对象可以有一个或多个线程可以不通过各种引用访问到的情况
    软可达(Softly Reachable):只能通过软引用才能访问到的状态
    弱引用(Weakly Reachable):只能通过弱引用访问时的状态,当弱引用被清除的时候,就符合销毁条件
    幻像可达(Phantom Reachable):不存在其他引用,并且finalize过了,只有幻像引用指向这个对象
    不可达(Unreachable):意味着对象可以被清除了

    五、垃圾回收算法

    1、Marking-Sweep(标记-清除法)

    首先标识出所有要回收的对象,然后进行清除
    标记、清除过程效率有限,有内存碎片化问题,不适合特别大的堆
    在这里插入图片描述

    2、Marking-Compat(标记-整理法)

    类似于标记-清除,但为了避免内存碎片化,它会在清理过程中将对象移动,以确保移动后的对象占用连续的内存空间

    在这里插入图片描述

  • 相关阅读:
    路由传参相应面试题
    七、监听器
    vue3事务管理案例、组件基础总结案例
    给你一个大厂面试的机会,你能面试上吗?进来看看!
    RedisTemplate缓存List的操作
    【解决】Unity3D中无法在MQTT事件中执行Animator
    小程序制作(超详解!!!)第十三节 随机数求和
    Libgdx游戏开发(6)——游戏暂停
    基于bp神经网络的pid算法,神经网络pid控制器设计
    2023-10-07 mysql-代号m-同时打开多个database-概要设计
  • 原文地址:https://blog.csdn.net/walykyy/article/details/126448443
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号