专栏首页gang_luoJVM垃圾判断

JVM垃圾判断

JVM内存机构

  1. 虚拟机栈
  2. 本地方法栈
  3. 程序计数器
  4. 方法区

其中程序计数器虚拟机栈本地方法栈3个区域随线程启动与销毁, 因此这几个区域的内存分配和回收都具有确定性,不需要过多考虑回收的问题。而Java区和方法区则不一样,这部分内存的分配和回收是动态的,正是垃圾回收需要关注的部分。

如何确定垃圾是否可回收的两种算法

  1. 引用计数算法
  2. 可达性算法

引用计数算法

给对象添加一个引用计数器,每当有一个地方引用它时,计数器值+1,每当一个引用失效时,计数器-1.当对象的计数器为0的时候,就表示对象是没有在被引用的了

优点:实现简单,判定效率高

缺点:如果出现A对象引用B对象,B对象引用A对象的循环引用情况,会导计数器永远不为0

可达性算法

通过一个叫"GC Root根"的对象引用作为起点,一直往下进行搜索引用,所走过的路称为引用链,当一个对象GC Root根是没有任何引用到它的时候,则证明这个对象是废弃的,也就是可以回收的。这就是可达性分析算法。

哪些对象可以充当GC ROOT根对象?

  1. 虚拟机栈中的引用对象
  2. 方法区中类静态属性引用的对象
  3. 方法区中常量引用的对象
  4. 本地方法栈中引用的对象

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java中四种引用类型:强引用,软引用,弱引用,虚引用

    类似Object obj = new Object()这类似的引用,强引用在程序代码中普遍存在,只要强引用在,垃圾搜集器永远不会搜集被引用的对象。也就是说,宁愿...

    gang_luo
  • Java常用设计模式--代理模式(Proxy Pattern)

    所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。代理模式(Proxy Pattern)属于结构型模式。

    gang_luo
  • centos7安装kubernetes教程

    Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

    gang_luo
  • 「每日五分钟,玩转JVM」:两种算法

    上篇文章,我们了解了GC 的相关概念,这篇文章我们通过两个算法来了解如何去确定堆中的对象实例哪些是我们需要去回收的垃圾对象。

    山禾说
  • Android内存管理(垃圾回收算法相关)

    给对象添加一个引用计数器,每当有一个地方引用它的时候,计数器的值就加1;当引用失效的时候,计数器的值就减1;任何时刻计数器为0的对象是不可能再被引用的。

    Anymarvel
  • Android内存管理(七)垃圾回收算法相关

    给对象添加一个引用计数器,每当有一个地方引用它的时候,计数器的值就加1;当引用失效的时候,计数器的值就减1;任何时刻计数器为0的对象是不可能再被引用的。

    Anymarvel
  • Python的垃圾回收机制(引用计数+标

    我们都知道Python一种面向对象的脚本语言,对象是Python中非常重要的一个概念。在Python中数字是对象,字符串是对象,任何事物都是对象,而它们的核心就...

    py3study
  • Python-变量对象引用

    记住:每一个对象都有两个东西,对象类型和引用的计数器 这连个东西决定了是否自动回收。 对象的垃圾回收:每个对象保持了一个引用计数器,计数器记录了当前指向该对象...

    py3study
  • Java 虚拟机垃圾收集机制详解

    之前我们介绍过 Java 内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈三个区域随线程共存亡。栈中的每一个栈帧分配多少内存基本上在类结构确定下来...

    java乐园
  • 垃圾收集策略静态内存分配和回收动态内存分配和回收1 Java堆内存的回收2 回收无效对象的过程3 方法区的内存回收4 垃圾收集算法5 Java中引用的种类

    JavaEdge

扫码关注云+社区

领取腾讯云代金券