java对象什么时候被垃圾回收?

devtools/2024/11/28 11:10:51/

简单一句就是:如果一个或多个对象没有任何的引用指向它了,那么这个对象现在就是垃圾,如果定位了垃圾,则有可能会被垃圾回收器回收。

如果要定位什么是垃圾,有两种方式来确定,第一个是引用计数法,第二个是可达性分析算法

引用计数法

一个对象被引用了一次,在当前的对象头上递增一次引用次数,如果这个对象的引用次数为0,代表这个对象可回收

此时demo变量指向这个对象,所以ref=1;

如果把demo设置成null,则没有变量指向这个对象,所以ref=0,如果ref=0,代表这个对象可以回收

当出现循环引用的话,则引用计数法就会失效

如果再让a=null,b=null,则会产生两个对象的ref都是1,无法被垃圾回收,所以会造成内存泄露

可达性分析方法

现在的虚拟机采用的都是通过可达性分析算法来确定哪些内容是垃圾。

首先会有一个GC Roots,如果可以跟GC Roots关联,说明不能被垃圾回收,如果不能找到,如下图的X,Y,就会被垃圾回收

X,Y这两个节点是可回收的

  • Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象
  • 扫描堆中的对象,看是否能够沿着 GC Root 对象 为起点的引用链找到该对象,找不到,表示可以回收

哪些对象可以作为GC Roots

虚拟机栈(栈帧中的本地变量表)中引用的对象

方法区中类静态属性引用的对象

方法区中常量引用的对象

本地方法栈中 JNI(即一般说的 Native 方法)引用的对象


http://www.ppmy.cn/devtools/137647.html

相关文章

如何做好一份技术文档?

打造出色技术文档的艺术 在当今技术驱动的世界中,技术文档扮演着至关重要的角色。它不仅是工程师和开发人员之间交流的桥梁,更是产品和技术成功的隐形推手。一份优秀的技术文档宛如一张精准的航海图,能够引导读者穿越技术的迷雾,…

项目缓存之Caffeine咖啡因

文章目录 理论使用 理论 🍎缓存缓存是提升系统性能的一个不可或缺的工具,通过缓存可以避免大部分重复的请求到数据库层,减少IO链接次数,进而提升整体的响应速率;缓存工具可以分为本地缓存(如Caffeine&…

小米C++ 面试题及参考答案下(120道面试题覆盖各种类型八股文)

指针和引用的区别?怎么实现的? 指针和引用有以下一些主要区别。 从概念上来说,指针是一个变量,它存储的是另一个变量的地址。可以通过指针来间接访问所指向的变量。例如,我们定义一个整型指针int *p;,它可以指向一个整型变量的内存地址。而引用是一个别名,它必须在定义的…

cocos creator 3.8 俄罗斯方块Demo 10

这里的表格是横行数列,也就是x是行,y是列,不要当x/y轴看。 1-1012-1012-1-1[-1,0]0[0,-1][0,0][0,1][0,2]0[0,0]11[1,0]22[2,0] -1012-1012-1-1[-1,0]0[0,-1][0,0][0,1][0,2]0[0,0]11[1,0]22[2,0] 2-1012-1012-1[-1,-1][-1,0]-1[-1,-1][-1…

c++ 语句解释using PointXYZIRT = VelodynePointXYZIRT;

在 C 中,using 关键字用于定义一个别名(alias),它为一个已有的类型创建一个新的名称。这使得可以用一个更简短或者更有意义的名字来替代原有的类型名,而不需要改变原有的类型定义。 语句 using PointXYZIRT Velodyne…

华三(HCL)和华为(eNSP)模拟器共存安装手册

接上章叙述,解决同一台PC上同时部署华三(HCL)和华为(eNSP)模拟器。原因就是华三HCL 的老版本如v2及以下使用VirtualBox v5版本,可以直接和eNSP兼容Oracle VirtualBox,而其他版本均使用Oracle VirtualBox v6以上的版本,…

图元交互设计

记录一下最近的可视化大作业,花了六天时间写,项目参考了app.diagram.net的设计,设计了比较多的动态效果和hover效果,功能上能够实现拖拽左侧图案在右侧创建基本图形,创建的图形可以进行颜色修改、图案删除、复制、变换…

NVR录像机汇聚管理EasyNVR多个NVR同时管理基于B/S架构的技术特点与能力应用

EasyNVR视频融合平台基于云边端协同设计,能够轻松接入并管理海量的视频数据。该平台兼容性强、拓展灵活,提供了视频监控直播、录像存储、云存储服务、回放检索以及平台级联等一系列功能。B/S架构使得EasyNVR实现了视频监控的多元化兼容与高效管理。 其采…