判斷對象能否回收的兩種方法,以及JVM引用

判斷對象能否回收的兩種方法:引用計數算法,可達性分析算法

引用計數算法:給對象添加一個引用計數器,當該對象被其它對象引用時計數加一,引用失效時計數減一,計數為0時,可以回收。

特點:占用了一些額外的內存空間來進行計數,原理簡單,判定效率高

引用計數法簡單易實現,但無法解決循環引用的問題

(這種引用情況下,A和B的計數器始終大于等于1。)

應用:引用計數法適用于對象生命周期較短、沒有循環引用的場景,

可達性分析算法:可以通過引用鏈到達“根”的對象存活,不可到達的對象可以回收。(這個“根” 名為GC Roots)

特點:能夠正確處理循環引用,但實現相對復雜,需要遞歸遍歷對象圖。

應用:可達性分析適用于長生命周期、存在循環引用的場景,

“引用” 概念的擴充

引用強度由高到低為:

強引用:傳統理解的“引用”,“Object obj=new Object()”,強引用類型的對象不會被回收。(new 關鍵字創建的對象)

軟引用:還有用,但非必須的對象,在系統將要內存溢出時會把它進行回收。(使用 SoftReference 類創建的引用)

弱引用:本次垃圾收集存活,但只能活到下一次垃圾收集為止。(使用WeakReference 類創建的引用)

虛引用:不會對對象的生存時間構成任何影響,唯一目的只是為了能在這個對象被收集器回收時收到一個通知。(使用 PhantomReference 類創建的引用)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42354.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42354.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42354.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自動駕駛SLAM又一開源巔峰之作!深挖時間一致性,精準構建超清地圖

論文標題: DTCLMapper: Dual Temporal Consistent Learning for Vectorized HD Map Construction 論文作者: Siyu Li, Jiacheng Lin, Hao Shi, Jiaming Zhang, Song Wang, You Yao, Zhiyong Li, Kailun Yang 導讀: 本文介紹了一種用于自動…

突發!馬斯克3140億參數Grok開源!Grok原理大公開!

BIG NEWS: 全球最大開源大模型!馬斯克Grok-1參數量3410億,正式開源!!! 說到做到,馬斯克xAI的Grok,果然如期開源了! 就在剛剛,馬斯克的AI創企xAI正式發布了此前備受期待大模型Grok-1,其參數量達…

硅紀元視角 | 虛擬神經科學的突破:AI「賽博老鼠」誕生

在數字化浪潮的推動下,人工智能(AI)正成為塑造未來的關鍵力量。硅紀元視角欄目緊跟AI科技的最新發展,捕捉行業動態;提供深入的新聞解讀,助您洞悉技術背后的邏輯;匯聚行業專家的見解,…

企業需要什么樣的MES?

MES(英文全稱:Manufacturing Execution System),即制造執行系統,是面向車間生產的管理系統。它位于上層計劃管理系統(如ERP)與底層工業控制(如PCS層)之間,是制…

【Linux】:服務器用戶的登陸、刪除、密碼修改

用Xshell登錄云服務器。 1.登錄云服務器 先打開Xshell。彈出的界面點。 在終端上輸入命令ssh usernameip_address,其中username為要登錄的用戶名,ip_address為Linux系統的IP地址或主機名。 然后輸入密碼進行登錄。 具體如下: 找到新建會話…

Windows與time.windows.com同步time出錯(手把手操作)

今天我來針對Windows講解Time同步 時間問題 計算機的時間不同,過快或者過慢。(可以和自己的手機時間進行對比,手機的時間進行同步的頻率會比計算機更快,因此更精準)計算機time過快和過慢,會導致使用過程中…

想實現隨時隨地遠程訪問?解析可道云teamOS內網穿透功能

在數字化時代,無論是個人還是企業,都面臨著數據共享與遠程訪問的迫切需求。 比如我有時會需要在家中加班,急需訪問公司內網中的某個關鍵文件。 然而,由于公網與內網的天然隔閡,這些需求往往難以實現。這時&#xff0c…

代碼隨想錄 鏈表章節總結

移除鏈表元素 && 設計鏈表 學會設置虛擬頭結點 翻轉鏈表 leetcode 206 https://leetcode.cn/problems/reverse-linked-list/description/ 方法一:非遞歸新開鏈表 頭插法:創建一個新的鏈表,遍歷舊鏈表,按順序在新鏈表使…

