您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Java JVM启动参数大全

时间:2019-11-12 09:33:00  来源:  作者:

摘要

已经使用了一段时间的JAVA,期间也了解和用过一些JVM(Java Virtual machine)参数,但是没有仔细去整理过每个参数代表的意义,为此整理成文。

Java使用方式

java [options] classname [args]

java [options] -jar filename [args]

options: 命令行选项,空格分隔

classname: 启动的class名称

filename: Jar包名称(JAR)

args: main()方法参数,空格隔开

加载的class的main()方法必须定义为public static,并且无返回值,参数是字符串列表

public static void main(String[] args)

如果使用-jar选项,则args是JAR包包含的class。启动class必须通过Main-Class的manifest指定,示例如下:

jar {

manifest {

attributes 'Main-Class': 'com.xx.xx'

}

}

Options

Java 命令行提供了以下几种类型的选项

标准选项

非标准选项

高级运行选项

高级JIT编译选项

高级垃圾回收选项

高级可用性选项

(1) 标准选项被所有类型的JVM支持。标准选项用来做常规操作,如查看版本,设定class path等。

(2) 非标准选项一般是指Java HotSpot Virtual Machine特定的选项,不能保证被所有类型的JVM支持,该类选项使用时,以-X开头。

(3) 高级选项是用于Java HotSpot Virtual Machine特定区域调优的选项,同样不能保证被所有的JVM支持。该类选择使用时,以-XX开头。对于Boolean类型的选项,通过使用+表示选项生效,- 来标示选项无效。如-XX:+OptionName表示选项OptionName生效,-XX:-OptionName表示选项OptionName无效。

标准选项

所有类型的JVM均支持标准选项, 为此简单列举经常用到的几个选项。

-d32

将应用运行在32bit的环境,如果32bit环境未初始化或不支持,则报错。默认是运行在32bit环境。

-d64

将应用运行在64bit环境。如果64bit环境未初始化或不支持,则报错。默认是运行在32bit环境。

-help/-?

显示帮助文档

-verbose:class

显示每个加载的class

-verbose:gc

显示每次垃圾回收事件

-version

显示当前java 版本

-disableassertions[:[packagename]…|:classname] / -da[:[packagename]…|:classname]

禁用断言(assert),可以指定禁用断言的package和class。

-disablesystemassertions / -dsa

禁用全部断言(assert)

-enableassertions[:[packagename]…|:classname] / -ea[:[packagename]…|:classname]

启用断言,可以指定package和class。默认断言是禁用的。

-enablesystemassertions / -esa

启用全部断言(assert)

-server

选择Java HotSpot Server VM。64bit版本隐含设置-server。

-D[property]=value

定义系统属性值。property变量是一个字符串代表属性名,value代表设定的属性值。

以设置系统的文件编码为utf-8为例:

-Dfile.encoding=utf-8

非标准选项

非标准选项一般是指Java HotSpot Virtual Machine特定的选项。列举经常用到的几个选项。

-X

显示有效的-X选项的帮助信息

-Xbatch

禁用后台编译。默认情况下JVM是后台编译。该选项等同于 -XX:-BackgroundCompilation

-Xloggc:filename

将GC(garbage collection)信息重定向到filename。当-Xloggc和-verbose:gc同时给出时,-Xloggc将重载-verbose:gc

-Xmnsize

设置堆中年轻代(young generation)的初始值和最大值大小。单位是bytes,常用K,M,G (不区分大小写)

年轻代主要放置新对象,这块区域也是GC执行比较频繁的区域。如果该区域设置较小,可能导致频繁minor GC,如果设置过大,只有Full GC执行则每次GC耗时较长。Oracle建议的大小是整个堆大小的1/4 - 1/2之间。

以设置大小为256 MB为例:

​ -Xmn256m

不同于-Xmn同时设置初始值和最大值,可通过-XX:NewSize设置初始,-XX:MaxNewSize设置最大值。

-Xmssize

设置堆的初始值,该值必须是1024的倍数并且大于1MB。

以设置初始值6 MB的堆为例:

