《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > Java垃圾回收新算法
Java垃圾回收新算法
摘要: Java從誕生以來以其在網絡應用開發上獨特的魅力以及“一次開發,隨處運行”的可移植性引起了人們極大的興趣。Java與以往的高級語言如C/C++相比,在開發方面具有很大的優勢,其中以對象內存管理機制中的垃圾
關鍵詞: 算法 回收 垃圾 JAVA
Abstract:
Key words :

Java從誕生以來以其在網絡應用開發上獨特的魅力以及“一次開發,隨處運行”的可移植性引起了人們極大的興趣。Java與以往的高級語言如C/C++相比,在開發方面具有很大的優勢,其中以對象內存管理機制中的垃圾處理機制(GC)最為突出。

  1 C/C++與Java對象內存管理差別

  C/C++將內存劃分成四部分:數據區、代碼區、棧區、堆區。Java則把內存劃分成三部分即代碼區、棧區、堆區,代碼區主要用于存放程序的代碼,棧區主要用于存放局部變量、內部變量等中間性變量,堆區主要用來存放對象。

  C/C++中的對象內存管理是通過語句new()/delete()或malloc()/free()進行申請和釋放的。用new()或malloc()申請內存后,若不使用delete()或free()進行釋放,則所申請的內存一直被占用,即使不使用也不能自動釋放,必須人為釋放,導致編程工作很繁瑣。

  Java中的對象內存管理則改進了對內存的釋放過程,使用new()或其他方法申請的內存在不使用時,可以自動進行垃圾處理,釋放內存,從而節省內存,使內存的使用更加高效、合理。

  Java中可以通過三種方法來銷毀對象實現內存釋放,這三種方法被稱為Java銷毀對象的三把利劍:垃圾回收器;finalize方法;利用System.gc方法強制啟動垃圾回收器。

  垃圾回收是一種動態存儲管理技術,它自動地釋放不再被程序引用的對象,按照特定的垃圾收集算法實現資源自動回收的功能系統,會自動進行GC策略。

  2 GC概述

  Java垃圾處理主要是針對堆的管理,對堆中不使用的空間進行回收處理。判斷一個對象的內存空間是否無用的標準是:如果該對象不能再被程序中任何一個“活動的部分”所引用,此時該對象的內存空間已經無用。所謂“活動的部分”,是指程序中某部分參與程序的調用,正在執行過程中,尚未執行完畢。

  具體以下兩例予以說明:

  實例1:

  int [][]matrix=new int [2][3];

  matrix=null;

  此例中,第一句是用new語句在堆中為數組申請了一個空間,然后用matrix來引用此空間的對象(這里數組可以理解為對象),此時這個內存空間就是有用的。第二句是給matrix賦空值,matrix則不再引用此數組。此時,這個空間就是無用的。

  實例2:

  int [][] m1=new int[2][3];

  int [][] m2=new int[2][3];

  m1=m2;

  此例中,第一句是用new語句在堆中為數組申請了一個空間,用m1引用這個數組。第二句是用new語句在堆中為數組申請了一個空間,用m2引用這個數組。第三句是改變引用對象,把m2的引用賦給m1,則此時m1也引用m2引用的對象數組,因此,m1原來引用的數組無人引用,成為垃圾。3 傳統收集器簡介

  Java依托于垃圾收集GC機制,可以自動回收垃圾即釋放堆空間,讓其他對象可以使用此部分空間。而采用了某種 GC 算法的收集器(Collector)稱之為某某垃圾收集器(Garbage Collector)。目前 Java中采用的垃圾收集器一般包括:引用計數法(Reference Counting Collector)、 Tracing算法(Tracing Collector)、Compacting算法(Compacting Collector)、Coping算法(Coping Collector)、Generation算法(Generational Collector)、Adaptive算法(Adaptive Collector)。

  3.1 引用計數法

  引用計數法是唯一沒有使用根集的垃圾回收的方法,該算法使用引用計數器來區分存活對象和不再使用的對象。一般來說,堆中的每個對象對應一個引用計數器。當每一次創建一個對象并賦給一個變量時,引用計數器置為1。當對象被賦給任意變量時,引用計數器每次加1,當對象出了作用域后(該對象丟棄不再使用),引用計數器減1,一旦引用計數器為0,對象就滿足了垃圾收集的條件。

  基于引用計數器的垃圾收集器運行較快,不會長時間中斷程序執行,必須適宜地實時運行的程序。但引用計數器增加了程序執行的開銷,因為每次對象賦給新的變量,計數器加1,而每次現有對象出了作用域,計數器減1。

  3.2 Tracing算法

  Tracing算法是為了解決引用計數法的問題而提出,它使用了根集的概念。基于Tracing算法的垃圾收集器從根集開始掃描,識別出哪些對象可達,哪些對象不可達,并用某種方式標記可達對象,例如對每個可達對象設置一個或多個位。在掃描識別過程中,基于Tracing算法的垃圾收集也稱為標記和清除(mark-and-sweep)垃圾收集器。

  3.3 Compacting算法

  為了解決堆碎片問題,基于tracing的垃圾回收吸收了Compacting算法的思想,在清除的過程中,算法將所有對象移到堆的一端,堆的另一端就變成了一個相鄰的空閑內存區,收集器會對它移動的所有對象的所有引用進行更新,使得這些引用在新的位置能識別原來 的對象。在基于Compacting算法的收集器的實現中,一般增加句柄和句柄表。

  3.4 Coping算法

  Coping算法的提出是為了克服句柄的開銷和解決堆碎片的垃圾回收。它開始時把堆分成一個對象面和多個空閑面, 程序從對象面為對象分配空間,當對象滿了,基于Coping算法的垃圾收集就從根集中掃描活動對象,并將每個活動對象復制到空閑面(使得活動對象所占的內存之間沒有空閑洞),這樣空閑面變成了對象面,原來的對象面變成了空閑面,程序會在新的對象面中分配內存。

  一種典型的基于Coping算法的垃圾回收是stop-and-copy算法,它將堆分成對象面和空閑區域面,在對象面與空閑區域面的切換過程中,程序暫停執行。

  3.5 Generation算法

  stop-and-copy垃圾收集器的一個缺陷是收集器必須復制所有的活動對象,這增加了程序等待時間,這是Coping算法低效的原因。在程序設計中有這樣的規律:多數對象存在的時間比較短,少數的存在時間比較長。因此,Generation算法將堆分成兩個或多個,每個子堆作為對象的一代(Generation)。由于多數對象存在的時間比較短,隨著程序丟棄不使用的對象,垃圾收集器將從最年輕的子堆中收集這些對象。在分代式的垃圾收集器運行后,上次運行存活下來的對象移到下一最高代的子堆中,由于老一代的子堆不會經常被回收,因而節省了時間。

  3.6 Adaptive算法

  在特定的情況下,一些垃圾收集算法會優于其他算法?;贏daptive算法的垃圾收集器就是監控當前堆的使用情況,并將選擇適當算法的垃圾收集器。

  4 GC新算法概述

  基于上述對幾種收集器算法優缺點的對比分析,提出一種既可以滿足程序對實時性的要求,同時也能避免內存泄漏的較完全的垃圾處理算法。

  4.1算法描述

  4.1.1內存劃分

  (1)把一個堆內存劃分成兩大塊,一塊是活躍區,占堆大小的2/3,活躍區劃分成大小相同的8個塊,并且為每個塊設置一個計數器int cnt[x](x取1~8),用來記錄每塊內存中動態分配的被引用對象總數。另一塊是保留區,占堆大小的1/3,設置兩個常數min和max,分別用來表示保留區的初始大小和最大可增加到的大小。(min的值小于堆大小的1/3,max的值可以自行設置但最大值不超過堆大小的1/3)。

  (2)為堆中的每個對象設置一個標記位(標記位放在一個專用數組cnt[x](x取1~8)中)以表示其是否被引用,在對象被引用時計數器就開始動態地統計計數,記錄本塊中被引用的對象個數。

  (3)通過比較計數器值的大小來判斷應該掃描哪個塊,而不是利用搜索所有對象的方法。具體結構如圖1。

  

