1. 程式人生 > >淺談JVM垃圾回收

淺談JVM垃圾回收

1、什麼情況下會觸發java垃圾回收( garbage collection

  1. 物件不再被引用
  2. 程式發生未捕捉異常
  3. 程式正常執行完畢
  4. 執行System.exit(); 或 System.gc();
  5. 程式發生意外終止

2、垃圾回收分為兩個步驟,分別是標記垃圾和進行回收,這兩步驟都依賴於不同的演算法實現

2.1 垃圾標記演算法----根搜尋演算法

從一個叫GC roots 的物件開始,向下搜尋,如果一個物件不能達到GC roots物件,說明它可以被回收了。這種演算法比一種叫 引用計數法 的垃圾標記演算法要好,因為它避免了兩個物件相互引用而無法被回收的現象。

2.2 垃圾回收演算法

  • 標記清除法:該演算法從根集合開始,掃描整個空間,並對沒有被標記的物件進行回收,這種演算法在存活物件較多時適用,但會產生記憶體碎片,因為堆是一種完全二叉樹結構。
  • 複製演算法:從根集合掃描,並將存活物件複製到新的空間,這種演算法在存活物件較少時適用,因為只需要執行復制一小部分資料。
  • 標記整理演算法:標記整理演算法在回收未被標記的物件時,會同時整理被標記的物件,解決了記憶體碎片的問題。

3 垃圾回收器

   不同的記憶體區域的作用和性質又不一樣,使用的垃圾回收演算法也不一樣,所以jvm中又定義了不同的垃圾回收器。 

相關推薦

JVM垃圾回收

1、什麼情況下會觸發java垃圾回收( garbage collection) 物件不再被引用程式發生未捕捉異常程式正常執行完畢執行System.exit(); 或 System.gc();程式發生

.NET垃圾回收-Garbage Collector

什麼是GC GC(Garbage Collector),垃圾記憶體收集,它以應用程式的root為基礎,遍歷應用程式在Heap上動態分配的所有物件,通過識別它們是否被引用來確定哪些物件是已經死亡的、哪些仍需要被使用。已經不再被應用程式的root或者別的物件所引用

java垃圾回收(一)

本文簡述java垃圾回收機制自己的一點理解,希望能對java學習的朋友有一點幫助,謝謝; 先了解下JVM: JVM百度百科詳情https://baike.so.com/doc/1063579-1125177.html JVM是Java Virtual Machine(Java虛擬機器)的

JVM垃圾回收

寫在前面 簡單的介紹一下JVM(Java Virtual Machine)吧,它也叫Java虛擬機器。雖然它叫虛擬機器,但是實際上不是我們所理解的虛擬機器,它更像作業系統中的一個程序。JVM遮蔽了各個作業系統底層的相關的東西,Java程式只需要生成對應的位元組碼檔案,然後由JVM來負責解釋執行。 介紹幾個容易

JVM-垃圾回收

本地變量 整體 垃圾回收算法 系統通知 string類型 發現 font 對象實例 rom 1.垃圾回收如何判定   1.1引用計數法     引用計數法是給對象添加一個引用計數器,當有對該對象的引用時,計數器加1,引用失效時,計數減1,計數器為0時不能再使用.該對象可以被

JVM——垃圾回收(GC)

.text 永久代 lines script from nes ng- code addclass GC簡單介紹 java語言執行在java虛擬機(jvm)上。為了解決有限的空間和性能的保證這個矛盾體,jvm所具備的GC能力。能夠有效的清除不用的對象。

一步一步學JVM-垃圾回收

-- 覆蓋 不可達 建立 class對象 如果 而且 節點 棧幀   垃圾回收器在對對象進行回收前,首先要判斷對象是否還“活著”。判斷方法有以下兩種 引用計數法 給對象中添加一個引用計數器,每當有一個地方引用它時,計數器值就加1。當引用失效時,計數器值就減

一步一步學JVM-垃圾回收算法

無法 程序 gen 適合 順序分配 存在 進行 大小 產生 標記-清除算法 算法分為標記和清除兩個階段:首先標記所有需要回收的對象,在標記完成後統一回收所有被標記的對象。 該算法存在的缺點:   1、 效率問題:標記和清除兩個過程的效率

一步一步學JVM-垃圾回收

trac 部分 current 可控 吞吐量 收集器 控制 需要 但是 Serial收集器 Serial收集器是最基本、歷史最悠久的收集器。這個收集器是一個單線程的收集器。它在進行垃圾收集時,必須暫停其他所有的工作線程,直到它收集結束。Serial收集器是

基礎JVM垃圾回收工作原理

工作原理 tts margin p s left cin lan rbm whl 勢椎僑航獵孕檔池救強http://t.docin.com/sina_5848681907 改亮簾巖吠雇行宦柿恍婦羌嚴牡http://t.docin.com/pso30606 椒孕盼搗芳派治

JVM垃圾回收機制

root 不一定 引用 不可達 tenured jvm 空間 大量 jvm垃圾回收 在java中是通過引用來和對象進行關聯的,也就是說如果要操作對象,必須通過引用來進行。那麽很顯然一個簡單的辦法就是通過引用計數來判斷一個對象是否可以被回收。不失一般性,如果一個對象沒有任何引

JVM垃圾回收算法

計數 一個 clas 失效 引用 pos 簡單 判斷 body 1.判斷對象是否已死的兩種方法 1.1 引用計數法   給對象添加一個引用計數器,如果其他對象引用計數器加一,引用失效計數器減一,當計數器為0的時候,則對象就認為是死亡的狀態   優點:實現簡單,效率高

jvm 垃圾回收概念和算法

老年代 size 一次 壓縮 分享 com 分代 優化 復制算法 1、概念   GC 中的垃圾,特指存在於內存中、不會再被使用的對象。垃圾回收有很多種算法,如引用計數法、復制算法、分代、分區的思想。 2、算法   1、引用計數法:對象被其他所引用時計數器加 1,而當引用失效

JVM垃圾回收

jvm垃圾回收1. 串行回收 一般使用在單CPU的平臺上 用-XX:+UseSerialGC打開2. 並行回收 一般使用在多CPU的平臺上 用-XX:UseParallelGC打開(年輕代使用並行回收可以減少垃圾回收的時間) 用-XX:UseParallelOldGC打開對老年代進行並收集

JVM垃圾回收--年輕代、年老點和持久代

就會 為什麽 比例 生命 system 碎片 根據 請求 min 年輕代:   一般情況下,所有新生成的對象首先都是放在年輕代的。年輕代的目的就是盡可能快速的收集掉那些生命周期短的對象。年輕代分三個區。一個Eden區,兩個 Survivor區(分別叫from和to)Eden

JVM及原理

所有 memory 控制流 校驗 activit android 類信息 amp 不同 1、什麽是JVM ? JVM, 中文名是Java虛擬機, 正如它的名字, 是一個虛擬機器,來模擬通用的物理機。 JVM是一個標準,一套規範, 規定了.class文件在其內部運行的

JVM垃圾回收問答

一個 效果 內存 並行 不必要 復制 常量 執行 引用 為什麽要有垃圾回收 內存資源是有限的,當所需內存不能滿足時,需要把不再使用的對象清除掉,否則JVM將無法運行下去 怎麽判斷對象是否是垃圾 判斷對象是否是垃圾,有兩種方式:1是標記引用計數,2是根部可達,第

JVM垃圾回收器之G1(Garbage First)--new

g1垃圾收集器 基於 後臺 指定 維護 不用 大小 算法實現 聲明   相比CMS收集器有兩個顯著的改進:   (1)、 G1收集器是基於“標記-整理”算法實現的收集器,不會產生空間碎片   (2)、 它可以精確地控制停頓,能讓使用者明確指定在一個長度為M毫秒的時間片段

JVM系列(六) - JVM垃圾回收

-c 公眾 進階 中一 比例 但是 member 最佳實踐 block 前言 在之前的幾篇博客中,我們大致介紹了,常見的 垃圾回收算法 及 JVM 中常見的分類回收算法。這些都是從算法和規範上分析 Java 中的垃圾回收,屬於方法論。在 JVM 中,垃圾回收的具體實現是由