亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

深入java垃圾回收的詳解

2019-11-26 16:04:21
字體:
來源:轉載
供稿:網友

1.垃圾收集算法的核心思想
Java語言建立了垃圾收集機制,用以跟蹤正在使用的對象和發現并回收不再使用(引用)的對象。該機制可以有效防范動態內存分配中可能發生的兩個危險:因內存垃圾過多而引發的內存耗盡,以及不恰當的內存釋放所造成的內存非法引用。

垃圾收集算法的核心思想是:對虛擬機可用內存空間,即堆空間中的對象進行識別,如果對象正在被引用,那么稱其為存活對象,反之,如果對象不再被引用,則為垃圾對象,可以回收其占據的空間,用于再分配。垃圾收集算法的選擇和垃圾收集系統參數的合理調節直接影響著系統性能,因此需要開發人員做比較深入的了解。

2.觸發主GC(Garbage Collector)的條件
JVM進行次GC的頻率很高,但因為這種GC占用時間極短,所以對系統產生的影響不大。更值得關注的是主GC的觸發條件,因為它對系統影響很明顯??偟膩碚f,有兩個條件會觸發主GC:

(1)當應用程序空閑時,即沒有應用線程在運行時,GC會被調用。因為GC在優先級最低的線程中進行,所以當應用忙時,GC線程就不會被調用,但以下條件除外。

(2)Java堆內存不足時,GC會被調用。當應用線程在運行,并在運行過程中創建新對象,若這時內存空間不足,JVM就會強制地調用GC線程,以便回收內存用于新的分配。若GC一次之后仍不能滿足內存分配的要求,JVM會再進行兩次GC作進一步的嘗試,若仍無法滿足要求,則 JVM將報“out of memory”的錯誤,Java應用將停止。

由于是否進行主GC由JVM根據系統環境決定,而系統環境在不斷的變化當中,所以主GC的運行具有不確定性,無法預計它何時必然出現,但可以確定的是對一個長期運行的應用來說,其主GC是反復進行的。

3.減少GC開銷的措施
根據上述GC的機制,程序的運行會直接影響系統環境的變化,從而影響GC的觸發。若不針對GC的特點進行設計和編碼,就會出現內存駐留等一系列負面影響。為了避免這些影響,基本的原則就是盡可能地減少垃圾和減少GC過程中的開銷。具體措施包括以下幾個方面:

(1)不要顯式調用System.gc()
此函數建議JVM進行主GC,雖然只是建議而非一定,但很多情況下它會觸發主GC,從而增加主GC的頻率,也即增加了間歇性停頓的次數。這里特別需要說明的是,在代碼中顯示的調用System.gc(),并不一定能夠進行GC,這個我們可以通過finalize()方法進行驗證,即主動調用System.gc(),并不一定每次都調用finalize()方法。finalize()方法的特征是在對象被回收之前, 首先調用finalize()方法。

(2)盡量減少臨時對象的使用
臨時對象在跳出函數調用后,會成為垃圾,少用臨時變量就相當于減少了垃圾的產生,從而延長了出現上述第二個觸發條件出現的時間,減少了主GC的機會。

(3)對象不用時最好顯式置為Null
一般而言,為Null的對象都會被作為垃圾處理,所以將不用的對象顯式地設為Null,有利于GC收集器判定垃圾,從而提高了GC的效率。

(4)盡量使用StringBuffer,而不用String來累加字符串(詳見blog另一篇文章JAVA中String與StringBuffer)
由于String是固定長的字符串對象,累加String對象時,并非在一個String對象中擴增,而是重新創建新的String對象,如 Str5=Str1+Str2+Str3+Str4,這條語句執行過程中會產生多個垃圾對象,因為對次作“+”操作時都必須創建新的String對象,但這些過渡對象對系統來說是沒有實際意義的,只會增加更多的垃圾。避免這種情況可以改用StringBuffer來累加字符串,因StringBuffer 是可變長的,它在原有基礎上進行擴增,不會產生中間對象。

(5)能用基本類型如Int,Long,就不用Integer,Long對象
基本類型變量占用的內存資源比相應對象占用的少得多,如果沒有必要,最好使用基本變量。什么情況下需要使用Integer?

(6)盡量少用靜態對象變量
靜態變量屬于全局變量,不會被GC回收,它們會一直占用內存。

