查看&修改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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值