深入淺析JVM中的垃圾收集器-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

站在用戶的角度思考問題,與客戶深入溝通,找到潮南網(wǎng)站設計與潮南網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設計、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務覆蓋潮南地區(qū)。

這篇文章將為大家詳細講解有關深入淺析JVM中的垃圾收集器,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

說起垃圾收集(Garbage Collection,GC),大部分人都把這項技術當做Java語言的伴生產(chǎn)物。事實上,GC的歷史遠比Java久遠,1960年誕生于MIT的Lisp是第一門真正使用內存動態(tài)分配和垃圾收集技術的語言。當List還在胚胎時期時,人們就在思考GC需要完成的3件事情:

  1. 哪些內存需要回收?
  2. 什么時候回收?
  3. 如何回收?

一、哪些內存需要回收?

從JVM區(qū)域結構看,可將這些區(qū)域劃分為“靜態(tài)內存”和“動態(tài)內存”兩類。程序計數(shù)器、虛擬機棧、本地方法3個區(qū)域是“靜態(tài)”的,因為這幾個區(qū)域的內存分配和回收都具備確定性,都隨著線程而生,隨著線程而滅。但Java堆和方法區(qū)不一樣,內存分配都存在不確定性,只有在程序處于運行期間才能知道會創(chuàng)建哪些對象,這部分內存和回收都是動態(tài)的,垃圾收集器所關注的是這部分內存。

在堆里面存放著Java世界幾乎所有的對象實例,垃圾回收器在對堆進行回收前,第一件事情就是就是要確定這些對象哪些還"存活"著,哪些已經(jīng)"死去"。那么又怎么確定對象已經(jīng)"死去"呢?

1.引用計數(shù)法:

分配對象時給對象添加一個引用計數(shù)器,每當有一個地方引用它時,計數(shù)器值就加1;當引用失效時,計數(shù)器值就減1;任何時刻計數(shù)器為0的對象就是沒有再被使用了??陀^地說,引用計數(shù)法(Reference Counting)的實現(xiàn)簡單,判斷效率也很高,但是在主流的Java虛擬機里面沒有選用引用計數(shù)法來管理內存,其中最主要的原因是它很難解決對象之間相互循環(huán)引用的問題。例如:

public class ReferenceCountingGC {
 public Object instance = null;
 private byte[] bigsize = new byte[2*1024*1024];
 public static void testGC(){
 ReferenceCountingGC objA = new ReferenceCountingGC();
 ReferenceCountingGC objB = new ReferenceCountingGC();
 objA.instance = objB;
 objB.instance = objA;
 objA = null;
 objB = null;
 System.gc();
 }
}

名稱欄目:深入淺析JVM中的垃圾收集器-創(chuàng)新互聯(lián)
文章鏈接:http://muchs.cn/article22/dpjijc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、App開發(fā)小程序開發(fā)、響應式網(wǎng)站、虛擬主機外貿(mào)網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設