JVM 参数:`-D`、`-X`、`-XX`,傻傻分不清?

本文详细解析了JVM的三种参数类型:标准选项、非标准选项和高级选项。-D用于设置系统属性,是标准选项;-X用于非标准选项,如设置堆大小;-XX则是高级选项,用于调整JVM行为和性能,包括布尔选项和带参数选项。了解这些参数有助于更好地理解和优化Java应用的运行环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JVM 参数众多,我们常在启动一个 Java 程序时通过命令行(例如:java -jar app.jar)指定各种参数选项。很多同学就会对此感到疑惑,为什么有时候要用 -D,有时候却要用 -X,还有些时候用的却是 -XX 呢?

在这里插入图片描述

今天,我就在这篇文章中讲一讲这些选项之间的差异。看完这篇文章之后,你将学到 JVM 选项的主要分类、不同分类的选项的主要用途,以及如何找出 JVM 支持的各种配置项。

想直接知道答案的同学可以直接跳到文章结尾。

JVM 选项分类

JVM 其实支持三种类型的选项:标准选项(standard options)、非标准选项(non-standard options,又叫 extra-options)和高级选项(advanced options)。之所以有这么多选项,是因为 JVM 只是一个规范,它有不同的实现,例如 HotSpot、OpenJ9、GraalVM、Azul Zing 等。不同的 JVM 实现支持的选项会有所不同,但是有些选项是所有的 JVM 实现都会支持的,这类选项就是标准选项。

标准选项

标准选项是所有 JVM 实现都会支持的。打开控制台,输入 java,你不仅能看到 java 命令的使用手册,还能看到你机器上默认的 JVM 所支持的所有标准选项:

~$ java
Usage: java [options] <mainclass> [args...]
           (to execute a class)
   or  java [options] -jar <jarfile> [args...]
           (to execute a jar file)
   or  java [options] -m <module>[/<mainclass>] [args...]
       java [options] --module <module>[/<mainclass>] [args...]
           (to execute the main class in a module)
   or  java [options] <sourcefile> [args]
           (to execute a single source-file program)

 Arguments following the main class, source file, -jar <jarfile>,
 -m or --module <module>/<mainclass> are passed as the arguments to
 main class.

 where options include:

    -zero         to select the "zero" VM
    -dcevm        to select the "dcevm" VM
    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
    --class-path <class search path of directories and zip/jar files>
                  A : separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -p <module path>
    --module-path <module path>...
                  A : separated list of directories, each directory
                  is a directory of modules.
    --upgrade-module-path <module path>...
                  A : separated list of directories, each directory
                  is a directory of modules that replace upgradeable
                  modules in the runtime image
    --add-modules <module name>[,<module name>...]
                  root modules to resolve in addition to the initial module.
                  <module name> can also be ALL-DEFAULT, ALL-SYSTEM,
                  ALL-MODULE-PATH.
    --enable-native-access <module name>[,<module name>...]
                  modules that are permitted to perform restricted native operations.
                  <module name> can also be ALL-UNNAMED.
    --list-modules
                  list observable modules and exit
    -d <module name>
    --describe-module <module name>
                  describe a module and exit
    --dry-run     create VM and load main class but do not execute main method.
                  The --dry-run option may be useful for validating the
                  command-line options such as the module system configuration.
    --validate-modules
                  validate all modules and exit
                  The --validate-modules option may be useful for finding
                  conflicts and other errors with 
