中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JVM垃圾回收有哪些常用算法

發布時間:2021-06-22 13:36:52 來源:億速云 閱讀:123 作者:chen 欄目:開發技術

這篇文章主要介紹“JVM垃圾回收有哪些常用算法”,在日常操作中,相信很多人在JVM垃圾回收有哪些常用算法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JVM垃圾回收有哪些常用算法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、前言:

垃圾回收:

在未來的JDK中可能G1會為ZGC所取代

先問自己幾個問題:

什么是垃圾?

  • 垃圾就是堆內存中(范指)沒有任何指針指向的對象實體。不具有可達性。

為什么要回收垃圾?

  • 因為我們的內存是有限的,內存長時間不清理就會導致內存溢出,OOM;

  • 只要是程序正在跑,那么就不斷生成新的對象,我們需要GC開辟新的空間分配給新的對象

我們怎么回收垃圾?

  •  依靠Java的自動內存回收機制,機制的優劣由算法決定;

  • 或者說是機制的適配度由算法和應用場景共同決定。

什么時候回收垃圾?

  • 當堆中的實體對象沒有任何指針指向的時候

二、GC的標記階段算法:

標記&清除

1、引用計數(Reference Counting):

Java已經擯棄了這種算法,因為此算法需要的額外處理過多

【優】效率高,python也在用,就像論文的引用因子一樣,沒有用的文章就應該多多回收,清理學術垃圾。

【缺】無法處理對象的相互“循環引用”,一旦形成了引用環,就沒有辦法去解決。進而造成內存泄漏

2、可達性分析?(根搜索、Tracing Garage Collection):

GC Roots = 起始節點集,從GC Roots開始向下搜索,連接的路徑為引用鏈,GC Roots不可達的對象被判為不可用。

哪些是GC Roots?

  • 虛擬棧上的棧幀的局部變量表引用的對象;

  • 方法區上常量引用

  • 方法區上靜態變量

  • 被同步鎖修飾的對象

  • 除了堆區,和堆有聯系的都是起始節點……

【優】解決了循環引用的缺點

【缺】需要遍歷

三、垃圾收集算法:

標記清除算法
復制算法
標記清除整理算法

標記-清除算法:

先mark可達對象,從根節點開始進行線性遍歷

【優】夠平均

【缺】效率不高,GC的時候導致STW,清楚后存在內存碎片(會存在一個空閑列表)

這是最快的清除算法

復制算法

先把空間分為兩個部分,把標記的對象規整地移到另一個空間中(指針碰撞的方式)

【優】高效,無需mark/sweep;沒有內存碎片;

【缺】犧牲了大量的空間,”最好你們全部是垃圾!“

標記-清除-整理算法

在標記之后清除完了再進行整理,屬于標記清除算法的優化版,無空閑列表

【優】無空閑列表,無內存碎片;空間開銷低

【缺】時間慢,需要進行多次操作。

四、finalize&內存分析工具

finalization——免死金牌

finalize是給GC調用的

【問】回收的時候會涉及到哪些操作?會伴隨著什么狀態?

  • 可觸及:正常狀態,在GC Roots的引用鏈上;

  • 可復活:需要重寫finalize方法才有的,“皇帝賜給你的重寫finalize方法”

  • 不可觸及:finalize免死金牌只能用一次,如果沒有重寫的finalize方法,那么就直接掛了。

MAT & GC Roots:

Memory Analyzer Tools 內存分析工具

分析dump文件:根據GC Roots去溯源,監控內存泄漏→ JProfiler

分區算法

將堆空間分成小空間是為了降低停頓時間,降低延遲

實際的使用都是復合算法。

String

final是寫死的,不能繼承也不能做任何修改;

Serializable修飾是跨進程

Comparable可比較的

到此,關于“JVM垃圾回收有哪些常用算法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jvm
AI

宁乡县| 大关县| 法库县| 德格县| 出国| 万山特区| 兖州市| 北流市| 定日县| 浠水县| 河西区| 清丰县| 永寿县| 崇礼县| 齐齐哈尔市| 八宿县| 手机| 长岭县| 鱼台县| 府谷县| 武威市| 阳泉市| 鸡东县| 平泉县| 淳化县| 济南市| 阿鲁科尔沁旗| 东方市| 奉新县| 鲜城| 台南县| 隆安县| 乌拉特中旗| 白山市| 永仁县| 昆山市| 杂多县| 辽宁省| 江川县| 襄垣县| 临朐县|