GC是在什么時候,對什么東西,做了什么事情

1、在什么時候GC

? ? ? ?首先,GC堆內存分為三部分:Young Generation,Old Generation,Permanent Generation。

? ? ? ? Young Generation 分為:Eden , Survivor1 , Survivor2, 新創建的對象會分配在Eden區,在經歷一次Minor GC后會被移到Survivor 1區,再經歷一次Minor GC后會被移到Survivor 2區,直到升至老年代,需要注意的是,一些大對象(長字符串或數組)可能會直接存放到老年代;升到老年代的對象大于剩余空間時,會發生Full GC,或者小于時,查看是否設置了XX:+HandlePromotionFailure(允許擔保失敗)參數,若允許,則只會進行Minor GC,此時可以容忍內存分配失敗;若不允許,強制Full GC。

? ? ? ?GC與非GC時間耗時超過了GCTimeRatio的限制引發OOM,調優諸如通過NewRatio控制新生代老年代比例,通過MaxTenuringThreshold控制進入老年前生存次數等。了解GC參數,請參見另一篇文章

2、對什么東西GC

? ? ? ?從GC root 開始搜索,搜索不到的對象和經過第一次標記、清理后仍舊沒復活的對象,這類對象會被GC。

3、GC做了什么事情

? ? ? ? 按照各部分的收集器進行空間回收,其中涉及到的收集器和GC算法參見另兩篇文章:

收集器?和GC算法

? ? ? ? 新生代做復制清理、老年代做的是標記整理、標記清除

參考文獻:

http://icyfenix.iteye.com/blog/715301

https://yemengying.com/2016/05/13/jvm-GC/

http://www.cnblogs.com/zhguang/p/3257367.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 原文閱讀 前言 這段時間懈怠了,罪過! 最近看到有同事也開始用上了微信公眾號寫博客了,挺好的~給他們點贊,這博客我...
    碼農戲碼閱讀 6,020評論 2 31
  • JVM架構 當一個程序啟動之前,它的class會被類裝載器裝入方法區(Permanent區),執行引擎讀取方法區的...
    cocohaifang閱讀 1,700評論 0 7
  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虛擬機(JVM)垃圾回收器提供...
    簡欲明心閱讀 89,883評論 17 311
  • 聲明:原創文章,轉載請注明出處。http://www.lxweimin.com/u/e02df63eaa87 1、J...
    唐影若凡閱讀 1,265評論 0 6
  • 轉載blog.csdn.net/ning109314/article/details/10411495/ JVM工...
    forever_smile閱讀 5,402評論 1 56