【JVM】1. 部分JVM参数配置

1. 参数类型

  • 标准参数(-):所有的JVM都必须实现的参数,而且向后兼容
  • 非标准参数(-X):默认JVM实现的参数,但并不保证所有JVM都满足,且不向后兼容
  • 非stable参数(-XX):各个JVM实现不同,将来可能随时取消,但是这些参数往往是非常有用的

2. 标准参数

标准参数就是运行在java命令后面加的参数,如-version,-jar等,输入java -helpjava -?就能获取所有的标准参数列表

  • -client: 这是在一般pc机器上使用的模式,启动快,但是性能和内容管理效率不高,多用于桌面应用
  • -server: 比client模式慢10%左右,但是性能和内容管理效率高,适用于服务器,所用于服务端,64位的JVM只有server模式
启动模式新生代GC方式旧生代和持久代GC方式
client串行串行
server并行并发
  • -classpath / -cp: JVM加载和搜索文件的目录路径,多个路径用;分割
    • -verbose:class: 输出jvm载入类的相关信息, 当jvm报告找不到类或者类冲突时可进行诊断
    • -verbose:gc: 输出每次gc的相关情况
    • -verbose:jni: 输出native方法调用的相关情况,一般用于诊断jni调用错误信息

3. 非标准参数

输入java -X 命令,可以获取当前JVM支持的所有非标准参数列表

  • -Xmn: 新生代内存大小,包括S分区和E分区的总和
  • -Xms: 初始堆的大小
  • -Xmx: 堆大小的最大值, 默认是总物理内存/64,如果都不设置,则最大堆和最小堆会相同
  • -Xss: 设置现成的栈内存默认1M
  • -Xprof: 跟踪增运行的程序,并将跟踪数据进行标准输出,适用于开发环境调试
  • -Xnoclassgc: 关闭针对class的gc,由于其阻止内存回收,可能会导致OutOfMemoryError错误
  • -Xincgc: 开启增量gc,有助于减少长时间gc时程序出现的停顿,但会降低cpu对应的处理能力
  • -Xloggc:file: 与-verbose:gc功能类似,只是将每次的gc事件记录到一个文件中

4. 非stable参数

-XX表示的非stable参数,大致可能分为三大类

  • 性能参数: 用于jvm的性能调优和内存分配控制
  • 行为参数:用于改变jvm的基础行为,如gc方式和算的选择
  • 调试参数:用于监控打印输出jvm参数

非stable参数的使用方法有4种

  • -XX:+<option> : 启用选项
  • -XX:-<option> : 不启用选项
  • -XX:<option>=<number> : 给选项设置一个数字型值,可加单位,如1m
  • -XX:<option>=<string> : 给选项设置一个字符串型值

4.1 性能参数

多用于定义内存分配的大小和比例

参数及其默认值描述
-XX:NewSize=2.125m新生代对象生成时占用内存的默认值
-XX:MaxNewSize=size新生成对象能占用内存的最大值
-XX:MaxPermSize=64m方法区所能占用的最大内存(非堆内存)
-XX:PermSize=64m方法区分配的初始内存
-XX:MaxTenuringThreshold=15对象在新生代存活区切换的次数(坚持过MinorGC的次数,每坚持过一次,该值就增加1),大于该值会进入老年代(年龄阈值)
-XX:MaxHeapFreeRatio=70GC后java堆中空闲量占的最大比例,大于该值,则堆内存会减少
-XX:MinHeapFreeRatio=40GC后java堆中空闲量占的最小比例,小于该值,则堆内存会增加
-XX:NewRatio=2新生代内存容量与老生代内存容量的比例
-XX:ReservedCodeCacheSize= 32m保留代码占用的内存容量
-XX:ThreadStackSize=512设置线程栈大小,若为0则使用系统默认值
-XX:LargePageSizeInBytes=4m设置用于Java堆的大页面尺寸
-XX:PretenureSizeThreshold= size大于该值的对象直接晋升入老年代(这种对象少用为好)
-XX:SurvivorRatio=8Eden区域Survivor区的容量比值,如默认值为8,代表Eden:Survivor1:Survivor2=8:1:1

4.2 行为参数

主要用于垃圾收集器类型选择,以及运行中的gc策略

参数及其默认值描述
-XX:+UseSerialGC启用串行GC,即采用Serial+Serial Old模式
-XX:+UseParallelGC启用并行GC,即采用Parallel Scavenge+Serial Old收集器组合(-Server模式下的默认组合)
-XX:GCTimeRatio=99设置用户执行时间占总时间的比例(默认值99,即1%的时间用于GC)
-XX:MaxGCPauseMillis=time设置GC的最大停顿时间(这个参数只对Parallel Scavenge有效)
-XX:+UseParNewGC使用ParNew+Serial Old收集器组合
-XX:ParallelGCThreads设置执行内存回收的线程数,在+UseParNewGC的情况下使用
-XX:+UseParallelOldGC使用Parallel Scavenge +Parallel Old组合收集器
-XX:+UseConcMarkSweepGC使用ParNew+CMS+Serial Old组合并发收集,优先使用ParNew+CMS,当用户线程内存不足时,采用备用方案Serial Old收集
-XX:-DisableExplicitGC禁止调用System.gc();但jvm的gc仍然有效
-XX:+ScavengeBeforeFullGC新生代GC优先于Full GC执行

4.3 调试参数

用于监控和打印gc信息,一般为开发或调优时使用

参数及其默认值描述
-XX:-CITime打印消耗在JIT编译的时间
-XX:ErrorFile=./hs_err_pid.log保存错误日志或者数据到文件中
-XX:-ExtendedDTraceProbes开启solaris特有的dtrace探针
-XX:HeapDumpPath=./java_pid.hprof指定导出堆信息时的路径或文件名
-XX:-HeapDumpOnOutOfMemoryError当首次遭遇OOM时导出此时堆中相关信息
-XX:OnError=“;”出现致命ERROR之后运行自定义命令
-XX:OnOutOfMemoryError=“;”当首次遭遇OOM时执行自定义命令
-XX:-PrintClassHistogram遇到Ctrl-Break后打印类实例的柱状信息,与jmap -histo功能相同
-XX:-PrintConcurrentLocks遇到Ctrl-Break后打印并发锁的相关信息,与jstack -l功能相同
-XX:-PrintCommandLineFlags打印在命令行中出现过的标记
-XX:-PrintCompilation当一个方法被编译时打印相关信息
-XX:-PrintGC每次GC时打印相关信息
-XX:-PrintGC Details每次GC时打印详细信息
-XX:-PrintGCTimeStamps打印每次GC的时间戳
-XX:-TraceClassLoading跟踪类的加载信息
-XX:-TraceClassLoadingPreorder跟踪被引用到的所有类的加载信息
-XX:-TraceClassResolution跟踪常量池
-XX:-TraceClassUnloading跟踪类的卸载信息
-XX:-TraceLoaderConstraints跟踪类加载器约束的相关信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值