源码分析hotspotgc过程(上)-编程开发技术

源码分析hotspotgc过程(上)-编程开发技术

ID:30838415

大小:122.52 KB

页数:8页

时间:2019-01-04

源码分析hotspotgc过程(上)-编程开发技术_第1页
源码分析hotspotgc过程(上)-编程开发技术_第2页
源码分析hotspotgc过程(上)-编程开发技术_第3页
源码分析hotspotgc过程(上)-编程开发技术_第4页
源码分析hotspotgc过程(上)-编程开发技术_第5页
资源描述:

《源码分析hotspotgc过程(上)-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、源码分析HotSpotGC过程(上)■编程开发技术源码分析HotSpotGC过程(上)原文出处:iceAeterna对于HotSpot虚拟机垃圾回收过程,这里将分析介绍默认配置下MarkSwccpPolicy的DefNewGcncration和TcnurcdGcncration的垃圾回收内容以及介绍其他GC策略和代实现的GC思想。GC的过程姑月.简单地分为内存代实现无关的GC过程和内存代GC过程。木文将先进行内存代实现无关的GC过程分析,内存代GC过程将在后面进行分析。从GenCollectedlleap的do_collection()说起:1•在GCZ前有许多必要的检查和统计任务,

2、比如对回收内存代的统计、堆内存大小的统计等,注意本节内容将不再去分析一些性能统计的内容,有兴趣的可自行分析。(1)・检查是否已经GC锁是否已经激活,并设置需要进行GC的标志为true,这时,通过is_active_and_needs_gc()就可以判断是否己经有线程触发了GC。if(GC_lockcr::chcck_activc_bcforc_gc()){return;//GCisdisabled(e.g・JN1GetXXXCriticaloperation)(2).检查是否需要冋收所有的软引用。constbooldo_clear_all_soft_refs=clear_all_so

3、ft_refscollectorpolicy()->should_clear_all_soft_refs();(3).记录永久代已经使用的内存空间大小。constsize_tpermprevused二permgen()->used();(4).确定冋收类型是否是FullGC以及gc触发类型(GC/FullGC(system)/FullGC,用作Log输出)。boolcomplete=full&&(max_level==(n_gens()T));constchar*gccausestr=〃GC“;if(complete){GCCause::Causecause二gc_cause();i

4、f(cause==GCCause::_java_lang_systcm_gc){gc_cause_str="FullGC(System)“;}else{gccausestr二"FullGC〃;(1)•gc计数加1操作(包括总GC计数和FullGC计数)。increment_total_col1ections(complete);(2)•统计堆已被使用的空间大小。sizetgchprevused=used();(3).如果是FullGC,那么从最高的内存代到最低的内存代,若某个内存代不希望对比其更低的内存代进行单独冋收,那么就以该内存代作为GC的起始内存代。这里说明下什么是单-独冋收。

5、新牛代比如DefNewGeneration的实现将对新牛代使用复制算法进行垃圾回收,而老年代TenuredGeneration的垃圾回收则会使用其标记-压缩-清理算法对新生代也进行处理。所以可以说DcfNcwGencration的垃圾回收是对新生代进行单独回收,而TenuredGeneration的垃圾回收则是对老年代和更低的内存代都进行冋收。intstarting_level二0;if(full){//Searchfortheoldcstgenerationwhichwillcollectallyounger//generations,andstartcollectionloopt

6、here.for(inti=maxlevel;i>=0;i--){if(_gens[i]->full_col1ects_younger_genegations()){starting_level二i;break;}}}2•接下來从GC的起始内存代开始,向最老的内存代进行冋收。(1)•其Hlshould_collectO将根据该内存代GC条件返回是否应该对该内存代进行GC。若当前回收的内存代是最老的内存代,如果本次gc不是FullGC,将调用increment_total_full_collections()修止Z前的FulllGC计数值。intmax_level_collected二

7、starting_level;for(inti二starting_level;i<=max_level;i++){if(_gcns[i]->should_collect(full,size,is_tlab)){if(i==n_gens()-1){//amajorcollectionistohappenif([complete){//Thefull_collectionsincrementwasmissedabove,increment_total_full

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。