​ -Xms6m

如果该值不设置,则通过计算年轻代和老年代的和作为堆的初始值

-Xmxsize

指定应用的最大内存大小,该值必须是1024的倍数并且大于2MB。对于服务型应用,-Xms和-Xmx常设置为相同,至于原因涉及垃圾回收机制,如果两者设置相同则应用占据的内存不进行动态扩展。

以设置最大内存大小1G为例:

​ -Xmx1g

-Xmx等价于高级选项-XX:MaxHeapSize

-Xsssize

设置线程栈的大小。

以设置大小为1024KB的线程栈为例:

​ -Xss1024k

-Xss等价于高级选项-XX:ThreadStackSize

高级运行选项

该类选项控制Java HotSpot VM运行时的情况。列举经常用到的几个选项。

-XX:+DisableAttachMechanism

启用该选项会导致附件在JVM的工具类如jcmd, jstack,jmap jinfo无效。默认情况该选项无效,JVM提供的工具类可使用。

-XX:MaxDirectMemorySize=size

设置最大直接内存大小为size,对于新IO可以使用堆外内存(直接内存)构建对象,该选项是设置这块区域的大小。

以设置最大直接内存1MB为例:

​ -XX:MaxDirectMemorySize=1m

-XX:ThreadStackSize

设置线程栈大小,等价于-Xss选项。

高级可用性选项

该类选项提供收集系统信息和debug的能力。列举经常用到的几个选项。

-XX:+HeapDumpOnOutOfMemory

启用该选项,当出现java.lang.OutOfMemoryError异常时,Java的堆信息会dump到当前目录的文件中,文件命名为: java_pid[进程PID].hprof,可以通过-XX:HeapDumpPath指定dump文件路径。通过dump的文件我们利用工具,如MemoryAnalyzer,可以查看系统当时的情况,默认禁用。

-XX:HeapDumpPath=path

指定OutOfMemoryError异常时dump文件的路径,示例如下:

# 指定dump文件路径

-XX:HeapDumpPath=/var/log/java_heapdump.hprof

-XX:LogFile=path

设置log文件,默认情况下在当前目前,命名为hotspot.log。一般我们会利用slf4j工具设置日志,该选项倒不怎么使用。

高级垃圾回收选项

该类选项是Java HotSpot VM 用来控制垃圾回收。

-XX:+AggressiveHeap

启用Java堆优化。基于服务器的情况自适应的进行堆优化。默认禁用。

-XX:+CMSClassUnloadingEnabled

启用类卸载当使用CMS(the concurrent mark-sweep)垃圾收集器时。默认启用。如果禁用该选择,设置为-XX:-CMSClassUnloadingEnabled

-XX:CMSInitiatingOccupancyFraction=precent

设置老年代占比当开始CMS垃圾收集时,数值在0-100之间。默认值-1。

以老年代占比70%为例:

-XX:CMSInitiatingOccupancyFraction=70

1

-XX:ConcGCThreads=threads

设置垃圾回收线程的个数在并发GC时。默认值为JVM中有效的CPU的个数。

以线程个数2为例:

-XX:ConcGCThreads=2

1

-XX:ParallelGCThreads=threads

设置垃圾回收线程的个数在并行GC时。默认值为JVM中有效的CPU的个数。

以线程个数2为例:

-XX:ParallelGCThreads=2

1

-XX:+DisableExplicitGC

启用该选项,程序中调用System.gc()的处理均无效。默认禁用该选项,即程序中显示调用System.gc()是执行的。

-XX:InitialHeapSize=size

设置应用内存初始大小,该值为0或为1024的倍数并且大于1 MB

以设置初始内存大小为6 MB为例:

-XX:InitialHeapSize=6m

-XX:InitialHeapSize=6144k

-XX:InitialHeapSize=62914561

如果设置为0,则初始值为老年代和新生代的和。

-XX:MaxHeapSize=size

设置应用内存最大值,该值为1024的倍数并且大于2 MB,该值通常与-XX:InitialHeapSize设置相同。

该选项等价于-Xmx

-XX:NewRatio=ratio

设置年轻代和老年代的比值,默认为2。

以比值为1为例:

-XX:NewRatio=1

-XX:NewSize=size

设置堆的年轻代的初始值大小,等价于选项 -Xmn

-XX:+PrintGCDetails

打印每一次GC的详细信息,默认禁用。

-XX:+PrintGCDateStamps

每次GC均显示时间戳,默认禁用

-XX:+PrintGCApplicationStoppedTime

打印GC延迟时长,默认禁用

-XX:+UseConCMarkSweepGC

启用该选项表示在老年代的垃圾回收采用CMS垃圾回收器。启用该选项之后,-XX:+UseParNewGC选项会自动启用,并且不能禁用。默认禁用。在JDK 8中,老年代使用CMS的组合方式,年轻代不使用ParNew,即-XX:-UseParNewGC和-XX:+UseConCMarkSweepGC被废弃。

-XX:+UseG1GC

启用G1(garbage-first)垃圾收集器。G1是一种服务器风格的垃圾收集器,针对具有大量RAM的多处理器机器。目标是减少GC延时并且保持吞吐量。建议在设置堆(>= 6 GB)较大时使用。默认禁用。

-XX:+UseParallelGC

启用Parallel Scavenge垃圾收集器,该垃圾收集器是多进程处理,目标是提高吞吐量。该选项启用后,-XX:+UseParallelOldGC会自动启用,除非显示禁用。默认禁用。

-XX:+UseParallelOldGC

启用该选项,在Full GC时使用Parallel Garbage 垃圾收集器。默认禁用。与-XX:+UseParallelGC配对使用。

-XX:+UseParNewGC

启用该选项,在年轻代采用并行线程垃圾回收器。默认禁用。在JDK 8中,年轻代使用ParNew,老年代不使用CMS的组合方式,即-XX:+UseParNewGC和-XX:-UseConCMarkSweepGC被废弃。

-XX:+UseSerialGC

启用单线程垃圾回收器。针对简单的小应用,不需要特别垃圾回收设置,该选项是一个交好的选择。默认禁用。

最后配张年轻代和老年代垃圾回收器的组合图,加深理解。

Java JVM启动参数大全

参考文献

[1] jdk 1.8 帮助文档

[2] 深入理解Java虚拟机: JVM高级特性和最佳实践



Tags: JVM   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
为什么要有JVM? JVM就是Java运行虚拟机,那么虚拟机又分为系统虚拟机和程序虚拟机,而JVM是属于程序虚拟机,所以不要看到是虚拟机就误认为JVM是系统虚拟机。 JVM是帮助Java程序开...【详细内容】
2021-06-09  Tags: JVM  点击:(155)  评论:(0)  加入收藏
篇文章将重点分析jvm,涉及到的内容包括jvm内存模型,类加载器,GC回收算法,GC回收器,整体偏向于理论。本篇文章不适合初学者,适合具有3年以上开发经验的技术人员,欢迎大家一起交流分...【详细内容】
2020-07-06  Tags: JVM  点击:(39)  评论:(0)  加入收藏
摘要已经使用了一段时间的Java,期间也了解和用过一些JVM(Java Virtual Machine)参数,但是没有仔细去整理过每个参数代表的意义,为此整理成文。Java使用方式java [options] clas...【详细内容】
2019-11-12  Tags: JVM  点击:(139)  评论:(0)  加入收藏
00 前言Java程序具有 " Write Once , Run Anywhere ." 的跨平台特性。实现这样的目的,Java的方案是:半编译 + 半解释,即 .Class + JVM 。 1、源程序内容会被编译为.Class文件,.C...【详细内容】
2019-10-15  Tags: JVM  点击:(86)  评论:(0)  加入收藏
Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Jav...【详细内容】
2019-10-15  Tags: JVM  点击:(94)  评论:(0)  加入收藏
▌简易百科推荐
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  顶顶架构师    Tags:面向对象   点击:(2)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(12)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(13)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(11)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(11)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(17)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(19)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(22)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条