美文网首页
java启动时JVM参数分析

java启动时JVM参数分析

作者: Pecksniff1994 | 来源:发表于2021-07-02 14:15 被阅读0次
java启动命令
  • 执行类:java [-options] class [args…]
  • 执行jar文件:java [-options] -jar jarfile [args…]

[-options] 配置 Java 系统参数
[args…] 配置 Java 运行参数 即main方法中的参数数组args,可以通过修改启动配置进行设置,多个参数之间用空格分隔,如果参数自身带有空格,则需要用引号包裹。

java启动参数共分为三类
  1. 其一是标准参数(-),顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上不会随着JVM版本的变化而变化。我们可以通过 -help 命令来检索出所有标准参数。所有的JVM实现都必须实现这些参数的功能,而且向后兼容;该参数在程序中任何位置都可以访问到,优先级最高。覆盖程序中同名配置;预定义的标准参数(非-D开头的选项)的个数是有限的。但是我们还可以自定义设置系统属性,系统参数的标准格式为:-Dargname=argvalue,多个参数之间用空格隔开,如果参数值中间有空格,则用引号括起来。其中,参数名可以是 Java 默认的,此类参数由 JVM 虚拟机自动识别并生效,例如,-Dfile.encoding=UTF-8 用于指定文件编码格式;也可以是用户自定义的,例如,-Dmy=user,程序中可以读取该参数值,执行相关逻辑。虚拟机系统参数中设置的参数键值对(只有-D定义的系统属性是键值对形式),在程序中可以用System.getProperty("propertyName")获取对应参数值。

  2. 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;

  3. 其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;

提示:2、3为非标准系统参数形式,一般与 JVM 虚拟机设置有关,参数名和值都由 JVM 规范规定。例如:-Xms :初始堆大小、-Xmx :最大堆大小。主要用于JVM调优和debug。
该参数的书写形式又分为两大类:
  ①、Boolean类型
格式:-XX:[±] 表示启用或者禁用name属性。例子:-XX:+UseG1GC(表示启用G1垃圾收集器)
  ②、Key-Value类型
格式:-XX:= 表示name的属性值为value。例子:-XX:MaxGCPauseMillis=500(表示设置GC的最大停顿时间是500ms)

JVM调优参数
参数及其默认值 描述 用例/所属
-verbose:[class|gc|jni] -verbose:class 输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时可此进行诊断。-verbose:gc 输出每次GC的相关情况。-verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息。
-Xms<size> 设置JVM初始java堆内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xms512m
-Xmx<size> 设置JVM最大可用java堆内存为512M -Xmx512m
-Xmn<size> 设置年轻代大小为200M。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8 -Xmn200m
-Xss<size> 设置每个 Java 线程堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 -Xss128k
-Xloggc:file 与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到一个文件中,文件的位置最好在本地,以避免网络的潜在问题。若与verbose命令同时出现在命令行中,则以-Xloggc为准。
-Xprof 跟踪正运行的程序,并将跟踪数据在标准输出输出;适合于开发环境调试。
-XX:-DisableExplicitGC 禁止调用System.gc();但jvm的gc仍然有效 行为参数
-XX:+MaxFDLimit 最大化文件描述符的数量限制 行为参数
-XX:+ScavengeBeforeFullGC 新生代GC优先于Full GC执行 行为参数
-XX:+UseGCOverheadLimit 在抛出OOM之前限制jvm耗费在GC上的时间比例 行为参数
-XX:-UseConcMarkSweepGC 对老生代采用并发标记交换算法进行GC。jvm中GC执行的一种方式,并发(ConcMarkSweepGC)是指多个线程并发执行GC,一般适用于多处理器系统中,可以提高GC的效率,但算法复杂,系统消耗较大; 行为参数
-XX:-UseParallelGC 启用并行GC。jvm中GC执行的一种方式,并行(ParallelGC)是指GC运行时,对应用程序运行没有影响,GC和app两者的线程在并发执行,这样可以最大限度不影响app的运行; 行为参数
-XX:-UseParallelOldGC 对Full GC启用并行,当-XX:-UseParallelGC启用时该项自动启用 行为参数
-XX:-UseSerialGC 启用串行GC。jvm中GC执行的一种方式,串行(SerialGC)是jvm的默认GC方式,一般适用于小型应用和单处理器,算法比较简单,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 使用大页面内存
-XX:-CITime 打印消耗在JIT编译的时间 调试参数
-XX:ErrorFile=./hs_err_pid<pid>.log 保存错误日志或者数据到文件中 调试参数
-XX:-ExtendedDTraceProbes 开启solaris特有的dtrace探针 调试参数
-XX:HeapDumpPath=./java_pid<pid>.hprof 指定导出堆信息时的路径或文件名 调试参数
-XX:-HeapDumpOnOutOfMemoryError 当首次遭遇OOM时导出此时堆中相关信息 调试参数
-XX:OnError="<cmd args>;<cmd args>" 出现致命ERROR之后运行自定义命令 调试参数
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>" 当首次遭遇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 跟踪类加载器约束的相关信息 调试参数

相关文章

  • tomcat8.5修改默认jvm内存参数&解决shutdown关

    修改tomcat8.5默认jvm内存参数 1.查看java进程jvm参数 结果发现默认启动时,并没有配置jvm参数...

  • 实战JVM参数配置

    本案例是想通过JVM参数配置了解到Java虚拟机内存默认参数的设置 代码如下 测试过程 启动时配置jvm参数 运行...

  • 5. JVM启动参数

    JVM启动Java文件语法格式2种: JVM启动时设置启动参数,会以特定字符开头来设置参数,具体分为几类: 以-开...

  • Java heap space 解决方法

    java虚拟机内存不够,可以修改启动时的jvm参数。 IDEA修改参数: Run--Edit Configur...

  • jvm垃圾清理机制

    更多参考GC及JVM参数浅析JAVA的垃圾回收机制(GC)JVM系列三:JVM参数设置、分析jvm系列 (二) -...

  • java启动时JVM参数分析

    java启动命令 执行类:java [-options] class [args…] 执行jar文件:java [...

  • Java8 JVM参数解读

    摘要:我们知道java虚拟机启动时会带有很多的启动参数,Java命令本身就是一个多参数的启动命令。那么具体JVM启...

  • JVM诊断之查看运行参数

    问题描述 为了分析和定位一个Java线上系统问题,我们需要查看JVM启动时的一些参数设置,例如:垃圾回收算法、堆大...

  • LINUX查看JAVA进程的启动参数

    问题说明 为了分析和定位一个Java线上系统问题,我们需要查看JVM启动时的一些参数设置,例如:垃圾回收算法、堆大...

  • java分析工具

    java分析工具 jinfo:命令可以用来查看 Java 进程运行的 JVM 参数 jstat:(Java Vir...

网友评论

      本文标题:java启动时JVM参数分析

      本文链接:https://www.haomeiwen.com/subject/ceueultx.html