源码分析:java堆的创建-java开发java经验技巧

源码分析:java堆的创建-java开发java经验技巧

ID:30854066

大小:506.87 KB

页数:17页

时间:2019-01-04

源码分析:java堆的创建-java开发java经验技巧_第1页
源码分析:java堆的创建-java开发java经验技巧_第2页
源码分析:java堆的创建-java开发java经验技巧_第3页
源码分析:java堆的创建-java开发java经验技巧_第4页
源码分析:java堆的创建-java开发java经验技巧_第5页
资源描述:

《源码分析:java堆的创建-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、源码分析:Java堆的创建-编程开发技术源码分析:Java堆的创建丿京文出处:iceAetcma虚拟机在内存中申请一片区域,由虚拟机自动管理,用來满足应用程序对象分配的空间需求,即堆空间。由于程序运行的局部特性,程序创建的大多数对象都具有菲常短的生命周期,而程序也会创建一些生命周期特别长的对象。简单的复制收集器无论对象的生命周期是长是短,都会进行复制操作。而生命周期较长的对象在多次垃圾回收期间内并不会被冋收,这就使得这些对象被來冋复制而使得算法性能大大下降。分代收集把堆分为多个了堆,分别用来存放不同寿命的对象。新生对象空间的将经丿力最频繁的垃圾回收,而对丁经丿力了若干次垃圾收集后仍然存活的对

2、象,将成长为成熟对彖,并移动到成熟对象的子堆中,而对老生代子堆的垃圾冋收就不会像新生对象子堆那么频繁。HotSpot的堆空间分为新生代(YoungGen)和老年代(OldGen,此外还冇位于非堆空间的永久代,但在Java8中将移除永久代),新生代又分为Eden区和2个Survivor区(From/To)用以进行复制收集垃圾对彖。对Java堆和对彖的分析将从Java堆的创建开始,然后分析Java对彖的分配与垃圾回收。一、堆的实现方式在虚拟机的创建初始化过程屮,通过调用Universe的成员函数initialize_heap()将完成Java堆的初始化。在Universe模块下的初始化将根据虚拟

3、机选项来选择堆的具体实现方式:1.若虚拟机配置UseParallelGC,则Java堆的堆类型为ParallclScavcngcIIcap(并行收集堆)//hotspot/sre/share/vm/memory/universe・epp屮if(UseParallelGC){#ifndefSERIALGCUniverse::_collectedHeap二newParallelScavengeHeapO;#else//SERIALGCfatal(z,UseParallelGCnotsupportedinjavakernelvm.〃);#endif//SERIALGC2•若虚拟机配置UseGIGC

4、,那么将选择堆类型为GlCollectedHeap,垃圾收集策略将使用专用的GlCollectorPolicy(垃圾优先收集)策略elseif(UseGIGC){ttifndefSERIALGCGlCollccto^Policy*glp=newGlCollcctorPolicyBcstRcgionsFirst();GlCollectedHeap*glh=newGlCollectedHeap(glp);Universe::_collectedHeap二glh;#else//SERTALGCfatal("UseGIGCnotsupportedinjavakernelvm.〃);itendif//

5、SERIALGC3.否则,虚拟机将使用GenCol1ectedHeap(分代收集堆)Universe::_collectedHeap二newGenCol1ectedHeap(gc_policy);各个堆实现类的类关系如下:对于默认情况下的堆实现,还耍根据配置选择垃圾回收策略gc_policy来构造一个GenCollectedHeap,这里根据虚拟机配置选择不同的GC策略:(1)・若虚拟机配置UseSerialGC,那么将使用MarkSweepPolicy(标记-清除)策略GenCollectorPolicy*gc_policy;if(UseSerialGC){gc_policy二newMar

6、kSweepPolicy();}~(2).若虚拟机配置UscConcMarkSwccpGC和UscAdaptivcSizcPolicy,那么将使用ASConcurrcntMarkSwccpPolicy(ill适应并发标记-清除)策略,若没有指定UseAdaptiveSizePolicy,虚拟机将默认使用ConcurrentMarkSweepPolicy(并发标记-清除)策略elseif(UseConcMarkSweepGC){ttifndefSERIALGCif(UscAdaptivcSizcPolicy){gcpolicy=newASConcurrentMarkSweepPolicy();

7、}else{gc_policy=newConcurrentMarkSweepPolicy();}-(1)•若没冇进行配置,虚拟机将默认使用MarkSweepPolicy策略else{//defaultoldgenerationgcpolicy=newMarkSweepPolicy();}~如下表所示:虔拟机配置参数内存堆实現回收策略UseParallelGCParallelScavengerHeapGener

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

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

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