欢迎来到天天文库
浏览记录
ID:30854066
大小:506.87 KB
页数:17页
时间:2019-01-04
《源码分析: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
此文档下载收益归作者所有