AIGC | 在機器學習工作站安裝NVIDIA CUDA? 并行計算平臺和編程模型

[ 知識是人生的燈塔,只有不斷學習,才能照亮前行的道路 ] 0x02.初識與安裝 CUDA 并行計算平臺和編程模型 什么是 CUDA? CUDA(Compute Unified Device Architecture)是英偉達(NVIDIA)推出的并行計算平臺和編…

idea提交代碼或更新代碼一直提示token然后登陸失敗無法提交或者更新代碼

最近因為換了電腦需要對開發環境做配置, 遇到了這個問題, 應該是因為我們用到了gitlab,默認的最新的idea會有gitlab插件 強制錄入gitlab的token,如果gitlab不支持token的驗證那么問題就來了 , 不管怎么操作都無法提交或…

FPGA之術語

FPGA之術語 IOSTANDARDDIFF_SSTL12:LVCMOS33:sys_clk_p/n:rst_n:UART時鐘JTAG:GPIOONFIPCIe IOSTANDARD 在電子工程領域,DIFF_SSTL12和LVCMOS33是兩種不同的電氣標準,用于定義信號的電壓級別和特性。 IOSTANDARD是一個在FPGA(現場可編程門陣…

Spring MVC深入理解之源碼實現

1、SpringMVC的理解 1)談談對Spring MVC的了解 MVC 是模型(Model)、視圖(View)、控制器(Controller)的簡寫,其核心思想是通過將業務邏輯、數據、顯示分離來組織代碼。 Model:數據模型,JavaBean的類,用來進行數據封裝…

【cocos2dx】【iOS工程】如何保存用戶在游戲內的繪畫數據,并將數據以圖像形式展示在預覽界面

【cocos2dx】【iOS工程】如何保存用戶在應用內的操作數據,并將數據以圖像形式展示在預覽界面 設備/引擎:Mac(11.6)/Mac Mini 開發工具:Xcode(15.0.1) 開發需求:如何保存用戶在應用…

富格林:抓住正規穩健出金思路

富格林指出,凡事要學會抓住正規思路避繁就簡,才會順利達到終點。在現貨黃金市場中,投資者必須學會抓對正規趨勢,才是走向盈利出金的根本保障。以下是富格林投資總結的幾個觀點和建議,希望能幫助投資者實現穩健出金。 …

算法基礎之分治法

算法原理 對于一個規模為 n n n 的子問題,若該問題可以容易地解決則直接解決,否則將其分解為 k k k 個規模較小的子問題,這些子問題相互獨立且與原問題形式相同。遞歸地解決這些子問題,然后將各子問題的解合并得到原問題的解&a…

單鏈表詳解(2)

三、函數定義 查找節點 //查找結點 SLTNode* SLTNodeFind(SLTNode* phead, SLTDataType x) {assert(phead);SLTNode* pcur phead;while (pcur){if (pcur->data x){return pcur;}pcur pcur->next;}return NULL; } 查找節點我們是通過看數據域來查找的,查…

Arm64 基礎指令集介紹

按照字母排序順序: ● ADC:帶進位加法。 ● ADCS:帶進位加法,設置標志位。 ● ADD (extended register):擴展寄存器加法。 ● ADD (immediate):立即數加法。 ● ADD (shifted register):移位寄存…

【MySQL05】【 undo 日志】

文章目錄 一、前言二、undo 日志(回滾日志)1. 事務 id2. undo 日志格式2.1 INSERT 對應的 undo 日志2.2 DELETE 對應的 undo 日志2.3 UPDATE 對應的 undo 日志2.3.1 不更新主鍵2.3.2 更新主鍵 2.3 增刪改操作對二級索引的影響2.4 roll_pointer 3. FIL_PA…

Windows 網絡重置

netsh int ip reset 命令是用于重置 Windows 操作系統中的網絡設置和配置的命令。 在網絡故障排除、修復網絡連接問題以及清除可能存在的網絡配置沖突時非常有用。 命令詳解: netsh: 用于配置各種網絡設置 int: 用于管理網絡接口 ip: 用于管理網絡接口的 IP 配…

layui項目中的layui.define、layui.config以及layui.use的使用

第一步:創建一個layuiTest項目,結構如下 第二步:新建一個test.js,利用layui.define定義一個模塊test,并向外暴露該模塊,該模塊里面有兩個方法method1和method2. 第三步:新建一個test.html,在該頁面引入layui.js&#x…