JVM基础参数

109 阅读3分钟

JVM 参数 java -Xms256m -Xmx1024m在命令行 eclipse、tomcat都是java写的程序,它们也使用jvm,它们相当于jvm的一部分,我们的程序在它们之上运行,所以可以通过它们设置jvm参数。开两个java程序会启动两个jvm实例。 修改垃圾收集器:-XX:+UseParNewGC(在eclipse或Tomcat修改catalina.bat文件) 查看使用的垃圾收集器:可以通过命令行输入:jvisualvm,打开Java VisualVm查看, Eclipse中,-XX:+UseG1GC,默认使用G1 Eclipse默认堆大小256m到1024m image.png

Tomcat初始堆大小

image.png 128mb(8GB/64)(开启tomcat进入localhost:8080后,点击server status后查看) JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制 JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。 首先JVM内存限制于实际的最大物理内存,假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,
这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。

-Xms :设置Java堆栈的初始化大小,默认物理内存的1/64(<1GB)
-Xmx :设置最大的java堆大小,默认物理内存的1/4(<1GB)
-Xmn :设置年轻代区大小,整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。增大年轻代后会减小老年代
-Xss :设置java线程堆栈大小,JDK5.0以后每个线程堆栈大小为1M,以前为256K
-XX:PermSize:设置永久代初始大小,默认物理内存的1/64(<1GB) -XX:MaxPermSize :设置永久代最大大小,默认物理内存的1/4(<1GB)
-XX:NewRatio :设置年轻代和老年代的比值,默认4
-XX:NewSize :设置年轻代的大小(JDK1.3/1.4) -XX:SurvivorRatio=n :设置年轻代中eden与Survivor比值,默认8 -XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率. -XX:PretenureSizeThreshold参数设置(如3MB),大于这个参数的直接进入老年代 java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0

发现虚拟机频繁GC,扩大堆大小,使用jconsole或jvisualvm查看