(7)分散對象創建或刪除的時間
集中在短時間內大量創建新對象,特別是大對象,會導致突然需要大量內存,JVM在面臨這種情況時,只能進行主GC,以回收內存或整合內存碎片, 從而增加主GC的頻率。集中刪除對象,道理也是一樣的。它使得突然出現了大量的垃圾對象,空閑空間必然減少,從而大大增加了下一次創建新對象時強制主GC 的機會。

4.垃圾回收算法
(1)引用計數收集器
引用計數是垃圾收集的早期策略。在這種方法中,堆中每一個對象都有一個引用計數。當一個對象被創建了,并且指向該對象的引用被分配給一個變量,這個對象的引用計數被設置為1。比如新建一個對象A a=new A();然后a被分配給另外一個變量b,也就是b=a;那么對象a的引用計數+1。當任何其他變量被賦值為對這個對象的引用時,計數加1。當一個對象的引用超過生存期或者被設置一個新的值時,對象的引用計數減1,比如令b=c,則a的引用計數-1。任何引用計數為0的對象可以被當做垃圾收集。當一個對象被垃圾收集的時候,它引用的任何對象計數減1。在這種方法中,一個對象被垃圾收集后可能導致后續其他對象的垃圾收集行動。比如A a=new A();b=a;當b被垃圾回收以后,a的引用計數變為0,這樣導致a也被垃圾回收。

方法的好處:引用計數收集器可以很快執行,交織在程序的運行之中。這個提醒對于程序不能被長時間打斷的實時環境很有利。

方法的壞處:引用計數無法檢測出循環(即兩個或者更多的對象互相引用)。循環的例子如,父對象有一個子對象的引用,子對象又反過來引用父對象。這樣對象用戶都不可能計數為0,就算它們已經無法被執行程序的根對象觸及。還有一個壞處就是,每次引用計數的增加或者減少都帶來額外的開銷。

(2)追蹤收集器
垃圾檢測通常通過建立一個根對象的集合并且檢查從這些根對象開始的可觸及性來實現。如果正在執行的程序可以訪問到的根對象和某個對象之間存在引用路徑,這個對象就是可觸及的。對于程序來說,根對象總是可以訪問的。從這些根對象開始,任何可以被觸及的對象都是被認為是“活動”的對象。無法被觸及的對象被認為是垃圾,因為它們不在影響程序的未來執行。

跟蹤收集器是追蹤從根結點開始的對象引用圖。在追蹤過程中遇到的對象以某手方式打上標記??偟膩碚f,要么在對象本身上設置標記,要么用一個獨立的位圖來設置標記。當追蹤結束時,未被標記的對象就是無法觸及的,從而可以被收集。

