對象的四種引用類型java
怎麼判斷對象是否仍在使用?算法
可做爲GC Roots的對象有哪幾類?緩存
方法區回收的必要條件安全
主要回收兩部份內容:廢棄的常量和再也不使用的類型。性價比很低架構
安全點和安全區域併發
HotSpot沒有爲每一條指令生成OopMap,只在「特定位置」記錄了這些信息(OopMap可理解成附加信息,對棧內的數據進行說明),這些位置稱爲安全點,線程在安全點能夠被肯定,從而肯定GC Roots信息。佈局
安全點特定位置性能
安全區域線程
安全區域是指一段代碼片中,引用關係不會發生變化,在這個區域任何地方 GC 都是安全的,安全區域能夠看作是安全點的一個擴展code
併發狀況下的可達性變更解決算法(G1和cms)
標記-清除算法
標記須要回收的對象或不須要回收的對象,再統一清除。
缺點:
標記-複製算法
把內存空間分爲兩塊,每次只使用其中一塊,當該塊內存不足後,把存活的對象複製到另外一塊,再把原空間一次性清除。
優勢:沒有內存碎片。
缺點:內存空間利用率低;當存活對象較多時,效率變低
標記-整理算法
標記完成後,將存活的對象向一端移動,清除邊界之外的內容
優勢:內存規整,對象賦值/建立速度快
缺點:標記、清理效率不高
分代收集
分代收集是將對象按照存活時間進行分代(新生代和老年代),根據不一樣區域的特色結合前三種算法進行收集
新生代複製算法的改進:許多新生代的對象存活時間較短,不須要按照1:1的比例進行復制算法內存分配,可將內存分爲較大的Eden區和兩塊較小的Survivor,回收時將Eden 和 Survivor 中還存活着的對象一次性地複製到另一塊 Survivor 空間上,最後清理掉 Eden 和剛纔用過的 Survivor 空間
新生代
老年代
CMS
響應時間優先,標記清除算法。多用於B/S架構的服務端上
G1
面向整個堆空間的Region佈局形式,每一個Region均可以扮演Eden、Survivor或老年代空間。容許設定收集停頓時間