Java虚拟机参数

-XX:+PrintGC 简单的GC信息
-XX:+PrintGCDetail 详细的GC信息
-XX:+PrintGCTimeStamps GC的发生时间
-XX:+PrintGCApplicationConcurrentTime 应用程序的执行时间
-XX:+PrintGCApplicationStoppedTime  GC的STW的停顿时间
-Xloggc:xxxx/gc.log 指定GC的log的路径
-XX:+TraceClassLoading 可用显示有哪些类被加载
-XX:+TraceClassUnloading 可用来显示哪些类被卸载
-XX:+PrintCommandLineFlags  用来显示命令行输入哪些参数

堆相关参数
-Xms 当前内存的最小值
-Xmx 当前内存的最大值

java -Xmx20M -Xms5m xxx.class
在实际的工作用,可用直接将初始堆-Xms与最大堆-Xmx设置相等。这样的好处是可以减少程序运行时进行的垃圾回收次数,从而提高程序的性能。

-Xmn 可以设置新生代的大小。设置一个较大的新生代会减小老年代的大小,这个参数对系统的性能以及GC行为有很大的影响。新生代的大小一般建议设置为整个堆空间的1/3到1/4左右。
-XX:SurvivorRatio=eden/from=eden/to 用来设置新生代中eden空间和from/to空间的比例关系。
-Xmn的大小基本就是等于 eden + from + to的大小

java -Xms20m -Xmx20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails
这里表示的eden的空间大小是from的空间的两倍。

-XX:NewRatio=老年代/新生代
-Xmx20M -Xms20M -XX:NewRatio=2 -XX:+PrintGCDetails

-XX:+HeapDumpOnOutOfMemeoryError 在内存溢出的时候,导出整个堆的信息
-XX:HeapDumpPath 指定导出堆文件存放路径

方法区的配置
JDK 1.7 -XX:PermSize和-XX:MaxPermSize
JDK 1.8 -XX:MetaspaceSize 和-XX:MaxMetaspaceSize

栈配置
-Xss 指定线程栈的大小

直接内存
直接内存是Java程序中非常重要的组成部分,特别是在NIO中被广泛使用。直接内存跳过了Java堆,使Java程序可以直接访问原生堆空间。但是,直接内存也不是说一定可以提高内存访问速度,不能这么武断的认为。
直接内存的申请速度是远远低于堆空间的申请速度。

-XX:MaxDirectMemorySize 最大直接内存空间。
如果不设置,默认为最大堆空间, 即-Xmx。当直接内存使用量达到了-XX:MaxDirectMemeorySize的时候,就会触发垃圾回收。
如果垃圾回收不能有效释放足够空间,直接内存溢出依然会引起系统的OOM。

Client和Server模式选择
通过Java -version来查看系统是选择什么模式来运行。虚拟机在Server模式下回尝试收集更多的系统信息,使用更复杂的优化算法对程序进行优化,因此,当系统完全启动并进入运行稳定期后,Server模式的执行速度回远远快于Client模式。所以,长期运行的后台系统,建议使用Server模式。

java -server xxxx
发布了73 篇原创文章 · 获赞 35 · 访问量 17万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章