JVM参数初探

//———————堆参数———————-//
(一)、
-XX:+PrintGC 使用这个参数,虚拟机启动后,只要遇到GC就会打印日志
-XX:+UseSerialGC 配置串行回收器
-XX:+PrintGCDetails 可以查看详细信息,包括各个区的情况
-Xms 设置最小堆
-Xmx 设置最大堆
-Xmx20m -Xms5m -XX:+PrintCommandLineFlags 可以将隐式或者显示传递给虚拟机的参数输出,打印虚拟机配

★技巧:JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最 大分配的内存由-Xmx指定,默认是

物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70% 时,

JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。

(二)、
新生代的配置
-Xmn 可以设置新生代的大小,设置一个比较大的新生代会减少老年代的大小,这个参数对系统性能以及GC行

为有很大的影响,新生代GC频繁,老年代相对少,新生代大小一般会设置整合堆空间的1/3到1/4左右。
-XX:SurvivorRatio 用来设置新生代中eden区和from/to区的比例,
含义:-XX:SurvivorRatio=eden/from=eden/to

★技巧:不同的堆分布情况,对系统执行会产生一定影响,在实际情况下,应该根据系统的特点做出合理的配

置,基本策略:尽可能将对象预留在新生代,减少老年代的GC次数。 除了可以设置新生代的绝对大小-Xmn,还可以使用-XX:NewRatio来设置新生代和老年代的比例:-

XX:NewRatio=新生代/老年代

(三)、
堆溢出处理
Java程序的运行过程中,如果堆空间不足,则会抛出内存溢出的错误Out of Memory(OOM),一旦这类问题

发生在生产环境,就可能引起严重的业务中断,java虚拟机提供了-XX:HeapDumpOnOutOfMemoryError,使用该

参数可以在内存溢出时导出整个堆信息,与之配合使用的还有参数。

-XX:HeapDumpPath,可以设置导出堆的存放路径 内存分析工具:Memory Analyzer

dump信息:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/Test03.dump

//———————栈参数———————-//

-Xss 指定线程最大栈空间,整合参数也直接决定了函数可调用的最大深度

//———————方法区———————-//

和java堆一样,方法区是一块所有线程共享的内存区域,它用于保存系统的类信息,方法区(永久区)可以保

存多少信息可以对其进行配置,在默认情况下,-XX:MaxPermSize为64M,如果系统运行时产生大量的类,就需

要设置一个相对合适的方法区,以免出现永久区0内存溢出的问题。

-XX:MaxPermSize=64M -XX:PermSize=64M

jdk1.7以后不分client或者server模式

    原文作者:JVM
    原文地址: https://juejin.im/entry/59828ee76fb9a03c5539c34c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