美文网首页
JVM常见参数配置

JVM常见参数配置

作者: 01_小小鱼_01 | 来源:发表于2018-04-03 23:04 被阅读62次

首先,从一道简单的面试题开始说起,对于jvm内存配置参数:

-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3 

其最小内存值和Survior区总大小分别是多少?

要解决这个问题,我们需要了解JVM的内存是如何划分的,如下图: JVM堆、方法区内存分配
其实答案很简单只需要了解上面的各个参数的意义就可以了。
  • -Xmx :堆的最大值
  • -Xms :堆的最小值
  • -Xmn :堆年轻代大小
  • -XXSurvivorRatio:Eden区和Survior区的占用比例

下面正式介绍几个常见的JVM参数。

1. Trace跟踪参数

  1. 打印GC的简要信息
-verbose:gc
-XX:+printGC

[GC 4790K->374K(15872K), 0.0001606 secs]
GC之前用了4M左右的内存,GC之后为375K,将进释放了4M内存,总共内存大小为16M左右
  1. 打印GC的详细信息
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC         每一次GC前和GC后,都打印堆信息
-XX:+TraceClassLoading  监控类的加载
-XX:+PrintClassHistogram  按下Ctrl+Break后,打印类的信息

[GC[DefNew: 4416K->0K(4928K), 0.0001897 secs] 4790K->374K(15872K), 
0.0002232 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
新生代GC,GC之前新生代使用4M内存,GC之后使用0M内存。
GC之前Java 堆内存使用4M内存,GC之后Java 堆内存使用374K
  1. 指定GC log的位置
-Xloggc:log/gc.log

2. 堆的分配参数

  • -Xmx 指定最大堆
  • -Xms 指定最小堆
  • -Xmn 设置新生代大小
  • -XX:NewRatio 新生代(eden+2*s)和老年代(不包含永久区)的比值
    例如:4,表示新生代:老年代=1:4,即新生代占整个堆的1/5
  • -XX:SurvivorRatio(幸存代)设置两个Survivor区和eden的比值
    例如:8,表示两个Survivor:eden=2:8,即一个Survivor占年轻代的1/10
  • -XX:+HeapDumpOnOutOfMemoryError OOM时导出堆到文件
  • -XX:+HeapDumpPath 导出OOM的路径
  • -XX:PermSize 设置永生代大小
  • -XX:MaxPermSize 设置永生带最大值
-Xmx20m -Xms20m -Xmn7m -XX:SurvivorRatio=2 -XX:+PrintGCDetails

-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump

-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p //p代表的是当前进程的pid 
//系统的最大空间
System.out.println("Xmx=" + Runtime.getRuntime().maxMemory() / 1024.0 / 1024 + "M");
//系统的空闲空间
System.out.println("free mem=" + Runtime.getRuntime().freeMemory() / 1024.0 / 1024 + "M");
//当前可用的总空间
System.out.println("total mem=" + Runtime.getRuntime().totalMemory() / 1024.0 / 1024 + "M");

3. 栈的分配参数

  • Xss
-Xss128K 

更多内容

1. 一次CMS GC问题排查过程(理解原理+读懂GC日志)
2. 记一次JVM GC日志分析
3. GC日志查看分析

相关文章

网友评论

      本文标题:JVM常见参数配置

      本文链接:https://www.haomeiwen.com/subject/vdtqhftx.html