转载请注明出处,多谢。
这些变化J2SE5.0开始有效。(同样适用于java6)
1
在server-class机器(至少2个CPU同时至少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垃圾回收艺术——探索Tenured Generation的内涵》 在深入探讨JVM垃圾回收机制的艺术之前,我们先来理解一下“天才”的定义——一种对事业、对工作的极度热爱。JAVA垃圾回收(GC)同样展现出这种对效率和优化的...
本文将详细介绍7种JVM垃圾回收器以及它们如何协同工作以优化内存管理。 首先,JVM的堆内存被划分为两个主要区域:年轻代(Young Generation)和老年代(Old Generation)。年轻代进一步细分为Eden区和两个Survivor...
Java 虚拟机(JVM)的内存管理和垃圾回收是优化Java应用程序性能的关键环节。本文将详细探讨JVM中的垃圾回收与调优,重点包括内存分配策略、对象的生命周期以及垃圾回收的判断标准。 首先,JVM内存分为新生代...
### JVM垃圾回收(GC)详解 #### 一、对象回收判定方法 在Java虚拟机中,判断一个对象是否可以被回收通常有两种方法:**引用计数法**和**可达性分析法**。 ##### 引用计数法 引用计数法是一种较为简单的对象回收...
Java垃圾回收机制是Java虚拟机(JVM)中一个至关重要的功能,它负责自动管理内存,释放不再使用的对象,防止内存泄漏,从而优化程序性能。本文将深入探讨Java垃圾回收的相关知识点。 首先,GC(Garbage Collection...
什么是Java虚拟机(JVM)?——–回过头来看 博客说明 文章所涉及的资料来自互联网整理和个人总结,...Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 Java虚拟机(JVM)是可
第4~~5章介绍了垃圾回收的算法和各种垃圾回收器。第6章介绍了虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是锁的支持。第9~~10章介绍了虚拟机的...
Java的垃圾回收机制是JVM(Java虚拟机)中一个重要的功能,它负责自动管理内存,避免程序员手动释放已无用的对象,从而简化了编程工作并减少了潜在的内存泄漏问题。在Java中,堆内存主要分为新生代和老年代,新生代...
垃圾回收是计算机编程,尤其是Java和许多其他现代编程语言中的一个关键概念,它自动管理程序的内存,确保不再使用的对象能够被有效地释放,以便为新的对象分配空间。以下是几种常见的垃圾回收算法及其优缺点的详细...
本文将围绕JVM性能调优这一主题展开,重点探讨JVM内存管理机制、垃圾回收(GC)算法及其优化策略。 #### Java参数传递机制解析 首先,澄清Java中的参数传递机制是非常重要的,这有助于我们更好地理解对象在方法调用...
Java垃圾回收机制是Java平台中一个非常重要的特性,它的主要任务是自动管理程序运行过程中的内存,自动识别并释放不再...在实际应用中,还需要根据系统配置和应用负载,调整相应的JVM参数,以达到最佳的垃圾回收效果。
3. **垃圾回收**:JVM通过自动垃圾回收机制来释放不再使用的对象所占用的内存。书中详细讲解了不同类型的GC算法,如串行、并行、并发标记清除等,以及如何调整GC参数以适应不同应用需求。 4. **性能监控与调优工具*...
本教程将涵盖Java的基础知识,特别是关于内存管理的重要概念——Java内存区域、Out of Memory (OOM)错误以及垃圾回收器和垃圾回收策略。 1. **Java入门**: Java的学习始于基础语法,包括变量、数据类型、运算符、...
- **逻辑清晰**:采用源代码→字节码→机器码→内存加载→垃圾回收这一主线展开讲解,有助于读者建立完整的JVM知识体系。 - **互动交流**:为了增进学习效果,作者还创建了交流群,鼓励读者参与讨论,共同进步。 ##...
本资料深入探讨了如何通过调整JVM内存设置和优化垃圾回收机制来提升应用性能。 一、JVM内存结构 JVM内存主要分为以下几个区域: 1. **堆内存(Heap Memory)**:这是Java对象的主要存储场所,分为年轻代和老年代...
本篇将深入探讨两种重要的垃圾回收器——G1收集器和ZGC,以及Stop the World现象和内存分配策略。 首先,G1(Garbage-First)收集器是一种并行并发的垃圾回收器,旨在减少垃圾回收停顿时间。其特点是采用了区域...
Java虚拟机(JVM)通过一个特殊的系统线程——垃圾回收器线程,来实现垃圾回收的功能。这个线程会定期或者在特定条件下检查堆内存中未被引用的对象,并释放这些对象所占用的内存空间。 - **垃圾检测**:通过可达性...
在JVM中,垃圾收集是自动内存管理的关键部分,主要目标是回收不再使用的对象以释放内存。虽然JDK 1.8没有采用引用计数法,但这里可以简要介绍一下其他常见的GC算法: 1. **标记-清除算法**:首先标记出所有活动对象...