基本的追蹤算法被稱作“標記并清除”。這個名字指出垃圾手機的兩個階段。在標記階段,垃圾收集器遍歷引用樹,標記每一個遇到的對象。在清除階段,未被標記的對象被釋放,釋放對象后獲得的內存被返回到正在執行的程序。在Java虛擬機中,清除步驟必須包括對象的終結。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
狠狠久久五月精品中文字幕| 欧美日韩国产限制| 亚洲美女性生活视频| 91美女片黄在线观看游戏| 97久久超碰福利国产精品…| 丝袜亚洲欧美日韩综合| 欧美国产第二页| 日韩亚洲精品电影| 久久久久久久久久久成人| 国产精品久久久久国产a级| 精品国产一区二区三区四区在线观看| 欧美色视频日本高清在线观看| 中文字幕日韩在线播放| 色av中文字幕一区| 亚洲欧美日韩国产中文专区| 国产成人精品国内自产拍免费看| 国产精品91免费在线| 久久久久久久久国产精品| 亚洲欧洲国产精品| 92福利视频午夜1000合集在线观看| 国产精品无码专区在线观看| 国产精品pans私拍| 91社影院在线观看| 亚洲91精品在线观看| 中文字幕在线看视频国产欧美在线看完整| 久久精品国产久精国产思思| 91精品国产高清久久久久久91| 最近2019年日本中文免费字幕| 国产精品一区二区在线| 国产日韩欧美成人| 国产小视频国产精品| 国产日韩在线亚洲字幕中文| 欧美不卡视频一区发布| 538国产精品视频一区二区| 久久精品这里热有精品| 成人在线视频福利| 一区二区三区视频观看| 日本国产欧美一区二区三区| 欧美精品在线视频观看| www欧美日韩| 国产有码在线一区二区视频| 亚洲激情在线视频| 中文字幕国产亚洲2019| 日韩精品极品视频免费观看| 九色精品免费永久在线| 亚洲欧美中文在线视频| 久热精品视频在线观看一区| 国产精品久久久久久久久久久不卡| 亚洲奶大毛多的老太婆| 日本午夜在线亚洲.国产| 亚洲欧美制服中文字幕| 精品国产美女在线| 久久精品国产亚洲一区二区| 成人在线免费观看视视频| 日韩高清人体午夜| 成人黄色片网站| 69精品小视频| 国产精品第一第二| 亚洲人成电影网| 欧美精品久久久久久久久久| 欧美视频在线免费| 91情侣偷在线精品国产| 国产精品自拍偷拍| 欧美不卡视频一区发布| 国内精品美女av在线播放| 国产精品久久久久久久一区探花| 日韩国产精品一区| 日韩在线高清视频| 欧美激情一级欧美精品| 国产日韩中文在线| 亚洲第一精品久久忘忧草社区| 国产精品一区二区3区| 国产丝袜视频一区| 最新国产精品亚洲| 91成人在线播放| 国产不卡视频在线| 亚洲最大在线视频| 国产精品极品尤物在线观看| 亚洲香蕉成视频在线观看| 中文字幕精品www乱入免费视频| 亚洲成人黄色网| www.亚洲男人天堂| 中文字幕精品在线视频| 伊人久久免费视频| 精品人伦一区二区三区蜜桃免费| 中文字幕亚洲在线| 欧美亚洲国产日韩2020| 亚洲图片在区色| 亚洲成色777777女色窝| 日韩成人av网址| 亚洲国产精品久久久久久| 日韩精品视频在线观看免费| 91高清在线免费观看| 中文字幕视频在线免费欧美日韩综合在线看| 久久久噜噜噜久噜久久| 在线午夜精品自拍| 久久久91精品| 亚洲欧洲自拍偷拍| 日韩欧美中文字幕在线播放| 久久久免费在线观看| 欧美日韩国产一区二区| 久久免费观看视频| 91av视频在线免费观看| 国产午夜一区二区| 伦伦影院午夜日韩欧美限制| 亚洲天堂成人在线视频| 国产成人精品优优av| 美女精品视频一区| 日韩第一页在线| 精品国产一区二区三区久久狼黑人| 国产一区av在线| 亚洲毛茸茸少妇高潮呻吟| 美女久久久久久久| 国产偷国产偷亚洲清高网站| 亚洲精品不卡在线| 亚洲性av在线| 欧美极品少妇xxxxⅹ免费视频| 亚洲男人的天堂在线| 久久av红桃一区二区小说| 欧美成人剧情片在线观看| 国内精品伊人久久| 午夜精品久久久久久久久久久久| 久久九九有精品国产23| 欧美成人中文字幕| 91色中文字幕| 国外成人在线直播| 久久视频在线播放| 狠狠躁18三区二区一区| 97久久精品人搡人人玩| 国产欧洲精品视频| 久久九九国产精品怡红院| 欧美日韩一区二区三区| 日韩在线视频观看正片免费网站| 亚洲精品天天看| 色多多国产成人永久免费网站| 精品国产1区2区| 欧美疯狂xxxx大交乱88av| 亚洲精品永久免费| 91久久精品国产91性色| 久久精品国产成人| 国产午夜精品久久久| 在线观看日韩视频| 中文字幕精品视频| 91国产视频在线播放| 亚洲欧美国产高清va在线播| 一区二区在线视频| 日韩精品在线免费观看| 国产mv免费观看入口亚洲| 97超碰国产精品女人人人爽| 欧美日韩在线第一页| 性欧美办公室18xxxxhd| 久久精品国产亚洲精品| 亚洲片在线资源| 欧美综合国产精品久久丁香| 在线精品国产成人综合| 欧美性受xxxx黑人猛交| 国产日韩精品一区二区| 日韩中文字幕在线精品| 国产精品黄页免费高清在线观看| 精品久久久久久久久久久| 欧美综合第一页| 国产成人亚洲综合| 精品女同一区二区三区在线播放| 国产午夜精品全部视频在线播放|