0

0

JVM高级特性-三、垃圾收集之判断对象存活算法

巴扎黑

巴扎黑

发布时间:2017-06-26 11:34:11

|

1858人浏览过

|

来源于php中文网

原创

一、概述

  运行时数据区中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭的

  因此,他们的内存分配和回收是确定的,在方法或线程结束时就回收。而Java堆和方

  法区则是不确定的,程序运行过程中创建对象的大小是不定的,只有在程序处于运行

  期才能知道所需内存的大小

 

二、“存活算法”

  要判断对象是否存活,主要有两种算法:引用计数法和可达性分析算法

  • 引用计数法

    引用计数法就是给对象加上一个引用计数器,每当对象被 引用一次

  计数器值就加1,引用时效则减1,计数器为0则表示不会再被使用。

 

  • 可达性分析算法

    可达性分析算法是主流的实现,这个算法通过成为GC ROOT的节点作为根节点,

  从此根节点向下搜索,若对象到GC ROOT没有引用链相连(即不可达)时,表示该

  对象不可用

    可作为GC ROOT的对象为:

    • 虚拟机栈中本地变量表里的引用对象

      聪豹Wiseal
      聪豹Wiseal

      聪豹Wiseal是一个专业的历史时间线收集整理工具

      下载
    • 方法去中的类静态属性引用独享

    • 方法去中的敞亮对象

    • 本地方法中的引用对象

      目前可达性分析算法已是主流算法,原因是,引用计数器算法无法解决对象互相引用的问题

    • 可达性分析判断过程

       对对象进行可达性分析之后,发现他没有任何引用链相连,则对他进行第一次标记,并进行一次筛选,

       筛选条件是是否需要执行finalize()方法,当对象没有覆盖finalize方法或已经finalize方法已经被调用过,

       则认为没有必要执行,如果判断为有必要执行,则会将他放入一个叫做F-Queue的队列中,稍后JVM

       会自动建立一个低优先级的finalizer线程去执行这些对象的finalize方法,之后GC会对F-QUEUE中的对

       象进行第二次标记,如果此时对象扔没逃脱,则将被回收。

    •  finalize()方法

       上面多次提到finalize方法,要注意,对象的finalize方法只会被系统自动调用一次。

       不建议大家使用这个方法,他的功能完成可以用try-finally替代

     

       

        

    相关专题

    更多
    Java 项目构建与依赖管理(Maven / Gradle)
    Java 项目构建与依赖管理(Maven / Gradle)

    本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

    3

    2026.01.12

    c++主流开发框架汇总
    c++主流开发框架汇总

    本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

    98

    2026.01.09

    c++框架学习教程汇总
    c++框架学习教程汇总

    本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

    53

    2026.01.09

    学python好用的网站推荐
    学python好用的网站推荐

    本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

    139

    2026.01.09

    学python网站汇总
    学python网站汇总

    本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

    12

    2026.01.09

    python学习网站
    python学习网站

    本专题整合了python学习相关推荐汇总,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.09

    俄罗斯手机浏览器地址汇总
    俄罗斯手机浏览器地址汇总

    汇总俄罗斯Yandex手机浏览器官方网址入口,涵盖国际版与俄语版,适配移动端访问,一键直达搜索、地图、新闻等核心服务。

    84

    2026.01.09

    漫蛙稳定版地址大全
    漫蛙稳定版地址大全

    漫蛙稳定版地址大全汇总最新可用入口,包含漫蛙manwa漫画防走失官网链接,确保用户随时畅读海量正版漫画资源,建议收藏备用,避免因域名变动无法访问。

    437

    2026.01.09

    php学习网站大全
    php学习网站大全

    精选多个优质PHP入门学习网站,涵盖教程、实战与文档,适合零基础到进阶开发者,助你高效掌握PHP编程。

    49

    2026.01.09

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    RunnerGo从入门到精通
    RunnerGo从入门到精通

    共22课时 | 1.7万人学习

    Midjourney基础课程
    Midjourney基础课程

    共16课时 | 1.3万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号