欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:java JVM面試篇(下)

柚子快報邀請碼778899分享:java JVM面試篇(下)

http://yzkb.51969.com/

垃圾收集器

簡述 Java 垃圾回收機制

在 java 中,程序員是不需要顯示的去釋放一個對象的內(nèi)存的,而是由虛擬機自行執(zhí)行。在 JVM中,有一個垃圾回收線程,它是低優(yōu)先級的,在正常情況下是不會執(zhí)行的,只有在虛擬機空閑或者當(dāng)前堆內(nèi)存不足時,才會觸發(fā)執(zhí)行,掃面那些沒有被任何引用的對象,并將它們添加到要回收的集合中,進行回收。

GC 是什么?為什么要 GC

GC 是垃圾收集的意思(Gabage Collection),內(nèi)存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯誤的內(nèi)存。

回收會導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰 Java 提供的 GC 功能可以自動監(jiān)測對象是否超過作用域從而達到自動。

回收內(nèi)存的目的, Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法。

垃圾回收的優(yōu)點和原理。2 種回收機制

Java 語言最顯著的特點就是引入了垃圾回收機制,它使 Java 程序員在編寫程序時不再考慮內(nèi)存管理的問題。

由于有這個垃圾回收機制, Java 中的對象不再有“作用域”的概念,只有引用的對象才有“作

用域”。

垃圾回收機制有效的防止了內(nèi)存泄露,可以有效的使用可使用的內(nèi)存。

垃圾回收器通常作為一個單獨的低級別的線程運行,在不可預(yù)知的情況下對內(nèi)存堆中已經(jīng)死亡的或很長時間沒有用過的對象進行清除和回收。

程序員不能實時的對某個對象或所有對象調(diào)用垃圾回收器進行垃圾回收。垃圾回收有分代復(fù)制 垃圾回收、標(biāo)記垃圾回收、增量垃圾回收。

垃圾回收器的基本原理是什么?

對于 GC 來說,當(dāng)程序員創(chuàng)建對象時,GC 就開始監(jiān)控這個對象的地址、大小以及使用情況。

主動通知虛擬機進行垃圾回收的辦法?

通常,GC 采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是"可達的",哪些對象是"不可達的"。當(dāng) GC 確定一些對象為" 不可達"時,GC 就有責(zé)任回收這些內(nèi)存間。

垃圾回收器可以馬上回收內(nèi)存嗎?

可以。程序員可以手動執(zhí)行 System.gc(),通知 GC 運行,但是 Java 語言規(guī)范并不保證 GC 一定會執(zhí)行。

我們能保證 GC 執(zhí)行嗎?

不能,雖然你可以調(diào)用 System.gc() 或者 Runtime.gc(),但是沒有辦法保證GC 的執(zhí)行。

Java 中引用類型有哪些?

強引用:發(fā)生 gc 的時候不會被回收。

軟引用:有用但不是必須的對象,在發(fā)生內(nèi)存溢出之前會被回收。

弱引用:有用但不是必須的對象,在下一次 GC 時會被回收。

虛引用(幽靈引用/幻影引用):無法通過虛引用獲得對象,用PhantomReference 實現(xiàn)虛引用,虛引用的用途是在 gc 時返回一個通知。

強引用、軟引用、弱引用、虛引用的區(qū)別?

思路: 先說一下四種引用的定義,可以結(jié)合代碼講一下,也可以擴展談到ThreadLocalMap 里弱引用用處。

強引用 我們平時 new 了一個對象就是強引用,例如 Object obj = new Object();即使在內(nèi)存不足 的情況下,JVM 寧愿拋出 OutOfMemory 錯誤也不會回收這種對象

軟引用 如果一個對象只具有軟引用,則內(nèi)存空間足夠,垃圾回收器就不會回收它;如果內(nèi)存空間不足了,就會回收這些對象的內(nèi)存。 SoftReference softRef=new SoftReference(str); // 軟引用

用處:軟引用在實際中有重要的應(yīng)用,例如瀏覽器的后退按鈕。按后退時,這個后退時顯示的網(wǎng)頁內(nèi)容是重新進行請求還是從緩存中取出呢?這就要看具體的實現(xiàn)策略了。

如果一個網(wǎng)頁在瀏覽結(jié)束時就進行內(nèi)容的回收,則按后退查看前面瀏覽過的頁面時,需要重新構(gòu)建

如果將瀏覽過的網(wǎng)頁存儲到內(nèi)存中會造成內(nèi)存的大量浪費,甚至?xí)斐蓛?nèi)存溢出.

如下代碼

Browser prev = new Browser(); // 獲取頁面進行瀏覽

SoftReference sr = new SoftReference(prev); // 瀏覽完畢后置為軟引用

if(sr.get()!=null){

rev = (Browser) sr.get(); // 還沒有被回收器回收,直接獲取

}else{

prev = new Browser(); // 由于內(nèi)存吃緊,所以對軟引用的對象回收了

sr = new SoftReference(prev); // 重新構(gòu)建

}

弱引用 具有弱引用的對象擁有更短暫的生命周期。在垃圾回收器線程掃描它所管轄的內(nèi)存區(qū)域的過程中,一旦發(fā)現(xiàn)了只具有弱引用的對象,不管當(dāng)前內(nèi)存空間足夠與否,都會回收它的內(nèi)存。 String str=new String("abc");

WeakReference abcWeakRef = newWeakReference(str);

str=null;

等價于

str = null;

System.gc();

虛引用 如果一個對象僅持有虛引用,那么它就和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收。虛引用主要用來跟蹤對象被垃圾回收器回收的活動。

柚子快報邀請碼778899分享:java JVM面試篇(下)

http://yzkb.51969.com/

文章鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18956526.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