查看&修改JVM运行参数方法小结

查看&修改JVM运行参数方法小结


查看JVM参数状态的方法


1、JDK本身提供了许多查看JVM运行参数,状态的工具,如 Jmap,Jstat,VisualVM等;
2、也可以直接在程序中通过RunTime类查看JVM内存信息:
1
Runtime.getRuntime().maxMemory(); //最大可用内存,对应-Xmx
2
Runtime.getRuntime().freeMemory(); //当前JVM空闲内存
3
Runtime.getRuntime().totalMemory(); //当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和
maxMemory():为JVM的最大可用内存,可通过-Xmx设置;
totalMemory():为当前JVM占用的内存总数,totalMemory = JVM已使用的内存 + freeMemory 会随着JVM使用内存的增加而增加;
freeMemory():为当前JVM空闲内存,因为JVM只有在需要内存时才占用物理内存使用,所以freeMemory()的值一般情况下都很小,freeMemory() =  maxMemory()-totalMemory()+freeMemory();



JVM运行参数基本解释

1、基本的JVM内存参数:
-Xmx  JVM堆可用内存最大值;
默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;
-Xms JVM堆可用内存初始值;
Server端JVM最好将-Xms和-Xmx设为相同值(可以避免每次垃圾回收后JVM重新分配内存);
开发测试机、Clinet端JVM 可以保留默认值,以节省内存;
-Xmn JVM堆新生代区大小;
JVM堆内存大小 = 新生代大小 + 老年代大小 + 永久代大小(仅sun的JVM拥有永久代),sun推荐Xmn设置为Xmx的3/8;
-Xss  每个线程的Stack堆栈大小;
JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K;
在相同物理内存下,减小该值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,一般在3000~5000左右;
  典型的JVM内存参数配置示例:
1
-Xmx3550m
2
-Xms3550m
3
-Xmn2g 
4
-Xss128k

2、常见的JVM行为参数

Java启动参数共分为3类;
标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
参数及默认值 描述
-XX:-DisableExplicitGC 禁止调用System.gc();但JVM的gc仍然有效
-XX:+MaxFDLimit 最大化文件描述符的数量限制
-XX:+ScavengeBeforeFullGC 新生代GC优先于Full GC执行
-XX:+UseGCOverheadLimit 在抛出OOM之前限制jvm耗费在GC上的时间比例
-XX:-UseConcMarkSweepGC 对老年代采用并发标记交换算法进行GC
-XX:-UseParallelGC 启用并行GC
-XX:-UseParallelOldGC 对Full GC启用并行,当-XX:-UseParallelGC启用时该项自动启用
-XX:-UseSerialGC 启用串行GC
-XX:+UseThreadPriorities 启用本地线程优先级
参数及默认值 描述
-XX:LargePageSizeInBytes=4m 设置用于Java堆的大页面尺寸
-XX:MaxHeapFreeRatio=70 GC后java堆中空闲量占的最大比例
-XX:MaxNewSize=size 新生成对象能占用内存的最大值
-XX:MaxPermSize=64m 老年代对象能占用内存的最大值
-XX:MinHeapFreeRatio=40 GC后java堆中空闲量占的最小比例
-XX:NewRatio=2 新生代内存容量与老年代内存容量的比例
-XX:NewSize=2.125m 新生代对象生成时占用内存的默认值
-XX:ReservedCodeCacheSize=32m 保留代码占用的内存容量
-XX:ThreadStackSize=512 设置线程栈大小,若为0则使用系统默认值
-XX:+UseLargePages 使用大页面内存


设置JVM运行参数的方法

1、在命令行中启动并使用JVM时:
1
java -Xmx128m -Xms64m -Xmn32m -Xss16m Test  //假设测试的类是Test

2、在Eclpse中启动JVM时:
方法A:
在eclipse根目录下打开【eclipse.ini】,默认内容如下:
1
-vmargs  
2
-Xms40m  
3
-Xmx256m
-vmargs表示以下为虚拟机设置参数,可修改其中的参数值,也可添加-Xmn,-Xss,另外,eclipse.ini内还可以设置非堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。
方法B
打开【eclipse>>窗口>>首选项>>Java>>已安装的JRE】(对在当前开发环境中运行的java程序皆生效)
编辑当前使用的JRE,在缺省VM参数中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m
方法C:
打开【eclipse>>运行>>运行>>Java应用程序】(只对所设置的java类生效)
选定需设置内存分配的类-自变量,在VM自变量中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m

※如果在同一开发环境中同时进行了B和C设置,则B设置生效,C设置无效,如:

3、在IDEA中启动JVM时:
打开 【IDEA 安装目录>>bin 】,其中有两个 vmoptions 文件,需针对不同的JDK进行配置:
32 位:idea.exe.vmoptions
64 位:idea64.exe.vmoptions
1
-Xms512m  
2
-Xmx1024m  
3
-XX:MaxPermSize=512m  
4
-XX:ReservedCodeCacheSize=225m  
5
-XX:+UseConcMarkSweepGC  
6
-XX:SoftRefLRUPolicyMSPerMB=50  
7
-ea  
8
-Dsun.io.useCanonCaches=false  
9
-Djava.net.preferIPv4Stack=true

4、在Tomcat服务器中启动JVM时:
方法A: 
设置环境变量:
变量名:CATALINA_OPTS
变量值:-Xmx128m -Xms64m -Xmn32m -Xss16m
方法B
打开【Tomcat根目录>>bin文件夹>> catalina.bat或 catalina.sh 】,编辑,将其中的TALINA_OPTS%(共有四处)替换为:-Xmx128m -Xms64m -Xmn32m -Xss16m

你可能感兴趣的:(JVM,原理)