深入了解Java 5.0的垃圾收集 - 编程入门网
差,是分布系统,包括远程方法调用(RMI)中的重要因素。
通常来说,特定的代大小选择这些因素之间的平衡作用。例如,一个非常大的新生代的吞吐量可以最大,但这要以牺牲占用率、反应性和暂停时间为代价。你也可以牺牲吞吐量,应用一个小型的新生代来使新生代暂停时间最短。 如果你希望提高有大量处理器的应用程序的性能,你应该使用吞吐量收集器。你可以用命令行标记-XX:+UseParallelGC来激活吞吐量收集器。你可以用ParallelGCThreads选项-XX:ParallelGCThreads=来控制垃圾收集器线程的数量。 最大暂停时间目标用命令行标记-XX:MaxGCPauseMillis=来指定,这是对吞吐量收集器的一个暗示,即它需要毫秒或更短的暂停时间。存在有许多调整代大小的选项,如-XX:YoungGenerationSizeIncrement=用于新生代;而-XX:TenuredGenerationSizeIncrement=用于旧生代。 如果应用程序受益于较短的垃圾收集器暂停,且能够在应用程序运行时与垃圾收集器共享处理器资源,我建议使用并行低暂停收集器。如果旧生代占用率超出初始占用率(即当前堆的百分比用于并发收集启动之前),并发收集将启动。 默认的初始占用率约为68%.你可以用参数-XX:CMSInitiatingOccupancyFraction=进行设置,这里的是当前旧生代大小百分比。你能够以并发阶段递增完成的方式使用并发收集器。这种模式(这里称之为“i-cms”)将收集器并发完成的工作分割成时间小段,安排在新生代收集之间。当需要并发收集器提供短暂停时间的应用程序在拥有少量处理器的机器上运行时,这一特性很有帮助。 深入了解Java 5.0的垃圾收集(2)时间:2011-01-21微调垃圾收集 命令行参数-verbose:gc打印每个收集阶段的信息。如果打开此参数,你会在每个垃圾收集阶段看到相似的输出结果。例如: [GC 325407K->83000K(776768K), 0.2300771 secs] [GC 325816K->83372K(776768K), 0.2454258 secs] [Full GC 267628K->83769K(776768K), 1.8479984 secs] 有两个次要收集和一个主要收集(完全GC)。标记-XX:+PrintGCDetails打印收集的其他信息。标记-XX:+PrintGCTimeStamps打印每次收集开始的时间。列表A是两个标记被设定后的结果。 另外,主要收集的信息由旧生代描述。在这里,旧生代使用率减少到约10%,所用时间约为0.13秒。 许多参数影响代的大小。在虚拟机的初始阶段,堆的整个空间被保留。你可以用-Xmx选项指定保留空间的大小。如果-Xms参数的值小于-Xmx参数的值,表示不是所有的保留空间立即提交给虚拟机。堆的不同部分(永生代、旧生代和新生代)必要时可能会超出虚拟空间的限制。 默认情况下,在每次收集时,虚拟机增大或缩小堆的大小,努力将自由空间与活动对象的比例保持在一个特定的范围内。这个范围是一个百分数,由参数-XX:MinHeapFreeRatio=和-XX:MaxHeapFreeRatio=设定,-Xms为下限,-Xmx为上限。除非有暂停问题,否则向虚拟机许可尽可能多的内存。默认的大小(64MB)一般都太小。你可以在Sun网站找到其他VM选项的说明。 你还可以为新生代的堆设定一个比例。新生代越大,次要收集就越少发生。但是,在一个有限大小的堆中,新生代越大就意味着旧生代越小,这会增加主要收集的频率。最优选择要根据应用程序分配的对象的寿命分配来决定。 新生代的大小由NewRatio控制。例如,设定-XX:NewRatio=3说明新生代与旧生代之比为1:3.如果希望的话,可用参数SurvivorRatio来调整生存空间的大小,但它并不如性能重要。 例如,-XX:SurvivorRatio=6说明每个生存空间与eden的比为1:6.除非你发现过多主要收集或暂停时间问题,向新生代许可大量内存。 Java 5.0执行了三个不同的垃圾收集器。吞吐量收集器使用新生代收集器的并行版本。如果-XX:+U |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |