JVM常用配置参数

Trace跟踪参数

verbose:gc
-XX:+printGC 可以打印GC的简要信息
-XX:+PrintGCDetails 打印GC详细信息
-XX:+PrintGCTimeStamps 打印CG发生的时间戳
-Xloggc:log/gc.log 指定GC的log的位置,以文件输出
-XX:+TraceClassLoading 监控类的加载
-XX:+PrintClassHistogram 在控制台按下Ctrl+Break后,打印类的信息

堆的跟配参数

-Xmx –Xms 指定最大堆和最小堆(-Xmx20m -Xms5m),在eclipse中示例:
1. 配置参数

这里写图片描述
这里写图片描述
2. 运行

这里写图片描述
3. 附代码

package jvm;
/**
 * 堆参数设置Demo
 * @author Administrator
 *
 */
public class JvmTest {
    public static void main(String[] args) {
        printMemory();
    }
    /**
     * 打印堆内存
     */
    public static void printMemory(){
        //最大堆内存
        System.out.println("max   memory:"+Runtime.getRuntime().maxMemory()/1024.0/1024.0+"M");
        //空闲堆内存
        System.out.println("free  memory:"+Runtime.getRuntime().freeMemory()/1024.0/1024.0+"M");
        //总堆内存
        System.out.println("total memory:"+Runtime.getRuntime().totalMemory()/1024.0/1024.0+"M");
        }
}

当我们在printMemory()前new一个byte数组(占用堆内存),byte[] by = new byte[1024*1024],会发现max memory不变,free memory 减少1M,total memory不变;当占用的堆内存内存即将大于free memory并小于total memory时,total memory就会进行扩容;当占用的堆内存内存即将大于total memory时,会报错误信息“ java.lang.OutOfMemoryError”。System.gc()可以回收内存,增大free memory。
-Xmn 设置新生代大小。
-XX:NewRatio 新生代(eden+2*s)和老年代(不包含永久区)的比值 (4 表示 新生代:老年代=1:4)。
-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:/abc.dump)
-XX:OnOutOfMemoryError 在OOM时,执行一个脚本 (*”-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p”当程序OOM时,在D:/a.txt中将会生成线程的dump,可以在OOM时,发送邮件,甚至是重启程序)。
根据实际事情调整新生代和幸存代的大小,官方推荐新生代占堆的3/8,幸存代占新生代的1/10,在OOM时,记得Dump出堆,确保可以排查现场问题。
-XX:PermSize -XX:MaxPermSize 设置永久区的初始空间和最大空间。

栈的分配参数

-Xss 栈的大小,通常只有几百K,决定了函数调用的深度,每个线程都有独立的栈空间,局部变量、参数 分配在栈上。通常递归调用会引起栈溢出。

package jvm;
/**
 * 堆参数设置Demo
 * @author Administrator
 *
 */
public class JvmTest {
    public static void main(String[] args) {
        test(1);    

    }
    public static void test(int a){
        System.out.println(a);
        a++;
        test(a);
    }

配置栈内存Xss1m,发现在count=11410时抛出java.lang.StackOverflowError异常,配置栈内存Xss2m,发现在count=22959时抛出java.lang.StackOverflowError异常,大约为2倍。
如果大家觉得目前的JVM配置参数过于简单或者不够用的话,最后再推荐一篇比较全面的JVM参数设置、分析文章:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值