如何进行jvm 性能调优

如何进行jvm性能调优,比如full GC次数怎么判断频繁,GC时长多长合理

JVM性能调优是一个复杂的过程,包括很多方面的优化,如内存分配、垃圾回收、线程管理等。下面简要介绍一下如何进行JVM性能调优。

监控JVM性能指标:通过监控JVM性能指标,可以了解JVM的运行状况,包括CPU使用率、内存使用情况、GC次数、GC时长等。可以使用工具如jstat、jvisualvm、jconsole等进行监控。
设置JVM参数:可以通过设置JVM参数来优化JVM的性能。例如,可以设置内存大小、垃圾回收算法、线程数等参数。常用的参数包括-Xmx、-Xms、-XX:+UseG1GC、-XX:ParallelGCThreads等。
减少对象创建:避免频繁创建对象可以减少垃圾回收的次数。可以使用对象池、缓存等技术来减少对象创建。
减少内存泄漏:内存泄漏会导致垃圾回收无法释放内存,最终导致JVM崩溃。可以通过代码审查、使用内存分析工具等方式来检查和修复内存泄漏问题。
优化GC时间:GC时长应该控制在可接受的范围内。一般来说,Full GC的次数越少越好,可以通过增加内存、调整垃圾回收算法等方式来优化GC时间。
分析GC日志:GC日志记录了JVM的垃圾回收情况,可以通过分析GC日志来了解JVM的垃圾回收状况。可以使用工具如GCViewer等来分析GC日志。
以上内容仅供参考

  • 文章:JVM调优解决线程太多问题 中也许有你想要的答案,请看下吧
  • 除此之外, 这篇博客: 【JVM】GC基础知识、GC算法、JVM调优 - 笔记中的 JVM调优第一步,了解JVM常用命令行参数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • JVM的命令行参数参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

    • HotSpot参数分类

      标准: - 开头,所有的HotSpot都支持

      非标准:-X 开头,特定版本HotSpot支持特定命令

      不稳定:-XX 开头,下个版本可能取消

      java -version

      java -X

      java -XX:+PrintFlagsWithComments //只有debug版本能用

      试验用程序:

      import java.util.List;
      import java.util.LinkedList;
      
      public class HelloGC {
        public static void main(String[] args) {
          System.out.println("HelloGC!");
          List list = new LinkedList();
          for(;;) {
            byte[] b = new byte[1024*1024];
            list.add(b);
        }
        }
      }
      
      1. 区分概念:内存泄漏memory leak,内存溢出out of memory
      2. java -XX:+PrintCommandLineFlags HelloGC
      3. java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC HelloGC
        PrintGCDetails PrintGCTimeStamps PrintGCCauses
      4. java -XX:+UseConcMarkSweepGC -XX:+PrintCommandLineFlags HelloGC
      5. java -XX:+PrintFlagsInitial 默认参数值
      6. java -XX:+PrintFlagsFinal 最终参数值
      7. java -XX:+PrintFlagsFinal | grep xxx 找到对应的参数
      8. java -XX:+PrintFlagsFinal -version |grep GC
      9. java -XX:+PrintFlagsFinal -version | wc -l
        共728个参数