一、作用
jvm运行中,可以跟踪系统的运行状态。jvm提供一些跟踪系统状态的参数,可以在运行时打印相关日志。主要围绕着堆参、栈、方法区参数。
二、堆分配参数
1. -XX jvm系统级别配置,配置日志信息,或者说jvm配置什么样的垃圾回收器。
2. 非-XX 对应应用层面上的配置。运行在jvm上应用的内存大小等。
3. +号:启用,-号:禁用
4. 常用参数
-XX:+PrintGC 只要遇到GC就会打印日志
-XX:+UseSerialGC 配置串行回收器
-XX:+PrintGCDetails 可以查看详细信息,包括各个区的情况
-Xms: 设置java程序启动时初始堆大小
-Xmx: 设置java程序能获得的最大堆大小
-Xmx20m:堆最大
-Xms5m :堆最小
XX:+PrintConmmandLineFlags:可以将隐式或者显式传给虚拟机的参数输出
-Xmn:设置新生代堆内存大小
-XX:SurvivorRate:设置新生代中eden空间和from/to空间的比例。
-XX:NewRatio:老年代比新生代的比例
三、堆溢出处理(OOM)
OutOfMemory
-XX:+HeapDumpOnOutOfMemoryError:可以导出堆信息
-XX:HeapDumpPath=路径:导出堆信息时指定路径
四、栈参数
栈空间直接决定了函数可调用的最大深度。
-Xss?m:?设置栈空间大小,可用递归测试。
五、方法区参数
默认下,方法区大小为64M,如产生大量类,可以对永久区调整,避免溢出。
-XX:PermSize=64M:设置永久区大小
六、直接内存配置
广泛用于NIO中。如果达到上限,会触发GC,如果不能有效释放空间,也会引起系统OOM。
-XX:MaxDirectMemorySize:如果不设置,默认为最大堆空间。