虚拟机参数

对虚拟机参数的配置,主要围绕堆、栈、方法区进行配置。

 

说明:

① -XX:系统级别的(JVM)配置,配置日志信息,或者是jvm使用什么样的垃圾回收器

② 非-XX:应用层的配置

③“+”:表示启用

④“-”:表示禁用

 

1、堆参数配置

 

(1)基本参数配置

-XX:+PrintGC  使用该参数,虚拟机启动后,遇到GC就会打印日志

-XX:+UseSerialGC 配置串行垃圾回收器

-XX:+PrintGCDetails 查看详细信息,包括各个区的情况

-XX:+PrintCommandLineFlags 可以将隐式或者显式传给虚拟机的参数输出

 

-Xms 设置Java程序启动时初始堆大小

-Xmx 设置Java程序能够获得的最大堆大小

 

示例:-Xms5m -Xmx20m

 

注意:

在实际工作中,直接将初始堆大小与最大堆大小设置相等,这样的好处减少程序运行时垃圾回收的次数,从而提高性能。

 

(2)新生代,老年代参数配置

-Xmn 设置新生代的绝对大小,设置一个比较大的新生代会减少老年代的大小,这个参数对系统的性能以及GC行为有很大的影响,新生代的大小一般会设置整个堆空间的1/3或1/4。

 

-XX:SurvivorRatio  用来设置eden空间和from/to空间的比例。含义:-XX:SurvivorRatio=eden/from=eden/to

-XX:NewRatio 用来设置老年代与新生代的比值。含义:-XX:NewRatio=老年代/新生代

 

注意:

不同的堆分布情况,对系统的执行会产生一定的影响,实际工作中应该根据实际情况作出合理配置。基本原则:尽量将对象预留在新生代,减少老年代GC的次数。

 

(3)堆溢出处理

Java程序运行的过程中如果堆空间不足,则会抛出内存溢出错误(OutOfMemoryError),该情况出现在生产环境,可能引起严重的业务中断。虚拟机提供一下参数跟踪错误信息:

 

-XX:+HeapDumpOnOutOfMemoryError 该参数在内存溢出时导出整个堆的信息

-XX:+HeapDumpPath 配置堆信息导出存放的路径

 

内存分析工具:Memory Analyzer1.5.0

 

2、栈配置

-Xss 指定线程最大的栈空间,这个参数也决定了函数可调用的最大深度。

 

3、方法区配置

方法区也称为永久区,使用如下参数对方法区进行配置

-XX:MaxPermSize

-XX:PermSize

 

示例:-XX:MaxPermSize=64m -XX:PermSize=64m

 

4、直接内存配置

直接内存也是java内存中非常重要的组成部分,广泛应用与NIO中,直接内存跳过了java堆,使得java程序直接访问原生堆空间,因此,一定程度上加快了内存空间的访问速度。但是,直接内存一定能够提高内存的访问速度也是不一定的,具体情况具体分析。

配置参数:

-XX:MaxDirectMemorySize 如果不设置默认值为最大堆空间,即-Xmx。

直接内存使用达到了上限就会触发垃圾回收,如果不能有效释放空间,会引发OOM。

 

 

你可能感兴趣的:(JVM学习,运维,java)