jvm常用参数

Jvm常用参数

Java1.7的jvm参数查看一下官方网站。

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html

 Java1.8

http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html

 Hotspotvm知识查看一下官方网站。

http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136373.html

 

 

1、基本参数

1.1. -client,-server

这两个参数用于设置虚拟机使用何种运行模式,client模式启动比较快,但运行时性能  和内存   管理效率不如server模式,通常用于客户端应用程序。相反,server模式启动比client慢,但可获得更高的运行性能。

Windows 下默认是 -client ,linux和Solaris下默认是-server。

1.2. -classpath,-cp

-classpath告知虚拟机搜索目录名、jar文档名、zip文档名,之间用分号;分隔。

虚拟机搜索类的方式和顺序:Bootstrap classes,Extension classes,User classes。

1、Bootstrap 中的路径是虚拟机自带的jar或zip文件;

2、Extension是位于jre\lib\ext目录下的jar文件;

3、User classes搜索顺序为当前目录、环境变量 CLASSPATH、-classpath。

 

1.3. -D<propertyName>=value

在虚拟机的系统属性中设置属性名/值对,运行在此虚拟机之上的应用程序可用System.getProperty(“propertyName”)得到value的值。

2.   扩展参数

2.1. 堆、栈设置

-Xms:初始堆大小,默认是物理内存的1/64。默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制。例如:-Xms 20m。

-Xmx:最大堆大小。默认是物理内存的1/4         默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。

-XX:NewSize=n:设置年轻代大小(初始值)。 例如:-XX:NewSize=100m。

-XX:MaxNewSize:设置年轻代最大值。

-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4。

-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5。

 

-XX:PermSize(1.8之后改为MetaspaceSize)   设置持久代(perm gen)初始值,默认是物理内存的1/64。

-XX:MaxPermSize=n:(1.8之后改为MaxMetaspaceSize)设置最大持久代大小。

 

-Xss:每个线程堆栈大小。一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。-Xss is translated in a VM flag named ThreadStackSize”。和-XX:ThreadStackSize 功能一样。

 

 

 

2.2. 收集器设置

默认情况下:JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行判断。

-Xnoclassgc     关闭虚拟机对class的垃圾回收功能。

 

2.2.1.   串行收集器

-XX:+UseSerialGC:设置串行收集器。

 

2.2.2.   并行收集器(吞吐量优先)

-XX:+UseParallelGC:选择垃圾收集器为并行收集器。

-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。

-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。

-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间(单位毫秒),如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。

-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低响应时间或者收集频率等。

此参数建议使用并行收集器时,一直打开。

 

举例:

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC

 

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC  -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy

 

2.2.3.   并发收集器(响应时间优先)

 

-XX:+UseParNewGC:设置年轻代为并发收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。

-XX:+UseConcMarkSweepGC:设置年老代为并发收集。

-XX:CMSFullGCsBeforeCompaction=n:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此参数设置运行n次FullGC以后对内存空间进行压缩、整理。

-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除内存碎片。

-XX:CMSInitiatingOccupancyFraction=70:表示年老代空间到70%时就开始执行CMS,确保年老代有足够的空间接纳来自年轻代的对象。

 

-XX:+UseG1GC:使用G1收集器。

 

举例:

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5

 

2.3. 垃圾回收统计信息

-XX:+PrintGC

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-Xloggc:filename

 

posted @ 2017-04-09 08:14  SummerChill  阅读(317)  评论(0编辑  收藏  举报