位置:首页 > 后端 > java

JVM性能调优之常见参数

chenlong 发布:2021-10-30 17:36:32阅读:

1.常见垃圾回收器组合参数设定:(1.8)

  1. -XX:+UseSerialGC = Serial New (DefNew) + Serial Old
    小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器

  2. -XX:+UseParNewGC = ParNew + SerialOld
    这个组合已经很少用(在某些版本中已经废弃)
    https://stackoverflow.com/questions/34962257/why-remove-support-for-parnewserialold-anddefnewcms-in-the-future

  3. -XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old

  4. -XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】

  5. -XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old

  6. -XX:+UseG1GC = G1

  7. Linux中没找到默认GC的查看方法,而windows中会打印UseParallelGC
    java +XX:+PrintCommandLineFlags -version
    通过GC的日志来分辨

  8. Linux下1.8版本默认的垃圾回收器到底是什么?
    1.8.0_181 默认(看不出来)Copy MarkCompact
    1.8.0_222 默认 PS + PO

2.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

  4. PrintGCDetails PrintGCTimeStamps PrintGCCauses

  5. java -XX:+UseConcMarkSweepGC -XX:+PrintCommandLineFlags HelloGC

  6. java -XX:+PrintFlagsInitial 默认参数值

  7. java -XX:+PrintFlagsFinal 最终参数值

  8. java -XX:+PrintFlagsFinal | grep xxx 找到对应的参数

  9. java -XX:+PrintFlagsFinal -version |grep GC

  10. java -XX:+PrintFlagsFinal -version | wc -l
    共728个参数

3.PS GC日志详解

每种垃圾回收器的日志格式是不同的!

PS日志格式

heap dump部分:

eden space 5632K, 94% used [0x00000000ff980000,0x00000000ffeb3e28,0x00000000fff00000) 
			   后面的内存地址指的是,起始地址,使用空间结束地址,整体空间结束地址

total = eden + 1个survivor


24人点赞 返回栏目 提问 分享一波

小礼物走一波,支持作者

还没有人赞赏,支持一波吧

留言(问题紧急可添加微信 xxl18963067593) 评论仅代表网友个人 留言列表

暂无留言,快来抢沙发吧!

本刊热文
网友在读
手机扫码查看 手机扫码查看