`
leichenlei
  • 浏览: 124257 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jvm垃圾回收——功效学

 
阅读更多
http://docs.oracle.com/javase/1.5.0/docs/guide/vm/gc-ergonomics.html

转载请注明出处,多谢。

 

这些变化J2SE5.0开始有效。(同样适用于java6

1       

server-class机器(至少2CPU同时至少2G物理内存)上运行serverVM模式,回收器自动从串行(-XX:+UseSerialGC) 变成并行(-XX:+UseParallelGC)。你也可以通过命令行-XX:+UseSerialGC改回来。

2       

server-class机器上使用并行GC,无论client或者server模式,初始堆大小和最大堆大小如下变化:

初始堆大小:

大于1/64物理内存或者合理的最小值(Larger of 1/64th of the machine's physical memory on the machine or some reasonable minimum.)在J2SE 5.0z之前默认初始堆大小是合理的最小值,并且不同平台值不同。可以用-Xms改动。

堆最大值:

小于1/4物理内存或者1GB。在J2ES 5.0之前默认只是64MB。你可以用-Xmx改动。

 

注意:边界值和分数值在J2SE5.0适用。很可能在以后的版本中不同,由于计算机变得更强大。

3       

平行垃圾回收器(UseParallelGC) 抛出out-of-memory异常,如果在小数量堆上收集而花费过多的时间。为了避免异常,你可以增加堆大小。你也可以设置参数-XX:GCTimeLimit=time-limit-XX:GCHeapFreeLimit=space-limit :(译者:到达限制会抛出oom

 

time-limit:垃圾回收时间占整体时间的上限百分比(默认98)

space-limit:可用区域占堆最大值的百分比(默认2

4       

-XX:+UseAdaptiveSizePolicy-XX:+UseParallelGC收集器下默认使用,已经变成考虑一下三个目标:

1最大GC暂停时间需求

2应用吞吐量目标需求

3最小覆盖(foorprint)

按照一下顺序:

1如果GC暂停时间大于暂停目标,减少代大小完成目标。

2如果暂停时间合适,考虑应用吞吐目标。如果应用吞吐量目标不合适,增加代大小,完成目标。

3如果以上都合适,减少代大小,来减少GC所需的覆盖面(foorprint)

标记

-XX:MaxGCPauseMillis=nnn

告诉虚拟机需要nnn毫秒或者以下的暂停时间。VM将会调正堆大小和其他GC相关参数,试图保持GC触发(GC-induced)暂停时间比nnn毫秒短。注意,这可能引起VM减少吞吐量,在某些情况下,VM不能满足暂停时间需要。

默认没有暂停时间目标。如何很好的满足暂停时间目标有一定的局限性。GC暂停时间依赖于堆中活着对象的数量,次GC和主GC的依赖方式也不同。所以小心使用这个参数。太小的值可能引起系统花费大量时间再GC上。

 

-XX:GCTimeRatio=nnn

告诉虚拟机回收器花费的时间,不要超过应用执行时间的1/1+nnn)。例如-XX:GCTimeRatio=19是设置GC时间是整个时间的5%,吞吐量是95%。应用时间是垃圾回收的19倍。

默认值是99,意味着应用至少是垃圾回收的99倍。也就是,垃圾回收不要超过整体时间的1%。这对于服务器应用是个好的选择。值太大会引起堆大小增长到最大值。

建议策略

不要选择堆的最大值,除非你知道你的堆比默认最大值大。选择吞吐量对于你的应用足够了。

 

在理想情况,堆会增长到一个值(比最大值小)来支持选择的吞吐量。

 

如果堆涨到最大值,吞吐量不还没有达到。尽可能大的设置堆,但是不要大于物理内存;再执行应用,如果吞吐量仍然不能达到,它对于可用内存(译者:需要加内存了)过高了。

 

如果吞吐量可以达到,但是暂停时间太长,设置一个暂停时间目标。这很可能意味着你的吞吐量目标达不到了,所以暂停时间值应该是可以让应用达到一个合适的平衡。

分享到:
评论

相关推荐

    7种jvm垃圾回收器,这次全部搞懂(csdn)————程序.pdf

    7种jvm垃圾回收器,这次全部搞懂(csdn)————程序

    Java 详解(JVM) 垃圾回收机制原理(csdn)————程序.pdf

    Java 详解(JVM) 垃圾回收机制原理(csdn)————程序

    什么是Java虚拟机(JVM)?——–回过头来看

    什么是Java虚拟机(JVM)?——–回过头来看 博客说明 文章所涉及的资料来自互联网整理和个人总结,...Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 Java虚拟机(JVM)是可

    实战Java虚拟机——JVM故障诊断与性能优化 pdf

    第4~~5章介绍了垃圾回收的算法和各种垃圾回收器。第6章介绍了虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是锁的支持。第9~~10章介绍了虚拟机的...

    实战Java虚拟机——JVM故障诊断与性能优化

    第4~5章介绍了垃圾回收的算法和各种垃圾回收器。第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java...

    深入java虚拟机

    1.3 JVM调优总结(三)-基本垃圾回收算法 1.4 JVM调优总结(四)-垃圾回收面临的问题 1.5 JVM调优总结(五)-分代垃圾回收详述1 1.6 JVM调优总结(六)-分代垃圾回收详述2 1.7 JVM调优总结(七)-典型配置举例1 1.8 ...

    实战JAVA虚拟机++JVM故障诊断与性能优化.pdf

    第4~5章介绍了垃圾回收的算法和各种垃圾回收器。第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java...

    java——让学员少走弯路

    Java中包的概念,类的说明符、方法的说明符、对象的销毁(JVM垃圾回收器的演示),Java中接口理解与掌握。 Java中内部类的理解、运用与掌握,Java中的异常处理。 Java的常用包,"=="和"equals"的用法,基本数据类型与...

    Java 垃圾回收机制概念梳理

    牢记了这点之后,我们再来深入地了解下这个被称为“垃圾回收”的自动化内存回收在JVM中到底是如何实现的。  手动管理内存  在介绍现代版的垃圾回收之前,我们先来简单地回顾下需要手动地显式分配及释放内存的...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    第4~5章介绍了垃圾回收的算法和各种垃圾回收器。第6章介绍了虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是锁的支持。第9~10章介绍了虚拟机的...

    java7rt.jar源码-Java_JVM:这是我的JavaJVM学习笔记

    一:上篇——内存与垃圾回收器 二:中篇——字节码与类的加载 三:下篇——性能监控与调优篇 一: 上篇——内存与垃圾回收器 架构: jvm依赖的架构: 栈架构/寄存器架构 栈架构 JVM的生命周期: 1.启动 通过引导类加载...

    Android毕业设计——成语游戏.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    毕业设计——智慧物流管理系统.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    毕业设计——校友网管理系统.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    家庭财务管理系统 ——毕业设计.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    毕设系统——智慧工地监控管理系统.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    数据库设计课程设计——高校选课管理系统.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    毕业设计——基于区块链的证书管理系统.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

Global site tag (gtag.js) - Google Analytics