JVM之优化吞吐量
对年轻代进行优化
优化吞吐量的目的其实是尽量少的Full GC ,或者尽量避免Full GC,有以下方法可以尽量减少Full GC:
- 增大Eden:你可以让eden空间更大,可以减少MinorGC的次数。我知道当对象的任期或者岁数达到一定值的时候就会移动到old代,而这个任期就是对象经历MinorGC的次数,MinorGC的次数越少,对象任期增长越慢,就有可能被MinorGC回收掉,而不是进入old代。
- 增大年轻代:这样同样能减少Minor GC 的频率,减慢对象进入老年代。
- 增大任期阈值:同样是延长对象在年轻代的停留时间,达到减少对象进入老年代的效果。
对老年代进行优化
- CMS
- 吞吐量垃圾回收器
CMS吞吐量优化
- 额外命令
- 增加年轻代大小,减少Minor GC频率
- 增加老年代大小,减少Full GC的频率,减少碎片
- 优化堆大小,减少年轻代移动到老年代的对象
- 优化CMS周期启动
吞吐量垃圾回收器优化
- 关闭自适应大小(-XX:-UseAdaptiveSizePolicy),开启日志(-XX:+PrintGCDetails),自定义堆、年轻代比例
- 确定堆大小和老年代大小
- 查看GC日志,看Survivor是否溢出,加快Full GC,如果有溢出的情况,就要调整Survivor大小
Survivor溢出的例子:
2010-12-16T21:44:11.444-0600:
[GCAdaptiveSizePolicy::compute_survivor_space_size_and_thresh:
survived: 224408984
promoted: 10904856
overflow: false
[PSYoungGen: 6515579K->219149K(9437184K)]
8946490K->2660709K(13631488K), 0.0725945 secs]
[Times: user=0.56 sys=0.00, real=0.07 secs]
和以前不同的是,以GCAdaptiveSizePolicy开头的一些额外信息输出来了,survived标签表明“to” survivor空间的对象字节数。在这个例子中,survivor空间占用量是224408984字节,但是移动到old代的字节数却有10904856字节。overflow表明young代是否有对象溢出到old代,换句话说,就是表明了“to” survivor是否有足够的空间来容纳从eden空间和“from”survivor空间移动而来的对象。为了更好的吞吐量,期望在应用处于稳定运行状态下,survivor空间不要溢出。
如果Survivor溢出,如何优化
- 调整Survivor大小,同事要改大年轻代和堆的大小,以保证其他不变。
- 调整Survivor空间占用率,当占用率超过默认值(50%)时,会在对象达到最大岁数之前把对象移动到老年代去。
如果目标survivor空间的占用率没有通过-XX:TargetSurvivorRatio=<percent>指定,那么目标survivor空间的占用率是50%。
同样建议,HotSpot Vm使用默认的目标survivor空间占用率(50%),如果使用了-XX:TargetSurvivorRatio=<percent>,会使用<percent>作为MinorGC之后目标survivor空间占用率。如果survivor空间的占用率可能超过这个目标值,会在对象达到最大岁数之前把对象移动到old代去。
参考:
http://blog.csdn.net/zhoutao198712/article/details/7842500
相关推荐
了解不同类型的垃圾收集器(如Serial、Parallel、CMS、G1、ZGC等)以及它们的工作机制,可以帮助我们选择合适的GC策略,减少停顿时间并提高吞吐量。 3. **内存调优** 调整JVM堆大小(年轻代和老年代)、新生代与老...
控制服务器增长数量• 主题– 提升淘宝前台系统单服务器的QPS主要内容• QPS(吞吐量)三要素• 优化模板– 至少提升50%• 优化大数据的处理– 至少提升5%• 优化jvm参数– 资源太大,传百度网盘了,链接在附件中,...
GC的主要目标是达到低延迟和高吞吐量。GC的触发条件通常包括堆内存满、方法区满或系统要求。垃圾回收的过程包括标记、清除、压缩等步骤,以确保内存的有效利用。 JVM参数的优化对于提升Java应用程序的性能至关重要...
为了深入理解JVM优化的相关知识点,我们可以从多个角度来探讨。首先,需要理解JVM(Java虚拟机)的基本概念,以及在性能调优中的关键作用。JVM是运行Java程序的核心组件,负责解释Java字节码,并将字节码转换成特定...
1. 针对吞吐量优化(-Xgcpolicy:optthruput):默认策略,适用于对长时间GC停顿不敏感,更注重整体性能的应用。 2. 针对停顿时间优化(-Xgcpolicy:optavgpause):通过并发GC来缩短停顿时间,牺牲部分吞吐量。 3. 分...
本篇文件内容主要介绍了JVM优化的第三部分,重点围绕Tomcat参数调优、JVM参数调优、JVM字节码优化以及代码优化等几个方面。下面是针对这些知识点的详细解释: 1. Tomcat参数调优 在Tomcat参数调优部分,首先介绍了...
- **案例2:大数据处理系统调优**:针对大数据处理系统,通过对JVM参数的调整以及合理的内存分配策略,显著提升了系统的处理速度和吞吐量。 #### 六、总结 本教程旨在帮助开发者深入了解JVM的工作原理及其内部机制...
通过监控垃圾收集的性能指标,如暂停时间、吞吐量,可以选择最适合的收集器进行优化。 五、JVM故障诊断工具 JDK提供了一系列强大的诊断工具,如jconsole、jvisualvm、jmap、jhat等,它们可以帮助我们查看JVM状态、...
JVM优化不仅仅是调整参数,而是要结合具体应用的特点,找到最佳的运行环境。 优化现代JVM需要考虑多个方面。首先,了解应用性能需求是至关重要的。这些需求可能包括但不限于吞吐量、响应时间、内存占用、启动时间、...
高效的JVM配置能大幅提升Java应用的响应速度和吞吐量,减少延迟。 2.资源利用效率。优化内存和CPU使用,避免资源浪费,降低硬件成本。 3.稳定性和可维护性。通过优化垃圾收集和内存分配,减少程序崩溃和内存泄漏的...
- **G1 Collector**:面向服务端应用的垃圾回收器,能够实现低延迟的同时兼顾高吞吐量。 #### 4. JVM参数配置 - **堆内存大小**:通过`-Xms`设置初始堆大小,通过`-Xmx`设置最大堆大小。 - **新生代比例**:使用`-...
- 选择合适的垃圾回收器,例如G1 GC或CMS GC,可以显著改善Spark应用的响应时间和吞吐量。 - 通过参数`-XX:+UseG1GC`启用G1 GC,适用于大内存环境;`-XX:+UseConcMarkSweepGC`则适用于需要低延迟的情况。 3. **...
- **吞吐量**:衡量单位时间内处理事务的数量,是性能优化的重要参考。 - **响应时间**:指用户请求的等待时间,对用户体验至关重要。 #### 垃圾回收基础知识 - **GC算法**:理解不同类型的垃圾回收算法对于优化...
性能优化主要包括响应时间、并发数和吞吐量的评估,以及各种优化手段的应用。前端优化可以改善用户感知,应用服务性能优化包括缓存和集群等技术,存储性能优化则关注数据读写效率。JVM层面的优化涉及JIT编译器、GC...
在Java开发中,JVM(Java Virtual Machine)的优化是提升应用程序性能的关键环节。本文主要围绕HotSpot JVM的优化展开,旨在防止出现内存溢出...记住,JVM优化是一个持续的过程,需要根据应用的实际运行情况进行调整。
例如,合理设置堆内存大小可以避免频繁的垃圾收集,选择合适的垃圾收集器(如CMS、G1、ZGC等)可以平衡暂停时间和吞吐量。此外,避免内存泄漏、减少锁竞争、优化并发策略等也是提升系统性能的重要手段。 优化实践...
总之,JVM优化是一个涉及多方面因素的复杂过程,包括堆内存大小的调整、内存区域比例的设定以及选择合适的垃圾收集器策略。正确地配置这些参数能够显著提升Java应用的性能和响应速度,但需要根据应用的实际运行情况...
以下是对JVM优化的一些关键知识点的详细介绍: 1. **内存管理**:JVM内存分为堆内存和栈内存,其中堆内存主要存放对象实例,栈内存存储方法执行时的局部变量。优化内存管理主要包括调整堆大小(年轻代和老年代)、...