主要是三种参数
Trace跟踪参数
堆的分配参数
栈的分配参数
1.Trace跟踪参数
-XX:+PrintGCDetails 打印GC详细信息
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-Xloggc:log/gc.log 将gc信息输出到文件,:后表示文件路径
2.堆的分配参数
-Xmx 最大化堆内存大小
–Xms 初始化对内存大小
程序在Runtime中含有三个信息分别是
runtime.maxMemory() 即最大化堆内存大小
runtime.totalMemory() 当前运行分配的总内存大小,java会尽量维持在最小堆内存
runtime.freeMemory() 当前运行分配的总内存中有多少是没被占用的
堆内存
由新生代和老年代组成,新生代中又分为两个Survivor区和eden
-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的路径
如:
-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump
或者在堆溢出时执行一个脚本
nXX:OnOutOfMemoryError
–在OOM时,执行一个脚本
-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p
堆内存总结:
根据实际事情调整新生代和幸存代的大小
官方推荐新生代占堆的3/8
幸存代占新生代的1/10
在OOM时,记得Dump出堆,确保可以排查现场问题
堆溢出错误:java.lang.OutOfMemoryError
*******有时候堆空间实际占用非常少,但是永久区溢出 一样抛出OOM
3.栈内存参数
-Xss 每个线程私有,对于线程运行不可缺少
通常只有几百K 越大能容纳的线程数越少
决定了函数调用的深度 越大能递归调用的次数越大
每个线程都有独立的栈空间
局部变量、参数 分配在栈上
栈空间溢出错误:java.lang.StackOverflowError
常见堆栈错误见链接https://blog.csdn.net/sinat_29912455/article/details/51125748