日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java面试题】49 垃圾回收的优点和原理。并考虑2种回收机制。

發布時間:2025/3/15 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java面试题】49 垃圾回收的优点和原理。并考虑2种回收机制。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、Java語言最顯著的特點就是引入了垃圾回收機制,它使java程序員在編寫程序時不再考慮內存管理的問題。?
2、由于有這個垃圾回收機制,java中的對象不再有“作用域”的概念,只有引用的對象才有“作用域”。?
3、垃圾回收機制有效的防止了內存泄露,可以有效使用可使用的內存。?
4、垃圾回收器通常作為一個單獨的低級別的線程運行,在不可預知的情況下對內存堆中已經死亡的或很長時間沒有用過的對象進行清除和回收。?
5、程序員不能實時的對某個對象或所有對象調用垃圾回收器進行垃圾回收。

垃圾回收機制有分代復制垃圾回收標記垃圾回收增量垃圾回收

一、分代復制垃圾回收

? ? 不同的對象的生命周期是不一樣的。因此,不同生命周期的對象可以采取不同的收集方式,以便提高回收效率。?在Java程序運行的過程中,會產生大量的對象,其中有些對象是與業務信息相關,比如Http請求中的?

Session對象、線程、Socket連接,這類對象跟業務直接掛鉤,因此生命周期比較長。但是還有一些對象,主要是程序運行過程中生成的臨時變量,這些對象生命周期會比較短,比如:String對象,由于其不變類的特性,系統會產生大量的這些對象,有些對象甚至只用一次即可回收。如果每次垃圾回收都是對整個堆空間進行回收,花費時間相對會 長,并且生命周期長的對象依舊存在,因此引入分代回收,把不同生命周期的對象放在不同代上,不同代上采用最適合它的垃圾回收方式進行回收。

? ? 虛擬機中的共劃分為三個代:年輕代(Young Generation)、年老點(Old Generation)和持久代(Permanent Generation)。由于對象進行了分代處理,因此垃圾回收區域、時間也不一樣。GC有兩種類型:Scavenge GC和Full GC。

Scavenge GC:一般情況下,當新對象生成,并且在Eden申請空間失敗時,就會觸發Scavenge GC,對Eden區域進行GC,清除非存活對象,并且把尚且存活的對象移動到Survivor區。然后整理Survivor的兩個區。這種方式的GC是對年輕代的Eden區進行,不會影響到年老代。因為大部分對象都是從Eden區開始的,同時Eden區不會分配的很大,所以Eden區的GC會頻繁進行。因而,一般在這里需要使用速度快、效率高的算法,使Eden去能盡快空閑出來。

Full GC :對整個堆進行整理,包括Young、Tenured和Perm。Full GC因為需要對整個對進行回收,所以比ScavengeGC要慢,因此應該盡可能減少Full GC的次數。在對JVM調優的過程中,很大一部分工作就是對于FullGC的調節。有如下原因可能導致Full GC:

· 年老代(Tenured)被寫滿?

· 持久代(Perm)被寫滿?

· System.gc()被顯示調用?

? ? ?上一次GC之后Heap的各域分配策略動態變化

?

二、標記垃圾回收

? ? 它是第一個可以回收被循環引用的數據結構的垃圾回收算法.現在仍舊有許多常用的垃圾回收技術使用各種各樣的標記清除算法的變體。

? ? 在使用標記清除算法時,未引用對象并不會被立即回收.取而代之的做法是,垃圾對象將一直累計到內存耗盡為止.當內存耗盡時,程序將會被掛起,垃圾回收開始執行.當所有的未引用對象被清理完畢時,程序才會繼續執行。

標記清除算法由兩個階段組成:?

①?標記階段,標記所有的可訪問對象。

②?收集階段,垃圾收集算法掃描堆并回收所有的未標記對象。

? ? 標記垃圾回收的優點:標記清除式的垃圾回收跟蹤了由根(root)訪問的所有對象,所以即使是在有循環引用時,它也可以正確地標記并執行垃圾回收工作。另外,對于引用對象的常規操作不會產生任何的額外開銷。

? ? 缺點:當垃圾回收算法執行時,正常的程序會被掛起。特別是,如果一個程序是交互式程序或者正在有一些實時運算時,這就會成為一個問題。比如,一個正在進行垃圾回收的交互式程序會周期的無響應。

?

三、增量垃圾回收

? ? 對這種垃圾回收機制始終無法理解透徹,只能在此稍作解釋,具體該如何定義也請自行google。

簡單地說,它的存在是為了解決標記清除的長停頓問題。增量回收是將GC分成幾部分來執行。設置「GC最多中斷10ms」這樣的條件限制來使GC的終端時間視作可預測的。但是,在兩段的GC程序之間,引用關系可能發生了變化。所以,這種GC算法也要寫屏障,來記錄引用關系的變化。雖然這種方式控制了中斷最高時間,但是由于中斷次數增加,GC總時間是增加的。

? ? 關于增量垃圾回收,http://blog.csdn.NET/u011320646/article/details/38640703 這篇博文解釋得比較生動,有需要的可以自行閱讀。

?

?

總結

以上是生活随笔為你收集整理的【Java面试题】49 垃圾回收的优点和原理。并考虑2种回收机制。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。