0

0

如何通过Java命令行参数查看默认JVM设置_XX:+PrintFlagsFinal用法

P粉602998670

P粉602998670

发布时间:2026-03-06 03:41:30

|

790人浏览过

|

来源于php中文网

原创

-xx:+printflagsfinal 显示 jvm 启动后最终生效的所有参数值,含自动推导项,格式为 {type} {name} = {value} {kind},其中 kind 为 product/manageable(可配)、default(未显式修改)、vm_default(硬编码不可改);需配合 -version 使用,输出数值单位为字节,须用 grep 过滤,且仅 jdk 7u40+ 支持。

如何通过java命令行参数查看默认jvm设置_xx:+printflagsfinal用法

-XX:+PrintFlagsFinal 看默认 JVM 参数值

这个参数能列出所有 JVM 启动后最终生效的参数(包括被自动推导、隐式设置的),但输出极长,且默认不带单位、不区分用户显式设置和 JVM 自动设定的值。
实操建议:

  • -XX:+PrintFlagsFinal 一定要配合 -version 或一个最小化类(比如 java -XX:+PrintFlagsFinal -version),否则会卡在等待主类;
  • 输出里每行格式是 {type} {name} = {value} {kind},其中 {kind} 是关键:如果显示 productmanageable,说明是可配置项;default 表示未被显式修改过;vm_default 是 JVM 内部硬编码值,改不了;
  • 别直接人眼扫——用 grep 过滤,比如查堆内存:java -XX:+PrintFlagsFinal -version | grep -i "heapsize"
  • 注意数值单位:整数默认是字节,K/M/G 后缀只在命令行参数里有效,PrintFlagsFinal 输出里不会自动换算,MaxHeapSize 显示的是字节数(比如 4294967296 就是 4G)。

    -XX:+PrintFlagsInitialPrintFlagsFinal 的区别在哪

    前者只展示 JVM 初始化时“读到”的参数值(还没做任何自适应调整),后者才是真实生效的终态值。两者差异往往出现在内存相关参数上。
    常见错误现象:

    • PrintFlagsInitialInitialHeapSize,发现它等于 0,误以为没设初始堆——其实 JVM 会根据物理内存自动计算,这个值在 PrintFlagsFinal 里才变成具体数字;
    • 某些平台(如容器环境)下,PrintFlagsInitial 显示的 MaxRAMPercentage 是默认 25.0,但 PrintFlagsFinalMaxHeapSize 可能远低于预期——说明容器内存限制没被正确识别,得加 -XX:+UseContainerSupport
    • PrintFlagsInitial 不显示 CMS、G1 等 GC 相关的派生参数(比如 G1HeapRegionSize),它们只在 PrintFlagsFinal 中出现。

      为什么加了 -XX:+PrintFlagsFinal 却没输出或报错

      最常见原因是 JVM 版本不支持,或者参数拼写/大小写错了。
      使用场景与兼容性影响:

      问小白
      问小白

      免费使用DeepSeek满血版

      下载
      • OpenJDK 7u40+ 和 Oracle JDK 7u40+ 才支持,JDK 6 及更早版本会直接报错 Unrecognized VM option
      • 注意是 PrintFlagsFinal,不是 PrintFlagFinal(少个 s)或 PrintFlagsFinals(多 s),大小写也必须全小写;
      • 某些精简版 JRE(如部分嵌入式或 Android ART)完全不支持这些诊断参数;
      • 如果用了 -Xloggc 或其他日志参数,可能干扰输出流,建议单独测试,不要混用调试类参数。

        想快速定位某个参数是否生效,别只靠肉眼扫

        人工翻几千行输出效率极低,而且容易漏掉被覆盖或重置的值。
        实操建议:

        • grep-A1-B1 查上下文,比如 java -XX:+PrintFlagsFinal -version | grep -A1 "UseG1GC",能同时看到该参数值和它的 {kind} 标记;
        • 想确认是不是被命令行显式覆盖,对比两次输出:java -XX:+PrintFlagsFinal -version vs java -XX:+UseG1GC -XX:+PrintFlagsFinal -version,再用 diff 看差异;
        • 注意有些参数名带下划线,比如 MaxMetaspaceSize,别写成 MaxMetaSpaceSize(空格或大小写错就搜不到);
        • 输出中同一参数可能出现多次(比如不同 GC 类型下派生出的不同值),以最后一行为准——因为 JVM 是按顺序解析并覆盖的。

          立即学习Java免费学习笔记(深入)”;

          JVM 参数的“最终值”不等于“你写的值”,中间有平台适配、内存推导、GC 策略联动等多层覆盖逻辑。真正要验证一个参数是否起效,唯一可靠的方式是结合 PrintFlagsFinal 和实际运行时行为(比如 GC 日志、jstat 输出)交叉比对。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

434

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

600

2023.08.10

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

235

2023.12.07

oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

271

2023.08.16

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

220

2023.09.15

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

245

2023.09.18

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

463

2023.09.19

Oracle中RAC的用法
Oracle中RAC的用法

Oracle中RAC的用法:1、通过在多个服务器上运行数据库实例来提供高可用性;2、允许在需要时增加或减少节点数量;3、通过将工作负载分布到多个节点上来实现负载均衡;4、使用共享存储来实现多个节点之间的数据共享;5、允许多个节点同时处理数据库请求,从而实现并行处理;6、提供了透明故障切换功能;7、使用了一些技术来确保数据的一致性;8、提供了管理工具来简化RAC环境的管理和维护。本专题还提供RAC相关的其他文章,大家可以免费阅读。

450

2023.09.19

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.1万人学习

C# 教程
C# 教程

共94课时 | 10.7万人学习

Java 教程
Java 教程

共578课时 | 77.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号