-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
网友评论