JVM的调优常用参数

调优目的JVM调优的目的是为了提高JAVA应用程序的性能和稳定性 。通过优化JVM的配置和参数设置 , 可以减少内存占用、提高垃圾回收效率、优化线程管理等 , 从而提升应用程序的响应速度、降低内存泄漏的风险 , 并且减少应用程序的崩溃和停顿现象 。调优可以根据具体的应用场景和需求进行,以达到最佳的性能和稳定性 。

JVM的调优常用参数

文章插图
常见的一些行为方法:
  • 调整堆内存大?。和ü?髡?Xmx和-Xms参数来设置堆内存的最大和初始大小 。合理地设置堆内存大小可以避免内存溢出和频繁的垃圾回收 。
  • 调整垃圾回收器:JVM提供了多种垃圾回收器,如Serial、Parallel、CMS和G1等 。根据应用程序的特点和需求 , 选择合适的垃圾回收器,并通过调整相关参数来优化垃圾回收性能 。
  • 优化对象的创建和销毁:避免频繁创建和销毁大量的临时对象,可以减少垃圾回收的压力 。可以使用对象池、缓存等技术来重用对象 , 提高性能 。
  • 减少同步操作:过多的同步操作会导致线程竞争和阻塞,影响性能 。可以使用无锁数据结构、并发集合类等技术来减少同步操作,提高并发性能 。
  • 使用合适的数据结构和算法:选择合适的数据结构和算法可以提高程序的效率 。例如,使用HashMap代替Hashtable、使用StringBuilder代替StringBuffer等 。
  • 监控和分析JVM性能:使用JVM自带的工具(如jstat、jmap、jstack等)或第三方工具(如VisualVM、JProfiler等)来监控和分析JVM的性能瓶颈 , 找出优化的方向 。
GC事件JVM的垃圾回收GC事件可以分为以下几类:
  • Minor GC(新生代GC):针对新生代(Young Generation)的垃圾回收事件 。在新生代中,通常采用复制算法进行垃圾回收,将存活的对象复制到另一个区域,同时回收无用的对象 。Minor GC通常发生频率较高,但回收的对象数量较少 。当JVM无法为新对象分配内存空间时总会触发Minor GC)
  • Major GC(老年代GC):针对老年代(Old Generation)的垃圾回收事件 。在老年代中,通常采用标记-清除-整理算法进行垃圾回收,首先标记出存活的对象 , 然后清除无用的对象,最后进行内存整理 。Major GC通常发生频率较低 , 但回收的对象数量较多 。
  • Full GC(全局GC):对整个堆内存进行垃圾回收的事件 。Full GC包括对新生代和老年代的垃圾回收 , 通常发生在新生代和老年代都满了的情况下,或者由于系统调用触发 。Full GC的开销较大 , 会导致应用程序的停顿时间较长 。
  • Concurrent GC(并发GC):在应用程序运行的同时进行垃圾回收的事件 。并发GC的目标是尽量减少应用程序的停顿时间,通过与应用程序并发执行,提高系统的吞吐量 。常见的并发GC算法有CMS(Concurrent Mark Sweep)和G1(Garbage First) 。
常用参数总结(1) 堆内存调优参数:
  • -Xms:初始堆大小
  • -Xmx:最大堆大小
  • -Xmn:新生代大小
  • -Xss:线程堆栈大小,默认为1M
  • -XX:MaxPermSize=n:设置持久代大小
  • -XX:NewRatio:新生代和老年代的比例
  • -XX:SurvivorRatio:Eden区和Survivor区的比例
(2) GC调优参数:
  • -XX:+UseSerialGC:使用串行垃圾回收器
  • -XX:+UseParallelGC:使用并行垃圾回收器
  • -XX:+UseConcMarkSweepGC:使用CMS垃圾回收器
  • -XX:+UseG1GC:使用G1垃圾回收器
  • -XX:MaxGCPauseMillis:最大GC停顿时间
  • -XX:+UseAdaptiveSizePolicy:自适应GC策略
(3) GC统计信息
  • -XX:+PrintGC:输出形式:
[GC 118250K->113543K(130112K), 0.0094143 secs][Full GC 121376K->10414K(130112K), 0.0650971 secs]