博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常用JVM配置参数
阅读量:4185 次
发布时间:2019-05-26

本文共 1621 字,大约阅读时间需要 5 分钟。

文章目录

Trace跟踪参数

1、打印GC的日志信息,命令如下
  • -verbose:gc
  • XX:+printGC
  • 打印GC的简要信息如下:
    在这里插入图片描述
    GC前用了4M,GC之后用374K,整个推占用15872K,耗时0.00016.6secs
2、打印GC详细信息
  • -XX: +PrintGCDetails
3、打印GC发生的时间戳
  • -XX: +PrintGCTimeStamps
    示例:
    在这里插入图片描述
    -XX:+PrintGCDetails程序执行后,输出以下堆信息:
    在这里插入图片描述
4、指定GC log的位置,以文件输出。
  • -XLoggc:log/gc.log
    在这里插入图片描述
5、每次GC前后,都打印堆信息
  • -XX:+PrintHeapAtGC
    在这里插入图片描述
6、监控类的加载
  • -XX:+TraceClassLoading
    在这里插入图片描述
7、打印类信息
  • XX:+PrintClassHistogram
    在这里插入图片描述
    [B:表示bytes数组。
    [C:表示char数组。

堆的分配参数

1、指定最大堆和最小堆
  • -Xmx -Xms
    示例:
    -Xmx20M -Xms5M 运行代码:
System.out.print("Xmx=");	    System.out.println(Runtime.getRuntime().maxMemory()/1024.0/1024.0+"M");	    	    System.out.print(" free mem=");	    System.out.println(Runtime.getRuntime().freeMemory()/1024.0/1024.0+"M");	    	    System.out.print("total mem=");	    System.out.println(Runtime.getRuntime().totalMemory()/1024.0/1024.0+"M");
Xmx=19.375M free mem=4.342750549316406Mtotal mem=4.875M

在这里插入图片描述

在分配了1M空间给byte数组,这时指定空间不变,可用空间少了1M,总空间不变。只要堆内存够用就不会进行扩展,java会尽可能维持在最小堆
在这里插入图片描述
分配空间超出之后,总空间变多。

2、设置新生代大小
  • -Xmn
  • (新生代主要保存一些生命周期短,对象内存小,垃圾回收比较频繁;老年代主要存放JVM认为生命周期长,内存相对较大,垃圾回收没那么频繁)
3、设置新生代和老年代的比值
  • -XX:NewRatio 值(2)
4、设置两个Survivor区和eden的比值
  • -XX:SurvivorRatio 值(2)
  • 年轻代分成1个Eden Space和2个Suvivor Space(命名为A和B)。当对象在堆创建时,将进入年轻代的Eden Space。

示例:

参数新生代设置1M,全部分配在老年代。
在这里插入图片描述
新生代设置15M,全部分配在新生代
在这里插入图片描述

设置新生代内存7寸,这时触发了两次GC

在这里插入图片描述
增大survivor内存空间
在这里插入图片描述

在这里插入图片描述

5、内存溢出(OOM)时导出堆到文件
  • -XX:+HeapDumpOnOutOfMemoryError
6、导出OOM的路径
  • -XX:+HeapDumpPath
  • 在这里插入图片描述
7、在内存溢出时(OOM),执行一个脚本
  • -XX:OnOutOfMemoryError
    在这里插入图片描述
8、总结
  • 官方推荐新生代占堆的3/8
  • 幸存代占新生代的1/10
  • 在OOM时,记得Dump出堆,确保可以排查现场问题。

永久区分配参数

1、设置永久区的初始空间和最大空间
  • -XX:PermSize -XX:MaxPermSize
  • 他们表示,一个系统可以容纳多少个类型

栈的分配参数

1、栈大小的分配
  • Xss
  • 通常只有几百K
  • 决定了函数调用的深度
  • 每个线程都有独立的栈空间
  • 局部变量、参数、分配在栈上
    在这里插入图片描述

Eclipse中参数设置

1、Run–》Run Configuration --》Java Application中进行参数设置。

在这里插入图片描述

转载地址:http://vnfoi.baihongyu.com/

你可能感兴趣的文章
DB2和GreenPlum对比
查看>>
PostgreSQL与Oracle的差异对比
查看>>
java多线程:线程池的原理及实现
查看>>
Java线程:概念与原理
查看>>
redis有序集内部实现原理
查看>>
Redis架构设计
查看>>
Redis主从实现原理分析
查看>>
ActiveMQ的工作原理
查看>>
SQLServer 原理简单解析
查看>>
地址数据库
查看>>
动态语言和静态语言的比较
查看>>
sql的理解
查看>>
混社会,跟这15种人,想不成土豪都难
查看>>
Oracle之内存结构(SGA、PGA)
查看>>
oracle集群
查看>>
MySQL集群
查看>>
Mysql 工作原理
查看>>
数据库Oracle工作原理
查看>>
DB2数据库基本特性和概念简介
查看>>
SQL索引一步到位
查看>>