查看&修改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,最佳设值应该视物理内存大小及计算机内其他内存开销而定;
-XmsJVM堆可用内存初始值;
Server端JVM最好将-Xms和-Xmx设为相同值(可以避免每次垃圾回收后JVM重新分配内存);
开发测试机、Clinet端JVM 可以保留默认值,以节省内存;
-XmnJVM堆新生代区大小;
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
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM运行参数设置需要根据具体的应用场和需求来进行调整,以下是一些常见的JVM运行参数设置建议值: 1. 初始堆大小(-Xms)和最大堆大小(-Xmx):可以根据应用的内存需求来设置。一般建议将初始堆大小和最大堆大小设置为相同的值,以避免堆大小动态调整带来的性能开销。例如,可以设置为 -Xms2g -Xmx2g 表示初始堆大小和最大堆大小都为2GB。 2. 年轻代大小(-Xmn):年轻代是对象分配的主要区域,可以根据应用的对象创建和回收频率来设置。一般建议将年轻代大小设置为整个堆大小的1/3到1/4左右。例如,可以设置为 -Xmn1g 表示年轻代大小为1GB。 3. 年老代大小(-XX:MaxTenuringThreshold):年老代是存放长时间存活的对象的区域,可以根据应用的对象生命周期来设置。一般建议将年老代大小设置为整个堆大小的2/3到3/4左右。例如,可以设置为 -XX:MaxTenuringThreshold=15 表示对象经过15次垃圾回收后仍然存活,则会被移到年老代。 4. 垃圾回收器选择(-XX:+UseParallelGC):根据应用的性能需求和硬件环境来选择合适的垃圾回收器。如果对吞吐量要求较高,可以选择并行垃圾回收器(-XX:+UseParallelGC);如果对延迟要求较高,可以选择CMS垃圾回收器(-XX:+UseConcMarkSweepGC)或者G1垃圾回收器(-XX:+UseG1GC)。 5. 元空间大小(-XX:MaxMetaspaceSize):元空间用于存放类的元数据信息,可以根据应用的类加载和卸载频率来设置。一般建议将元空间大小设置为应用所需的最大类数量的两倍左右。例如,可以设置为 -XX:MaxMetaspaceSize=256m 表示元空间大小为256MB。 请注意,以上只是一些常见的JVM运行参数设置建议值,具体的设置还需要根据实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值