1、Java中full gc什麼意思?
轉發的~但能解決你的問題
除直接調用System.gc外,觸發Full GC執行的情況有如下四種。
1. 舊生代空間不足
舊生代空間只有在新生代對象轉入及創建為大對象、大數組時才會出現不足的現象,當執行Full GC後空間仍然不足,則拋出如下錯誤:
java.lang.OutOfMemoryError: Java heap space
為避免以上兩種狀況引起的FullGC,調優時應盡量做到讓對象在Minor GC階段被回收、讓對象在新生代多存活一段時間及不要創建過大的對象及數組。
2. Permanet Generation空間滿
PermanetGeneration中存放的為一些class的信息等,當系統中要載入的類、反射的類和調用的方法較多時,Permanet Generation可能會被占滿,在未配置為採用cms GC的情況下會執行Full GC。如果經過Full GC仍然回收不了,那麼JVM會拋出如下錯誤信息:
java.lang.OutOfMemoryError: PermGen space
為避免Perm Gen占滿造成Full GC現象,可採用的方法為增大Perm Gen空間或轉為使用CMS GC。
3. CMS GC時出現promotion failed和concurrent mode failure
對於採用CMS進行舊生代GC的程序而言,尤其要注意GC日誌中是否有promotion failed和concurrent mode failure兩種狀況,當這兩種狀況出現時可能會觸發Full GC。
promotionfailed是在進行Minor GC時,survivor space放不下、對象只能放入舊生代,而此時舊生代也放不下造成的;concurrent mode failure是在執行CMS GC的過程中同時有對象要放入舊生代,而此時舊生代空間不足造成的。
應對措施為:增大survivorspace、舊生代空間或調低觸發並發GC的比率,但在JDK 5.0+、6.0+的版本中有可能會由於JDK的bug29導致CMS在remark完畢後很久才觸發sweeping動作。對於這種狀況,可通過設置-XX:CMSMaxAbortablePrecleanTime=5(單位為ms)來避免。
4. 統計得到的Minor GC晉升到舊生代的平均大小大於舊生代的剩餘空間
這是一個較為復雜的觸發情況,Hotspot為了避免由於新生代對象晉升到舊生代導致舊生代空間不足的現象,在進行Minor GC時,做了一個判斷,如果之前統計所得到的Minor GC晉升到舊生代的平均大小大於舊生代的剩餘空間,那麼就直接觸發Full GC。
例如程序第一次觸發MinorGC後,有6MB的對象晉升到舊生代,那麼當下一次Minor GC發生時,首先檢查舊生代的剩餘空間是否大於6MB,如果小於6MB,則執行Full GC。
當新生代採用PSGC時,方式稍有不同,PS GC是在Minor GC後也會檢查,例如上面的例子中第一次Minor GC後,PS GC會檢查此時舊生代的剩餘空間是否大於6MB,如小於,則觸發對舊生代的回收。
除了以上4種狀況外,對於使用RMI來進行RPC或管理的Sun JDK應用而言,默認情況下會一小時執行一次Full GC。可通過在啟動時通過- java-Dsun.rmi.dgc.client.gcInterval=3600000來設置Full GC執行的間隔時間或通過-XX:+ DisableExplicitGC來禁止RMI調用System.gc。
2、為何full gc次數遠大於minor gc
2、對新生代的是young gc,full gc一般是老年區滿(比例)或永久區觸發。變小是正常的,說明老年區也有較多死對象被回收了。你在命令行窗口:jps 看一下java 進程id,分辨一下哪個是eclipse進程。像我目前就開了三個java應用,2092顯然是我的eclipse進程。M:\jps5872 Bootstrap //tomcat5236 Jps2092 //eclipse再使用jstat命令M:\jstat -gcutil 2092 1000S0 S1 E O P YGC YGCT FGC FGCT GCT27.20 0.00 88.50 30.01 60.79 106 3.681 61 33.571 37.25327.20 0.00 88.50 30.01 60.79 106 3.681 61 33.571 37.25327.20 0.00 88.50 30.01 60.79 106 3.681 61 33.571 37.253jstat -gcutil java進程id 刷新時間(ms)S0:surive0 S1:surive1 E:edgn 這三個是新生代O:old 老年代 P:永久區以上是空間佔用百分比,其中每個空間滿或即將滿(根據vm參數)會導致gc。YGC:young gc次數 YGCT:young gc開銷的時間 FGC:full gc次數 FGCT:full gc開銷時間 GCT:所有gc開銷時間
3、cms gc過程中哪幾個階段暫停應用程序
問題解決:中間調整過幾次,先搞了幾台機器做了驗證,後來逐步推廣的。
1、調大heap區,由原來的4g,調整到5g,young區的大小不變,還是2g,這時候old區就由2g變為3g了(這樣保證old區有足夠的空間);
2、設置-XX:UseCMSInitiatingOccupancyOnly,其實這個不關這個問題,只是發現半夜CMS進行的有點頻繁,就禁止掉了悲觀策略;
3、設置CMS區回收的比例,從80%調整到75%,讓old區盡早的進行,有足夠的空間剩餘;
為什麼要有GC(垃圾回收)?
JVM通過GC來回收堆和方法區中的內存,GC的基本原理就是找到程序中不再被使用的對象,然後回收掉這些對象佔用的內存。
4、gc 怎麼區分是否full gc
除直接調用System.gc外,觸發Full GC執行的情況有如下四種。
1. 舊生代空間不足
舊生代空間只有在新生代對象轉入及創建為大對象、大數組時才會出現不足的現象,當執行Full GC後空間仍然不足,則拋出如下錯誤:
java.lang.OutOfMemoryError: Java heap space
為避免以上兩種狀況引起的Full GC,調優時應盡量做到讓對象在Minor GC階段被回收、讓對象在新生代多存活一段時間及不要創建過大的對象及數組。
2. Permanet Generation空間滿
Permanet Generation中存放的為一些class的信息等,當系統中要載入的類、反射的類和調用的方法較多時,Permanet Generation可能會被占滿,在未配置為採用CMS GC的情況下會執行Full GC。如果經過Full GC仍然回收不了,那麼JVM會拋出如下錯誤信息:
java.lang.OutOfMemoryError: PermGen space
為避免Perm Gen占滿造成Full GC現象,可採用的方法為增大Perm Gen空間或轉為使用CMS GC。
3. CMS GC時出現promotion failed和concurrent mode failure
對於採用CMS進行舊生代GC的程序而言,尤其要注意GC日誌中是否有promotion failed和concurrent mode failure兩種狀況,當這兩種狀況出現時可能會觸發Full GC。
promotion failed是在進行Minor GC時,survivor space放不下、對象只能放入舊生代,而此時舊生代也放不下造成的;concurrent mode failure是在執行CMS GC的過程中同時有對象要放入舊生代,而此時舊生代空間不足造成的。
應對措施為:增大survivor space、舊生代空間或調低觸發並發GC的比率,但在JDK 5.0+、6.0+的版本中有可能會由於JDK的bug29導致CMS在remark完畢後很久才觸發sweeping動作。對於這種狀況,可通過設置-XX: CMSMaxAbortablePrecleanTime=5(單位為ms)來避免。
4. 統計得到的Minor GC晉升到舊生代的平均大小大於舊生代的剩餘空間
這是一個較為復雜的觸發情況,Hotspot為了避免由於新生代對象晉升到舊生代導致舊生代空間不足的現象,在進行Minor GC時,做了一個判斷,如果之前統計所得到的Minor GC晉升到舊生代的平均大小大於舊生代的剩餘空間,那麼就直接觸發Full GC。
例如程序第一次觸發Minor GC後,有6MB的對象晉升到舊生代,那麼當下一次Minor GC發生時,首先檢查舊生代的剩餘空間是否大於6MB,如果小於6MB,則執行Full GC。
當新生代採用PS GC時,方式稍有不同,PS GC是在Minor GC後也會檢查,例如上面的例子中第一次Minor GC後,PS GC會檢查此時舊生代的剩餘空間是否大於6MB,如小於,則觸發對舊生代的回收。
除了以上4種狀況外,對於使用RMI來進行RPC或管理的Sun JDK應用而言,默認情況下會一小時執行一次Full GC。可通過在啟動時通過- java -Dsun.rmi.dgc.client.gcInterval=3600000來設置Full GC執行的間隔時間或通過-XX:+ DisableExplicitGC來禁止RMI調用System.gc。
5、Minor GC,Major GC和Full GC之間的區別
major就是你的主修專業,Minor是你的輔修專業。
1. 一般情況下,大一新生不用著急選專業,大一都是適應階段,會有上簡單的公共課什麼的。大二的時候一般情況下就會了解了,然後可以選專業。 美國專業不像國內,你想怎麼換就怎麼換,後悔了改業來得及,但是你要考慮時間,一般你的advisor都會幫你改,而且免費,高效!
2.學校的課程包括很多種,不只是major,還有很多選修課,也需要滿足,是有一級一級的要求的,修過了一些基礎課程以後才會允許你修更高級的課程。
3.輔修專業。 不是大一進去讀得基本課程。 比如說你選擇了會計專業,但是你又對金融感興趣,你可以選擇double major,也就是雙學位,或者major in accounting,minor in Finance,主修會計,輔修金融,區別在於,minor的學分沒有major要求的分數多(就是說,比如要得到一個major的學位你必須修120個學分,加另一個major會再需要18個學分,再一個minor 可能只需要12個學分)
你有
6、Major GC和Full GC的區別是什麼?觸發條件
區別:
Full GC:收集整個堆,包括young gen、old gen、perm gen(如果存在的話)等所有部分的模式。
Major GC通常是跟full GC是等價的,收集整個GC堆。
觸發條件:
young GC:當young gen中的eden區分配滿的時候觸發。注意young GC中有部分存活對象會晉升到old gen,所以young GC後old gen的佔用量通常會有所升高。
full GC:當准備要觸發一次young GC時,如果發現統計數據說之前young GC的平均晉升大小比目前old gen剩餘的空間大,則不會觸發young GC而是轉為觸發full GC(因為HotSpot VM的GC里,除了CMS的concurrent collection之外,其它能收集old gen的GC都會同時收集整個GC堆,包括young gen,所以不需要事先觸發一次單獨的young GC);或者,如果有perm gen的話,要在perm gen分配空間但已經沒有足夠空間時,也要觸發一次full GC;或者System.gc()、heap mp帶GC,默認也是觸發full GC。
7、什麼是fullgc和younggc
GC是垃圾回收站。
FULL GC分析和問題定位
a. GC log收集和分析
(1)在JVM啟動參數增加:"-verbose:gc -Xloggc:<file_name> -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
PrintGCTimeStamp只能獲得相對時間,建議使用PrintGCDateStamps獲得full gc 發生的絕對時間
(2)如果採用CMS GC,仔細分析jstat FGC輸出和GC 日誌會發現, CMS的每個並發GC周期則有兩個stop-the-world階段——initial mark與final re-mark,使得CMS的每個並發GC周期總共會更新full GC計數器兩次,initial mark與final re-mark各一次
b. Dump JVM 內存快照
/opt/taobao/java/bin/jmap -mp:format=b,file=mp.bin pid
這里有一個問題是什麼時候進行mp?
一種方法是前面提到的用jstat工具觀察,當OLD區到達比較高的比例如60%,一般會很快觸發一次FULL GC,可以進行一次DUMP,在FULL GC發生以後再DUMP一次,這樣比較就可以發現到底是哪些對象導致不停的FULL GC
另外一種方法是通過配置JVM參數
-XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC分別用於指定在full GC之前與之後生成heap mp
c. 利用MAT((Memory Analyzer Tool)工具分析mp文件
關於MAT具體使用方法網上有很多介紹,這里不做詳細展開,這里需要注意的是:
(1) MAT預設只分析reachable的對象,unreachable的對象(將被收集掉的對象)被忽略,而分析FULL GC頻繁原因時unreachable object也應該同時被重點關注。如果要顯示unreachable的對象細節必須用mat 1.1以上版本並且打開選項「keep unreachable object」
(2) 通常mp文件會好幾個G,無法在windows上直接進行分析,我們可以先把mp文件在linux上進行分析,再把分析好的文件拷貝到windows上,在windows上用MAT打開分析文件。
8、visual 監控的gc是full gc還是young gc
在江東,孫權令諸葛瑾入川討荊州未果,魯肅為孫權所迫,設鴻門宴邀關羽過江,欲逼還荊州。關羽單刀赴會,以其非凡的膽識,挫敗了這一謀劃。[1] 在許昌,曹操誅殺密謀害己的伏皇後等人,又平定了漢中。為報赤壁之仇,曹操兩次起兵與孫權交戰,合肥會戰,雙方互有勝敗。最後孫權作書勸退曹操,曹操也知江東一時不可得,兩方罷兵。[1]
9、full gc概要的解釋一下。例如別人都說 系統做full gc很頻繁是什麼意思?
是全量GC。。。
垃圾回收分小GC和Full GC
小GC針對年輕代,大GC針對年老代
10、弱弱的問一句 jvm full gc到底是啥意思
JVM 內置的通用垃圾回收原則,堆內存劃分為 Eden、Survivor 和 Tenured/Old 空間。GC一共分三種:MinorGC,Major GC v和Full GC。Full GC是清理整個堆空間—包括年輕代和永久代。有時候系統會頻繁的FullGC,這時候需要去伺服器查一下原因。
當編輯並運行一個Java程序時,需要同時涉及到這四種方面。使用文字編輯軟體(例如記事本、寫字板、UltraEdit等)或集成開發環境(Eclipse、MyEclipse等)在Java源文件中定義不同的類,通過調用類(這些類實現了Java API)中的方法來訪問資源系統,把源文件編譯生成一種二進制中間碼,存儲在class文件中,然後再通過運行與操作系統平台環境相對應的Java虛擬機來運行class文件,執行編譯產生的位元組碼,調用class文件中實現的方法來滿足程序的Java API調用。

(10)fullgc和younggc和CMS擴展資料
觸發Full GC執行的情況有如下四種。舊生代空間不足
1.舊生代空間只有在新生代對象轉入及創建為大對象、大數組時才會出現不足的現象,當執行Full GC後空間仍然不足,則拋出如下錯誤:
java.lang.OutOfMemoryError: Java heap space
為避免以上兩種狀況引起的FullGC,調優時應盡量做到讓對象在Minor GC階段被回收、讓對象在新生代多存活一段時間及不要創建過大的對象及數組。
2. Permanet Generation空間滿
PermanetGeneration中存放的為一些class的信息等,當系統中要載入的類、反射的類和調用的方法較多時,Permanet Generation可能會被占滿,在未配置為採用CMS GC的情況下會執行Full GC。如果經過Full GC仍然回收不了,那麼JVM會拋出如下錯誤信息:
java.lang.OutOfMemoryError: PermGen space
為避免Perm Gen占滿造成Full GC現象,可採用的方法為增大Perm Gen空間或轉為使用CMS GC。
3. CMS GC時出現promotion failed和concurrent mode failure
對於採用CMS進行舊生代GC的程序而言,尤其要注意GC日誌中是否有promotion failed和concurrent mode failure兩種狀況,當這兩種狀況出現時可能會觸發Full GC。
promotionfailed是在進行Minor GC時,survivor space放不下、對象只能放入舊生代,而此時舊生代也放不下造成的;concurrent mode failure是在執行CMS GC的過程中同時有對象要放入舊生代,而此時舊生代空間不足造成的。
應對措施為:增大survivorspace、舊生代空間或調低觸發並發GC的比率,但在JDK 5.0+、6.0+的版本中有可能會由於JDK的bug29導致CMS在remark完畢後很久才觸發sweeping動作。對於這種狀況,可通過設置-XX:CMSMaxAbortablePrecleanTime=5(單位為ms)來避免。
4. 統計得到的Minor GC晉升到舊生代的平均大小大於舊生代的剩餘空間
這是一個較為復雜的觸發情況,Hotspot為了避免由於新生代對象晉升到舊生代導致舊生代空間不足的現象,在進行Minor GC時,做了一個判斷,如果之前統計所得到的Minor GC晉升到舊生代的平均大小大於舊生代的剩餘空間,那麼就直接觸發Full GC。
例如程序第一次觸發MinorGC後,有6MB的對象晉升到舊生代,那麼當下一次Minor GC發生時,首先檢查舊生代的剩餘空間是否大於6MB,如果小於6MB,則執行Full GC。
當新生代採用PSGC時,方式稍有不同,PS GC是在Minor GC後也會檢查,例如上面的例子中第一次Minor GC後,PS GC會檢查此時舊生代的剩餘空間是否大於6MB,如小於,則觸發對舊生代的回收。
除了以上4種狀況外,對於使用RMI來進行RPC或管理的Sun JDK應用而言,默認情況下會一小時執行一次Full GC。可通過在啟動時通過- java-Dsun.rmi.dgc.client.gcInterval=3600000來設置Full GC執行的間隔時間或通過-XX:+ DisableExplicitGC來禁止RMI調用System.gc。
參考資料來源:網路-JAVA