JVM常见参数配置

2018-04-03  本文已影响62人  01_小小鱼_01

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

-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3 

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

要解决这个问题,我们需要了解JVM的内存是如何划分的,如下图: JVM堆、方法区内存分配
其实答案很简单只需要了解上面的各个参数的意义就可以了。

下面正式介绍几个常见的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. 堆的分配参数

-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. 栈的分配参数

-Xss128K 

更多内容

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

上一篇 下一篇

猜你喜欢

热点阅读