`
youyu4
  • 浏览: 442001 次
社区版块
存档分类
最新评论

JVM之优化延迟或响应时间(CMS垃圾回收器)

 
阅读更多

JVM之优化延迟或响应时间(CMS垃圾回收器)

 

CMS有几个注意点

 

  • 对象从young代转移到old代的转移率
  • CMS重新分配内存的概率
  • CMS回收对象时候产生的old代的分隔,这个会在可获得的对象中间产生一些空隙,从而导致了分隔空间

 

 

CMS的缺点

 

  • 从年轻代转移到老年代会更慢,所以减少从年轻代到老年代的转移
  • 内存碎片
  • 当从吞吐量垃圾回收器(Throughput)迁移到CMS的时候,有可能会获得更慢的MinorGC,由于对象从young代转移到old会更慢 ,由于CMS在old代里面分配的内存是一个不连续的列表,相反,吞吐量垃圾回收器只是在本地线程的分配缓存里面指定一个指针。
  • 由于old代的垃圾回收线程和应用的线程是尽可能的并发运行的,所以吞吐量会更小一些。然而,最坏的延迟的频率会少很多,由于在old代的不可获取的对象能够在应用运行的过程被垃圾回收,这样可以避免old代的空间溢出。
  • 使用CMS,如果old代能够使用的空间有限,单线程的stop-the-world压缩垃圾回收会执行。这个的执行时间比吞吐量垃圾回收更长。

 

 

 

解决内存碎片的方法

 

  • 压缩old代,压缩old代空间是通过stop-the-world垃圾回收压缩完成的,就像前面所说的那样,stop-the-world垃圾回收会执行很长时间,会严重影响应用的响应时间,应该避开。
  • 最大内存原则,加大老年代内存,让其有足够的轮换空间。
  • 减少对象从young代移动到old的概率,就是减少MinorGC,应用MinorGC回收原则。可以设置任期阈值,也就是对象的岁数。

注意:

不推荐把最大任期阀值设定成0或者超过15,这样会导致GC的低效率。

 

 

 

监控任期阈值

 

设置阈值:-XX:MaxTenuringThreshod=<n>

监控阈值:-XX:+PrintTenuringDistribution

 

下面是一个输出的例子:

 

   Desired survivor size 8388608 bytes, new threshold 1 (max 15) 

   - age 1: 16690480 bytes, 16690480 total

 

   在这里例子中,最大任期阀值被设置为15,(通过max 15表示)。内部计算出来的任期阀值是1,通过threshold 1表示。Desired survivor size 8388608 bytes表示一个survivor的空间大小。目标survivor的占有率是指目标survivor和两个survivor空间总和的比值。怎么样指定期望的survivor空间大小在后面会详细介绍。在第一行下面,会列出一个对象的岁数列表。每行会列出每一个岁数的字节数,在这个例子中,岁数是1的对象有16690480字节,而且每行后面有一个总的字节数,如果有多行输出的话,总字节数是前面的每行的累加数。后面举例说明。

 

 

 

使用CMS的关键

 

  • 老年代有足够的空间
  • 启动CMS垃圾回收的周期开始时机(快到回收对象的速度比转移对象的速度块,设置老年代占用比例,当去到这个比例就CMS回收,-XX:CMSInitiatingOccupancyFraction=<percent> 和 -XX:+UseCMSInitiatingOccupancyOnly )
  • 太大的年轻代会导致Minor GC的时间过长,有时宁愿产生内存碎片也要保证最基本的延迟不要太大

 

-Xmx1536m -Xms1536m -Xmn512m  -XX:+UseCMSInitiatingOccupancyOnly   
   -XX:CMSInitiatingOccupancyFraction=51 

 

 

 

 

CMS暂停时间优化

 

CMS有两个阶段是stop - the - world,

  • 初始标记阶段,比较快
  • 再标记,设置某个配置,在Full GC之前再做一次Minor GC,减少对象

 

 

CMS吞吐量优化

 

  • 额外命令
  • 增加年轻代大小,减少Minor GC频率
  • 增加老年代大小,减少Full GC的频率,减少碎片
  • 优化堆大小,减少年轻代移动到老年代的对象
  • 优化CMS周期启动

注意:

主要的目的是减少垃圾回收器占用CPU时间,把CPU留给应用计算

 

 

 

 

参考:

 

http://blog.csdn.net/zhoutao198712/article/details/7831880

http://blog.csdn.net/zhoutao198712/article/details/7841977

分享到:
评论

相关推荐

    JVM之垃圾回收器

    **JVM之垃圾回收器** Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行字节码并管理程序运行时的内存。在JVM的内存模型中,垃圾回收(Garbage Collection, GC)是一项重要的功能,它自动识别并清理不再...

    JVM历史发展和内存回收笔记

    6. **Java 7与G1 GC**:2011年,Java 7引入了G1(Garbage First)垃圾回收器,它是一种并行、并发且具有低延迟特性的垃圾回收器,适用于大型应用。 7. **Java 8与元空间**:2014年,Java 8中,永久代被元空间...

    高吞吐低延迟Java应用的垃圾回收优化.docx

    CMS 垃圾回收器是 Java 应用的默认垃圾回收器之一。CMS 垃圾回收器可以提供低延迟的垃圾回收,但它需要占用大量的 CPU 资源。 ### G1 垃圾回收器 G1 垃圾回收器是 Java 7u4 及更高版本的默认垃圾回收器。G1 垃圾...

    CMS垃圾收集器1

    CMS垃圾收集器是一种Java虚拟机(JVM)的老年代垃圾收集器,它的主要目标是减少垃圾收集时的停顿时间,以提供更优秀的响应速度,适合于需要低延迟且CPU资源充足的服务器应用。CMS基于“标记-清除”算法,这意味着它...

    垃圾回收垃圾回收垃圾回收

    - **ZGC 和 Shenandoah**:这两款是新生代的低延迟垃圾回收器,它们的目标是在大内存应用中实现极低的暂停时间,适合实时性要求高的系统。 垃圾回收的参数调整是JVM调优的重要部分,包括设置堆大小、新生代与老年代...

    jvm垃圾回收机制总结

    Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾回收(Garbage Collection,简称GC)。GC是自动内存管理的重要机制,负责识别并清理不再使用的对象,以释放内存资源。本文将深入探讨JVM的垃圾...

    JVM垃圾收集器全面详解

    Serial GC是JVM的默认新生代收集器,它采用单线程进行垃圾回收,适用于小型应用或对响应时间要求不高的场景。由于其独占式的特性,可能导致应用暂停时间较长。 2. **ParNew GC** ParNew是Serial GC的多线程版本,...

    jvm详细介绍以及性能优化方法

    优化Tomcat涉及多个方面,包括调整连接器配置(如最大连接数、超时时间)、线程池设置、Web应用的部署优化(如减少session使用、压缩响应内容)以及启用HTTP/2协议等。此外,监控Tomcat的运行状态,如CPU使用率、...

    02垃圾回收器1

    ParNew通常会与Serial Old或CMS(Concurrent Mark Sweep)收集器配合使用,其中Serial Old用于老年代的回收,而CMS则提供了并发的垃圾收集策略,减少了应用程序的暂停时间。 Parallel Scavenge收集器,与ParNew类似...

    java垃圾回收

    CMS和G1更注重响应时间,减少应用暂停时间,适合需要低延迟的服务。ZGC则是在大型系统中追求低暂停时间的新一代垃圾收集器。 理解垃圾回收的工作原理对于优化Java应用程序的性能至关重要。开发者可以通过调整JVM...

    JVM的垃圾回收机制详解和调优

    Java虚拟机(JVM)的垃圾回收(Garbage Collection,简称GC)机制是其自动内存管理的关键组成部分。Java语言并没有强制要求JVM必须包含GC,但现代JVM实现如HotSpot都内置了GC,以自动回收不再使用的对象所占用的内存...

    垃圾回收器

    优化垃圾回收器的目标之一是尽可能缩短这些暂停时间,提高系统响应速度。 4. **垃圾回收策略**:不同的垃圾回收器采用不同的策略,如分代收集(Generational GC)、标记-清除(Mark-Sweep)、复制(Copying)、标记...

    jvm优化参数配置

    - **CMS(Concurrent Mark Sweep)垃圾收集器**:适用于低延迟需求,常用参数有`-XX:+UseCMSInitiatingOccupancyOnly`和`-XX:CMSInitiatingOccupancyFraction`来设定触发并发回收的阈值。 2. **栈内存(Stack ...

    java垃圾回收(gc)机制详解

    4. G1 GC:新一代的垃圾回收器,目标是达到低延迟,通过分区技术来平衡吞吐量和暂停时间。 5. ZGC:最新一代的低延迟GC,目标是在大内存环境下实现极低的暂停时间。 四、垃圾回收的过程 GC主要包括三个阶段:标记、...

    JVM入门总结 .pdf

    1. 串行垃圾回收器、吞吐量优先(并行GC)、响应时间优先垃圾回收器(CMS)是常见的垃圾回收器。串行单线程适合个人电脑;吞吐量优先垃圾回收器多线程执行,尽量减少垃圾回收造成的STW(Stop The World)时间;响应...

    Tomcat 调优及 JVM 参数优化

    3. **垃圾收集器选择**:JVM提供了多种垃圾收集器,如Serial、Parallel、CMS和G1。根据应用特点选择合适的收集器,例如,对于低延迟要求的应用,可以选择G1收集器。 4. **并发模式**:`-XX:+UseConcMarkSweepGC`和`...

    jvm -spark-优化

    - 选择合适的垃圾回收器,例如G1 GC或CMS GC,可以显著改善Spark应用的响应时间和吞吐量。 - 通过参数`-XX:+UseG1GC`启用G1 GC,适用于大内存环境;`-XX:+UseConcMarkSweepGC`则适用于需要低延迟的情况。 3. **...

Global site tag (gtag.js) - Google Analytics