`
leichenlei
  • 浏览: 128675 次
  • 性别: 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%。这对于服务器应用是个好的选择。值太大会引起堆大小增长到最大值。

建议策略

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

 

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

 

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

 

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

分享到:
评论

相关推荐

    JVM垃圾回收艺术

    《JVM垃圾回收艺术——探索Tenured Generation的内涵》 在深入探讨JVM垃圾回收机制的艺术之前,我们先来理解一下“天才”的定义——一种对事业、对工作的极度热爱。JAVA垃圾回收(GC)同样展现出这种对效率和优化的...

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

    本文将详细介绍7种JVM垃圾回收器以及它们如何协同工作以优化内存管理。 首先,JVM的堆内存被划分为两个主要区域:年轻代(Young Generation)和老年代(Old Generation)。年轻代进一步细分为Eden区和两个Survivor...

    JVM垃圾回收与调优详解(1)1

    Java 虚拟机(JVM)的内存管理和垃圾回收是优化Java应用程序性能的关键环节。本文将详细探讨JVM中的垃圾回收与调优,重点包括内存分配策略、对象的生命周期以及垃圾回收的判断标准。 首先,JVM内存分为新生代...

    JVM垃圾回收(GC).docx

    ### JVM垃圾回收(GC)详解 #### 一、对象回收判定方法 在Java虚拟机中,判断一个对象是否可以被回收通常有两种方法:**引用计数法**和**可达性分析法**。 ##### 引用计数法 引用计数法是一种较为简单的对象回收...

    搞定面试官:咱们从头到尾再说一次 Java 垃圾回收(csdn)————程序.pdf

    Java垃圾回收机制是Java虚拟机(JVM)中一个至关重要的功能,它负责自动管理内存,释放不再使用的对象,防止内存泄漏,从而优化程序性能。本文将深入探讨Java垃圾回收的相关知识点。 首先,GC(Garbage Collection...

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

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

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

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

    坏了!面试官问我垃圾回收机制(csdn)————程序.pdf

    Java的垃圾回收机制是JVM(Java虚拟机)中一个重要的功能,它负责自动管理内存,避免程序员手动释放已无用的对象,从而简化了编程工作并减少了潜在的内存泄漏问题。在Java中,堆内存主要分为新生代和老年代,新生代...

    垃圾回收算法有几种类型? 他们对应的优缺点又是什么?(csdn)————程序.pdf

    垃圾回收是计算机编程,尤其是Java和许多其他现代编程语言中的一个关键概念,它自动管理程序的内存,确保不再使用的对象能够被有效地释放,以便为新的对象分配空间。以下是几种常见的垃圾回收算法及其优缺点的详细...

    JVM性能调优-JVM内存整理及GC回收.pdf

    本文将围绕JVM性能调优这一主题展开,重点探讨JVM内存管理机制、垃圾回收(GC)算法及其优化策略。 #### Java参数传递机制解析 首先,澄清Java中的参数传递机制是非常重要的,这有助于我们更好地理解对象在方法调用...

    Java垃圾回收(二)老年代垃圾收集器(csdn)————程序.pdf

    Java垃圾回收机制是Java平台中一个非常重要的特性,它的主要任务是自动管理程序运行过程中的内存,自动识别并释放不再...在实际应用中,还需要根据系统配置和应用负载,调整相应的JVM参数,以达到最佳的垃圾回收效果。

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

    3. **垃圾回收**:JVM通过自动垃圾回收机制来释放不再使用的对象所占用的内存。书中详细讲解了不同类型的GC算法,如串行、并行、并发标记清除等,以及如何调整GC参数以适应不同应用需求。 4. **性能监控与调优工具*...

    java入门、java内存区域和OOM、垃圾回收器和垃圾回收策略

    本教程将涵盖Java的基础知识,特别是关于内存管理的重要概念——Java内存区域、Out of Memory (OOM)错误以及垃圾回收器和垃圾回收策略。 1. **Java入门**: Java的学习始于基础语法,包括变量、数据类型、运算符、...

    JVM基础系列

    - **逻辑清晰**:采用源代码→字节码→机器码→内存加载→垃圾回收这一主线展开讲解,有助于读者建立完整的JVM知识体系。 - **互动交流**:为了增进学习效果,作者还创建了交流群,鼓励读者参与讨论,共同进步。 ##...

    JVM性能调优-JVM内存整理及GC回收.pdf_java_jvm_

    本资料深入探讨了如何通过调整JVM内存设置和优化垃圾回收机制来提升应用性能。 一、JVM内存结构 JVM内存主要分为以下几个区域: 1. **堆内存(Heap Memory)**:这是Java对象的主要存储场所,分为年轻代和老年代...

    垃圾回收器和内存分配.rar

    本篇将深入探讨两种重要的垃圾回收器——G1收集器和ZGC,以及Stop the World现象和内存分配策略。 首先,G1(Garbage-First)收集器是一种并行并发的垃圾回收器,旨在减少垃圾回收停顿时间。其特点是采用了区域...

    Java软件开发实战 Java基础与案例开发详解 2-6 java的垃圾回收器 共4页.pdf

    Java虚拟机(JVM)通过一个特殊的系统线程——垃圾回收器线程,来实现垃圾回收的功能。这个线程会定期或者在特定条件下检查堆内存中未被引用的对象,并释放这些对象所占用的内存空间。 - **垃圾检测**:通过可达性...

    jdk1.8的jvm内存模型——实习生必须了解的

    在JVM中,垃圾收集是自动内存管理的关键部分,主要目标是回收不再使用的对象以释放内存。虽然JDK 1.8没有采用引用计数法,但这里可以简要介绍一下其他常见的GC算法: 1. **标记-清除算法**:首先标记出所有活动对象...

Global site tag (gtag.js) - Google Analytics