可达性分析算法的基本思想,(由于该算法是JVM垃圾回收判断对象死亡的基本算法)这里,我们对上一篇讲的关于可达性分析算法做一个更加细致的研究;

   首先是根节点(GC Roots):作为可达性算法的初始节点,什么样的节点可以做为根节点呢?

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象;
  2. 本地方法区中的静态属性引用对象;
  3. 方法区中的常量引用对象;
  4. 本地方法栈中的JNI(Native方法)的引用对象;

   在可达性算法中,表示可达的标准为是否有引用链与之相连,这个时候存在内存中的对象只有垃圾对象和非垃圾对象之分,但是,很多时候,有一些对象是再内存充足的时候可以留在内存中,方便之后调用,内存出现不足时,有需要讲该类对象进行垃圾回收,为其他的对象留出空间,很多系统的缓存功能都符合上述条件;

   Java中将引用分为强引用(Strong Reference),软引用(Soft Reference),弱引用(Weak Reference),虚引用(Phantom Reference)四种,引用强度逐渐降低;

强引用就是指在程序代码中普遍存在的引用,只要强引用在,垃圾搜集器永远不会搜集被引用的对象。

软引用是用来描述一些有用但并不是必需的对象,对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。

弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。

虚引用并不影响对象的生命周期,如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。

可达性分析算法-针对的对象相关推荐

  1. 31. 如何计算对象已死(引用计数器算法、可达性分析算法)32.对象是否可 GC?33. Minor GC 和 Full GC

    31. 如何计算对象已死 31.1.引用计数器算法 引用计数器算法是给每个对象设置一个计数器,当有地方引用这个对象的时候,计数器+1,当引用失效的时候,计数器-1,当计数器为0的时候,JVM就认为对象 ...

  2. 对象是否要被回收(引用计数和可达性分析算法)

    java堆和方法区主要存放各种类型的对象(方法区中也存储一些静态变量和全局常量等信息),那么我们在使用GC对其进行回收的时候首先要考虑的就是如何判断一个对象是否应该被回收.也就是要判断一个对象是否还有 ...

  3. 深入理解JVM03--判断对象是否存活(引用计数算法、可达性分析算法,最终判定),Eclipse设置GC日志输出,引用

    本文是基于周志明的<深入理解Java虚拟机> 堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆回收之前,第一件事情就是要确定这些对象哪些还"存活"着,哪些对 ...

  4. 深入理解JVM(三)——JVM之判断对象是否存活(引用计数算法、可达性分析算法,最终判定),Eclipse设置GC日志输出,引用

    本文转载自https://blog.csdn.net/ochangwen/article/details/51406779 本文是基于周志明的<深入理解Java虚拟机> 堆中几乎存放着Ja ...

  5. 【Java 虚拟机原理】垃圾回收算法 ( 可达性分析算法 | GC Root 示例 | GC 回收前的两次标记 | finalize 方法示例 )

    文章目录 一.可达性分析算法 二.GC Root 示例 三.GC 回收前的两次标记 四.finalize 方法示例 一.可达性分析算法 在 堆内存 中 , 存在一个 根对象 GC Root , GC ...

  6. JVM 垃圾回收算法 -可达性分析算法!!!高频面试!!!

    前言:学习JVM,那么不可避免的要去了解JVM相关的垃圾回收算法,本文只是讲了讲了可达性分析算法,至于标记-清除.标记-复制,标记-整理,分代收集等等算法,会在近两天的文章中陆续更新出来. 很喜欢一句 ...

  7. 3.内存分配、逃逸分析与栈上分配、直接内存和运行时常量池、基本类型的包装类和常量池、TLAB、可达性分析算法(学习笔记)

    3.JVM内存分配 3.1.内存分配概述 3.2.内存分配–Eden区域 3.3.内存分配–大对象直接进老年代 3.3.1.背景 3.3.2.解析 3.4.内存分配–长期存活的对象进去老年代 3.5. ...

  8. JVM—引用计数和可达性分析算法(存活性判断)

    1 引用计数算法 1.1 算法思想   给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:   当引用失效时,计数器值就减1:   任何时候计数器为0时的对象就是不能再被使用. 1. ...

  9. java gc 可达性_JAVA--GC 垃圾回收机制----可达性分析算法

    在JVM 中,java 为我们提供可有效的垃圾回收机制,GC ,GC的创建无疑是为了缓解内存压力.保存有效数据.回收垃圾无效数据: 在此之前GC在我的理解中,一直只是个概念,内存中出现垃圾,GC来回收 ...

最新文章

  1. Python人脸识别+手机推送,老板来了你就会收到短信提示
  2. docker初体验:docker 自己定制镜像
  3. 大数据技术-hive窗口函数详解
  4. live555 源码分析:ServerMediaSession
  5. 虚拟主机的实现方式,真是简单啊!
  6. java 运行class 传参_JAVA 不同Class传值问题
  7. mysql 5.7.25 的安装与 安装错误修改 适用于5.7解压版
  8. E2017E0605-hm
  9. CCIE理论-第一篇-SDN概念复习
  10. 学计算机的如何学英语,怎么在电脑上学习英语
  11. Python自定义词云图形状和文本颜色
  12. 【控制】《自动控制原理》胡寿松老师-第8章-非线性控制系统分析
  13. win10cmd重置系统_win10怎么重置电脑 win10重置此电脑的方法【图文】
  14. 光立方体c语言程序,444光立方程序怎么写 光立方原理图、源代码及制作教程 - 全文...
  15. C语言游戏开发闪屏解决办法--双缓冲技术
  16. 练习-Java类和对象之包的定义
  17. 编译报错R_ARM_THM_MOVW_ABS_NC against `a local symbol
  18. osmdroid 6.0.1加载天地图在线矢量和影像数据
  19. Java中不同时区时间的转换
  20. 怎么更改當前的USERENV(#39;LANG#39;)返回值 oracle

热门文章

  1. 机器人或自动化类简历面试小技巧
  2. leetcode1646. 获取生成数组中的最大值
  3. ORA-01031: insufficient privileges解决办法
  4. SaltStack简介
  5. 简洁好用的3个研发项目管理工具
  6. iconfont 在原有的图标中,增加新的图标
  7. oracle锁资源不够,Oracle解锁,解决“ora00054:资源正忙”错误
  8. 编写程序判断输入的字母是元音(Vowel)还是辅音(Consonant)。
  9. define的函数用法
  10. std::accumulate的具体用法