Garbage First
1 G1 的基本概念
1 : HotSpo
t:現有的垃圾回收器: Serial GC
, Parallel GC
,Concurrent Mark Sweep Gc
這三個GC不同:
1:如果你想要最小化的使用內存和並行開銷:選Serial GC
2:如果你想要最大化應用程序的吞吐量選用Parallel GC
3:如果想要最小化GC的中斷或停頓時間選CMS GC
*2 G1
是Garbage First, 意思: G1是一個並行回收器,它把內存分割為很多不相關的區間(Region
),每一個區間可以屬於老年代或年輕代,並且每個區間上是可以物理上不連續的,老年代區間這個設計理念本身是為了服務於並行後台線程,這些線程的主要工作是尋找未被引用的對象,而這樣就會產生一種現象,即某些區間的垃圾多餘其它區間,(垃圾回收時都是需要停下應用程序,不然沒辦法防止應用程序的幹擾
),然後G1
可以集中精力在垃圾最多的區間上,並且隻需要一點點時間就可以清空這些區間垃圾,騰出完全空閑的時間.總而言之:G1側重點在於處理垃圾最多的區間,所以叫Garbege First
*3 : G1內部主要有四個操作階段:
1:年輕代回收 (A young Collection)
2: 運行在後台的並行循環(A background Concurrent Cycle)
3: 混合回收(A mixed Collection)
4: 全量回收 (A full GC)
2 進程和線程
1: 子進程和父進程有不同的代碼和數據空間
,而多個線程共享數據空間
,每個線程都有自己的執行堆棧和程序計數器
為其執行上下文
3 ava###1 G1 的基本概念
1 : HotSpo
t:現有的垃圾回收器: Serial GC
, Parallel GC
,Concurrent Mark Sweep Gc
這三個GC不同:
1:如果你想要最小化的使用內存和並行開銷:選Serial GC
2:如果你想要最大化應用程序的吞吐量選用Parallel GC
3:如果想要最小化GC的中斷或停頓時間選CMS GC
*2 G1
是Garbage First, 意思: G1是一個並行回收器,它把內存分割為很多不相關的區間(Region
),每一個區間可以屬於老年代或年輕代,並且每個區間上是可以物理上不連續的,老年代區間這個設計理念本身是為了服務於並行後台線程,這些線程的主要工作是尋找未被引用的對象,而這樣就會產生一種現象,即某些區間的垃圾多餘其它區間,(垃圾回收時都是需要停下應用程序,不然沒辦法防止應用程序的幹擾
),然後G1
可以集中精力在垃圾最多的區間上,並且隻需要一點點時間就可以清空這些區間垃圾,騰出完全空閑的時間.總而言之:G1側重點在於處理垃圾最多的區間,所以叫Garbege First
*3 : G1內部主要有四個操作階段:
1:年輕代回收 (A young Collection)
2: 運行在後台的並行循環(A background Concurrent Cycle)
3: 混合回收(A mixed Collection)
4: 全量回收 (A full GC)
2 進程和線程
1: 子進程和父進程有不同的代碼和數據空間
,而多個線程共享數據空間
,每個線程都有自己的執行堆棧和程序計數器
為其執行上下文
3 java 裏麵的4中引用類型
1: 強引用 在一個線程內,無需直接引用直接可以使用的對象,除非引用不存在了,否則不會被GC清理了,
==
操作用於表示兩個操作數所指向的堆地址空間地址是否相同,不表示兩個操作數所指向的對象是否相等
2: 軟用於,JVM拋出OOM之前,GC會清理所有的軟引用對象,垃圾回收器在莫個時刻決定回收軟可達的對象的時候,會清理軟引用,並可選的把引用放到一個引用隊列(Reference Queue
),類似弱引用,隻不過java虛擬機會盡量讓軟引用存活時間長一點,破不得一才清理.
3**弱引用** (Weak Rederence
) 弱引用和軟引用的最大不同在於:當GC在進行回收時,需要通過算法檢查是否回收軟引用對象,而對於弱引用對象,GC總是進行回收.弱引用對象更容易,更快被GC回收.GC在運行時一定回收弱引用對象,但是關係複雜的弱引用對象群常常需要好幾次GC的運行才能完成
4**虛引用**(Phantom Reference): 主要目的是在一個對象所占用的內存被實際回收之前得到通知,從而進行一些相關清理工作,虛引用在創建時必須提供一個引用隊列作為參數,其次虛引用對象的get方法總是返回null,因此無法通過虛引用來獲得被引用的對象
5:**finalization機製**: finalize方法和c++中的析構函數類似,但是java采用的是基於垃圾回收器的自動內存管理機製
,所以finalize方法在本質上不同於c++的析構函數,當垃圾回收器發現沒有引用指向一個對象時,會調用這個對象的finalize方法,通常這個方法會進行一些資源釋放和清理的工作,比如關閉文件,套接字或數據庫鏈接
由於finalize方法存在,虛擬機中的對象一般處於三種可能的狀態
(1)可達到狀態(2)可複活狀態(腹瀉了finalize方法)(3)不可到達狀態,垃圾回收器自由釋放對象所占用內存
最後更新:2017-09-21 18:02:55