4.1.2具體算法

 

  (1)程序開始運行,對象動態地申請堆區,這時,每個塊的計數器啟動,根據引用對象的標記位情況來改變計數器的值,為1則計數器加1,8個計數器值放在數組里,并比較8個計數器值的大小,選取最大的計數器所在塊,進行掃描。

  (2)掃描出的垃圾轉移到刪除區,等待被刪除。

  (3)繼續比較計數器值,但已經進行掃描的塊不參加此后的比較,待刪除的垃圾占的空間達到min值時,垃圾器開始對活躍區壓縮內存碎片,并且在刪除區同時開始進行垃圾刪除申請。

  (4)當刪除區的空間達到了max值時,刪除區的垃圾還沒有被刪除,這時停止活躍區的掃描,等待刪除區進行垃圾刪除。

  4.2 實例分析

  看下面一段程序:

  int [][] m1=new int[2][3];

  int [][] m2=new int[2][3];

  m1=m2;

  此例中,第一句是用new語句在堆中為數組申請了一個空間,然后用matrix引用此空間的對象(這里數組可以理解為對象),此時這個內存空間就是有用的。第二句是給matrix賦空值,matrix則不再引用此數組。此時,這個空間就是無用的。

  對于原來的算法,m1引用的數組在堆中是隨機存放的,若要查找垃圾,則會遍歷整個堆內存,先標記,然后再清理垃圾。設耗費時間為Ta。

  m1引用的數組在堆中是隨機存放的,所以假設其放在活躍區中的cnt[x]區(x取值為0~7之一),下面分兩種情況來考慮:

  (1)最好的情況,m1原來引用的數組放在cnt1中為數組cnt[x]中最大的數,則查找到這個垃圾的時間為: T8+cnt[x]。

  

  由此可以節省7Ta/16的時間。此新算法可以大大減少垃圾處理所需的時間。

  Java語言對垃圾的處理是利用Java的垃圾處理器自動進行的,JVM雖然沒有明確程序員必須了解垃圾處理器的過程和實質,但是,一個優秀的Java程序員應該掌握和熟悉垃圾處理器的工作機制,充分利用好內存空間,減少不必要的空間浪費,從而使程序更好地運行。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲视频一区二区免费在线观看| 香蕉久久夜色精品国产| 欧美激情一区二区三级高清视频| 亚洲国产精品久久久久婷婷老年| 夜夜嗨av一区二区三区四季av| 欧美视频一区在线| 亚洲精品久久| 亚洲精品国产拍免费91在线| 久久精品综合网| 在线播放一区| 亚洲电影av在线| 欧美在线1区| 一区二区三区我不卡| 亚洲人永久免费| 久久精视频免费在线久久完整在线看| 亚洲性线免费观看视频成熟| 欧美精品999| 韩国久久久久| 亚洲愉拍自拍另类高清精品| 欧美日韩在线观看视频| 欧美日韩一区在线播放| 久久午夜电影网| 影音先锋亚洲视频| 欧美啪啪一区| 国产精品久久9| 欧美日韩国产综合视频在线观看| 亚洲亚洲精品在线观看| 国产真实精品久久二三区| 亚洲视频每日更新| 欧美成人一区二区在线| 欧美日韩专区| 久久久亚洲国产美女国产盗摄| 在线观看亚洲a| 美女精品在线| 国产日韩欧美亚洲一区| 麻豆精品一区二区综合av| 亚洲资源在线观看| 久久久人人人| 9l国产精品久久久久麻豆| 欧美资源在线观看| 老牛嫩草一区二区三区日本| 欧美国产一区二区三区激情无套| 欧美极品影院| 欧美视频在线一区| 欧美一级电影久久| 亚洲激情图片小说视频| 亚洲国产黄色| 久久精品国产在热久久| 好男人免费精品视频| 午夜在线视频观看日韩17c| 在线电影院国产精品| 免费一级欧美片在线观看| 欧美激情2020午夜免费观看| 午夜视频一区在线观看| 国产伦精品一区二区三| 激情久久影院| 99精品热视频只有精品10| 欧美视频免费在线| 午夜精品久久久久久久久久久久久| 久久女同精品一区二区| 久久全国免费视频| 亚洲精品美女久久7777777| 亚洲国产欧美日韩精品| 国产精品视频最多的网站| 国内一区二区在线视频观看| 日韩小视频在线观看| 99xxxx成人网| 亚洲另类一区二区| 狠狠88综合久久久久综合网| 亚洲欧美区自拍先锋| 欧美午夜久久久| 国产一区二区精品丝袜| 中文高清一区| 今天的高清视频免费播放成人| 午夜精品国产更新| 亚洲欧美日韩成人高清在线一区| 亚洲高清一区二| 亚洲黄色精品| 亚洲国产日韩一区二区| 免费不卡在线观看| 亚洲欧美日韩一区| 欧美一区二区三区在| 日韩一级视频免费观看在线| 欧美日韩亚洲精品内裤| 亚洲精选在线| 尤物九九久久国产精品的特点| 韩国av一区二区三区四区| 欧美激情欧美狂野欧美精品| 日韩视频―中文字幕| 欧美自拍丝袜亚洲| 久久亚洲午夜电影| 欧美在线不卡| 亚洲天堂免费观看| 欧美精品少妇一区二区三区| 欧美一区二区在线看| 国产伦精品一区二区三区照片91| 欧美激情久久久| 亚洲黄色尤物视频| 91久久精品www人人做人人爽| 午夜精品久久久久久久男人的天堂| 久久久精品免费视频| 99精品热视频只有精品10| 欧美视频在线观看一区二区| 久久久青草婷婷精品综合日韩| 狠狠久久亚洲欧美专区| 国产精品亚洲人在线观看| 欧美日韩在线免费| 国产精品视频一区二区三区| 久久www免费人成看片高清| 久久综合一区二区| 欧美精品在线观看91| 中文精品视频一区二区在线观看| 日韩亚洲欧美中文三级| 国产午夜精品视频| 日韩午夜在线观看视频| 激情小说另类小说亚洲欧美| 亚洲一区精品视频| 国产欧美一区二区精品忘忧草| 亚洲乱码日产精品bd| 鲁大师成人一区二区三区| 欧美成年人视频| 亚洲女女做受ⅹxx高潮| 激情久久一区| 在线观看欧美黄色| 久久综合九色综合欧美就去吻| 欧美激情综合五月色丁香| 欧美日韩国产影片| 国产偷自视频区视频一区二区| 欧美国产日本高清在线| 免费观看国产成人| 亚洲欧洲精品一区二区三区波多野1战4| 国产一区91精品张津瑜| 精品粉嫩aⅴ一区二区三区四区| 国产精品yjizz| 亚洲精品久久嫩草网站秘色| 欧美日韩在线免费| 欧美日韩网址| 老鸭窝91久久精品色噜噜导演| 欧美亚洲一区二区在线观看| 亚洲欧美区自拍先锋| 国产女人精品视频| 国产精品二区三区四区| 欧美日韩不卡在线| 欧美全黄视频| 中文在线资源观看网站视频免费不卡| 国产精品久在线观看| 国产一区在线观看视频| 国产精品久久久久一区二区三区共| 亚洲欧美电影院| 久久久无码精品亚洲日韩按摩| 亚洲裸体俱乐部裸体舞表演av| 欧美亚洲视频| 欧美日韩精品免费观看视一区二区| 国产精品自在线| 国产精品日韩欧美一区| 欧美性猛交xxxx乱大交退制版| 99精品免费| 国产美女精品人人做人人爽| 欧美成人精品高清在线播放| 欧美成人免费一级人片100| 在线视频你懂得一区二区三区| 国产精品v欧美精品v日本精品动漫| 久久久久久国产精品mv| 国产精品毛片a∨一区二区三区| 欧美三级电影大全| 欧美激情亚洲综合一区| 亚洲一区二区三区四区在线观看| 久久精精品视频| 黄色日韩网站| 在线免费高清一区二区三区| 怡红院av一区二区三区| 欧美日韩中文字幕在线| 亚洲精品日韩在线观看| 国产一区白浆| 亚洲一区二区三区四区在线观看| 欧美成人高清| 亚洲精品视频在线观看免费| 一区二区三区鲁丝不卡| 能在线观看的日韩av| 久久久国产一区二区三区| 亚洲国产高清一区| 日韩视频在线观看一区二区| 欧美日韩在线不卡一区| 国产精品国产三级国产普通话三级| 激情懂色av一区av二区av| 美玉足脚交一区二区三区图片| 欧美激情乱人伦| 亚洲一二三四久久| 日韩视频免费观看| 国产综合第一页| 欧美激情综合五月色丁香| 精品动漫3d一区二区三区| 欧美+日本+国产+在线a∨观看| 国产精品乱码人人做人人爱| 久久婷婷久久一区二区三区| 国产精品久久久久久亚洲毛片| 美女啪啪无遮挡免费久久网站| 先锋影音一区二区三区| 99精品国产热久久91蜜凸| 欧美国内亚洲| 国产精品videosex极品| 亚洲图片欧美日产| 狠狠久久五月精品中文字幕| 国产精品美女久久福利网站| 国产人成一区二区三区影院| 亚洲美女性视频| 先锋影音网一区二区| 亚洲成色最大综合在线| 欧美一区永久视频免费观看| 很黄很黄激情成人| 欧美视频一区在线观看| 久久久99免费视频| 伊大人香蕉综合8在线视| 亚洲美女av网站| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美在线免费观看| 免费在线一区二区| 性色av一区二区三区在线观看| 欧美日韩国产二区| 在线视频国内自拍亚洲视频| 久久久高清一区二区三区| 亚洲午夜影视影院在线观看| 亚洲免费观看高清完整版在线观看| 欧美日韩成人网| 欧美四级剧情无删版影片| 卡通动漫国产精品| 亚洲免费福利视频| 亚洲国产精品久久久| 亚洲老司机av| 欧美一级大片在线免费观看| 欧美激情一区二区三区成人| 国产精品久久77777| 国产深夜精品| 亚洲精品中文字幕在线观看| 亚洲电影成人| 另类av导航| 久久久久久久久综合| 欧美精品午夜| 亚洲欧美日韩综合一区| 欧美黄免费看| 午夜免费电影一区在线观看| 欧美欧美午夜aⅴ在线观看| 久久影视三级福利片| 亚洲一区二区不卡免费| 亚洲精品乱码久久久久久日本蜜臀| 国产精品午夜国产小视频| 国产丝袜一区二区| 在线免费精品视频| 亚洲国产黄色片| 欧美日韩另类国产亚洲欧美一级| 美女啪啪无遮挡免费久久网站| 一本色道久久精品| 在线欧美日韩精品| 女人天堂亚洲aⅴ在线观看| 亚洲缚视频在线观看| 亚洲黄色一区| 国产精品日韩欧美大师| 性欧美暴力猛交69hd| 欧美午夜女人视频在线| 国产精品人成在线观看免费| 国产精品日本一区二区| 欧美成年视频| 亚洲午夜羞羞片| 好看的日韩av电影| 国产欧美一区二区精品秋霞影院| 欧美成人精品| 最近看过的日韩成人| 精品成人一区二区三区| 欧美视频日韩视频| 亚洲欧美电影在线观看| 亚洲欧美国内爽妇网| 一区二区三区国产在线| 娇妻被交换粗又大又硬视频欧美| 亚洲国产日韩综合一区| 国产精品久久777777毛茸茸| 日韩视频―中文字幕| 欧美国产精品va在线观看| 欧美不卡福利| 在线观看中文字幕不卡| 91久久精品日日躁夜夜躁欧美| 99精品福利视频| 欧美黑人国产人伦爽爽爽| 午夜在线精品| 先锋a资源在线看亚洲| 亚洲午夜影视影院在线观看| 久久久精品国产99久久精品芒果| 亚洲综合欧美| 久久久水蜜桃av免费网站| 久久久久国色av免费观看性色| 国产日韩欧美一区二区| 午夜久久99| 午夜伦理片一区| 国产精品成人观看视频免费| 亚洲香蕉伊综合在人在线视看| 久久久久国产成人精品亚洲午夜| 亚洲在线观看视频网站| 亚洲第一中文字幕在线观看| 欧美日韩国产成人高清视频| 欧美日韩国产综合视频在线| 午夜精品区一区二区三| 欧美午夜免费| 好吊色欧美一区二区三区四区| 国产一区二区三区四区hd| 国产日韩在线看片| 国产精品久久久久久福利一牛影视| 在线视频你懂得一区二区三区| 国户精品久久久久久久久久久不卡| 亚洲午夜久久久久久久久电影院| 久久九九热re6这里有精品| 亚洲美女免费精品视频在线观看| 亚洲精品自在在线观看| 美女视频网站黄色亚洲| 亚洲免费伊人电影在线观看av| 欧美喷潮久久久xxxxx| 一本一本久久a久久精品综合妖精| 国产夜色精品一区二区av| 久久久精品动漫| 黑丝一区二区| 欧美一区二区三区四区夜夜大片| 国内精品视频久久| 亚洲欧美日韩国产综合在线| 亚洲片在线资源| 欧美日韩妖精视频| 国产一区二区三区无遮挡| 免费观看国产成人| 欧美久久精品午夜青青大伊人| 一区二区高清在线| 欧美日韩国产bt|