逐条解读这个yml文件 version: '2' services: redis: image: redis:5.0.4 container_name: jetlinks-redis ports: - "10399:10399" volumes: - "./data/redis:/data" command: redis-server --appendonly yes --requirepass "JetLinks@redis" environment: - TZ=Asia/Shanghai elasticsearch: image: elasticsearch:6.8.23 container_name: jetlinks-elasticsearch environment: ES_JAVA_OPTS: "-Djava.net.preferIPv4Stack=true -Xms2g -Xmx2g" TZ: Asia/Shanghai transport.host: 0.0.0.0 discovery.type: single-node bootstrap.memory_lock: "true" discovery.zen.minimum_master_nodes: 1 discovery.zen.ping.unicast.hosts: elasticsearch volumes: - ./data/elasticsearch:/usr/share/elasticsearch/data ports: - "9200:9200" - "9300:9300" kibana: image: kibana:6.8.23 container_name: jetlinks-kibana environment: ELASTICSEARCH_URL: http://elasticsearch:9200 links: - elasticsearch:elasticsearch ports: - "5601:5601" depends_on: - elasticsearch postgres: image: postgres:11-alpine container_name: jetlinks-postgres ports: - "5432:5432" volumes: - "./data/postgres:/var/lib/postgresql/data" environment: POSTGRES_PASSWORD: jetlinks POSTGRES_DB: jetlinks TZ: Asia/Shanghai ui: image: registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.2.0 container_name: jetlinks-pro-ui ports: - 9000:80 environment: - "API_BASE_PATH=http://jetlinks:8844/" #API根路径 volumes: - "./data/upload:/usr/share/nginx/html/upload" depends_on: - jetlinks jetlinks: build: . container_name: jetlinks-pro ports: - 8844:8844 # API端口 - 11883:11883 # 通过openAPI使用mqtt订阅平台消息 - 1883-1890:1883-1890 # MQTT端口 - 8801-8810:8801-8810 # 预留端口 - 8801-8810:8801-8810/udp # udp预留端口 - 5060-5061:5060-5061/udp # udp端口 volumes: - "./data:/application/data" # 临时保存协议目录 - "./data/upload:/application/static/upload" # 持久化上传的文件 - "/home/nslvzy/license.lic:/application/license.lic" - "/home/nslvzy/publicCerts.keystore:/application/publicCerts.keystore" environment: - "TZ=Asia/Shanghai" - "JAVA_OPTS=-Xms4G -Xmx8G -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/application/static/upload/dump.hprof" # jvm参数,根据情况调整 - "hsweb.file.upload.static-location=http://172.23.69.181:9000/api/upload" #上传的静态文件访问根地址,为本机的IP或者域名。需要前后端都能访问。 - "spring.r2dbc.url=r2dbc:postgresql://postgres:5432/jetlinks" #数据库连接地址 - "spring.r2dbc.username=postgres" - "spring.r2dbc.password=jetlinks" - "spring.elasticsearch.uris=elasticsearch:9200" # - "spring.elasticsearch.username=admin" # - "spring.elasticsearch.password=admin" - "spring.reactor.debug-agent.enabled=false" #设置为false能提升性能 - "spring.redis.host=redis" - "spring.redis.port=6379" - "spring.redis.password=JetLinks@redis" # - "captcha.enabled=false" #关闭验证码 - "jetlinks.things.metadata.preprocessor.enabled=true" - "zlmedia.play.device-auth.enabled=true" - "zlmedia.play.device-auto-push.enabled=true" - "zlmedia.hook.auth.enabled=false" - "media.onvif.enabled=true" - "logging.level.io.r2dbc=warn" - "logging.level.org.springframework.data=warn" - "logging.level.org.springframework=warn" - "logging.level.org.jetlinks=warn" - "logging.level.org.hswebframework=warn" - "logging.level.org.springframework.data.r2dbc.connectionfactory=warn" - "network.resources[0]=1883-1890/tcp" - "network.resources[1]=8801-8810" - "network.resources[2]=5060-5061/udp" - "license.subject=license" - "license.publicAlias=publicCert" - "license.storePass=a123456" - "license.licensePath=/application/license.lic" - "license.publicKeysStorePath=/application/publicCerts.keystore" links: - redis:redis - postgres:postgres - elasticsearch:elasticsearch depends_on: - elasticsearch - postgres - redis
最新发布
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值