原文地址:https://blog.codecentric.de/en/2012/07/useful-jvm-flags-part-3-printing-all-xx-flags-and-their-values/

译者李洪柱     校对:方腾飞

本篇文章基于Java 6(update 21oder 21之后)版本, HotSpot JVM 提供给了两个新的参数,在JVM启动后,在命令行中可以输出所有XX参数和值。

-XX:+PrintFlagsFinal and -XX:+PrintFlagsInitial

让我们现在就了解一下新参数的输出。以 -client 作为参数的 -XX:+PrintFlagsFinal   的结果是一个按字母排序的590个参数表格(注意,每个release版本参数的数量会不一样)

$ java -client -XX:+PrintFlagsFinal Benchmark
[Global flags]
uintx AdaptivePermSizeWeight               = 20               {product}
uintx AdaptiveSizeDecrementScaleFactor     = 4                {product}
uintx AdaptiveSizeMajorGCDecayTimeScale    = 10               {product}
uintx AdaptiveSizePausePolicy              = 0                {product}[...]
uintx YoungGenerationSizeSupplementDecay   = 8                {product}
uintx YoungPLABSize                        = 4096             {product}bool ZeroTLAB                             = false            {product}intx hashCode                             = 0                {product}

(校对注:你可以尝试在命令行输入上面的命令,亲自实现下)

表格的每一行包括五列,来表示一个XX参数。第一列表示参数的数据类型,第二列是名称,第四列为值,第五列是参数的类别。第三列”=”表示第四列是参数的默认值,而”:=” 表明了参数被用户或者JVM赋值了。

注意对于这个例子我只是用了Benchmark类,因为这个系列前面的章节也是用的这个类。甚至没有一个主类的情况下你能得到相同的输出,通过运行java 带另外的参数 -version.现在让我们检查下 server VM提供了多少个参数。我们也能指定参数-XX:+UnlockExperimentalVMOptions 和-XX:+UnlockDiagnosticVMOptions ;来解锁任何额外的隐藏参数。

$ java -server -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal Benchmark

724个参数,让我们看一眼那些已经被赋值的参数。

$ java -server -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal Benchmark | grep ":"
uintx InitialHeapSize                     := 57505088         {product}
uintx MaxHeapSize                         := 920649728        {product}
uintx ParallelGCThreads                   := 4                {product}bool PrintFlagsFinal                     := true             {product}bool UseParallelGC                       := true             {product}

(校对注:这个命令非常有用)我们仅设置一个自己的参数 -XX:+PrintFlagsFinal。其他参数通过server VM基于系统设置的,以便以合适的堆大小和GC设置运行。

如果我们只想看下所有XX参数的默认值,能够用一个相关的参数,-XX:+PrintFlagsInitial  。 用 -XX:+PrintFlagsInitial, 只是展示了第三列为“=”的数据(也包括那些被设置其他值的参数)。

然而,注意当与-XX:+PrintFlagsFinal 对比的时候,一些参数会丢失,大概因为这些参数是动态创建的。

研究表格的内容是很有意思的,通过比较client和server VM的行为,很明显了解哪些参数会影响其他的参数。有兴趣的读者,可以看一下这篇不错文章Inspecting HotSpot JVM Options。这个文章主要解释了第五列的参数类别。

-XX:+PrintCommandLineFlags

让我们看下另外一个参数,事实上这个参数非常有用: -XX:+PrintCommandLineFlags。这个参数让JVM打印出那些已经被用户或者JVM设置过的详细的XX参数的名称和值。

换句话说,它列举出 -XX:+PrintFlagsFinal的结果中第三列有":="的参数。以这种方式,我们可以用-XX:+PrintCommandLineFlags作为快捷方式来查看修改过的参数。看下面的例子。

$ java -server -XX:+PrintCommandLineFlags Benchmark
 -XX:InitialHeapSize=57505088 -XX:MaxHeapSize=920081408 -XX:ParallelGCThreads=4 -XX:+PrintCommandLineFlags -XX:+UseParallelGC

现在如果我们每次启动java 程序的时候设置 -XX:+PrintCommandLineFlags 并且输出到日志文件上,这样会记录下我们设置的JVM 参数对应用程序性能的影响。类似于 -showversion(见 Part1),我建议 –XX:+PrintCommandLineFlags 这个参数应该总是设置在JVM启动的配置项里。因为你从不知道你什么时候会需要这些信息。

奇怪的是在这个例子中,通过 -XX:+PrintCommandLineFlags 列出堆的最大值会比通过-XX:+PrintFlagsFinal列举出的相应值小一点。如果谁知道两者之间不同的原因,请告诉我。

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: JVM实用参数(三)打印所有XX参数及值

JVM实用参数(三)打印所有XX参数及值相关推荐

  1. JVM底层原理之标配参数、X和XX参数

    一.JVM的参数类型 (1)标配参数(以-开头)    java -version java -help java -showversion 在JDK各个版本之间稳定,很少有大的变化.   [标准VM ...

  2. JVM运行参数之-X和-XX参数

    -X参数 JVM的-X参数是非标准参数,在不同版本的jvm中,参数可能会有所不同,可以通过java -X查看非标准参数. C:\Users\zjq>java -X-Xmixed 混合模式执行 ( ...

  3. java 参数三点,java函数参数类型后添加三点的用法

    类型后面三个点(String...),是从Java 5开始,Java语言对方法参数支持一种新写法,叫可变长度参数列表,其语法就是类型后跟...,表示此处接受的参数为0到多个Object类型的对象,或者 ...

  4. JVM调优:打印所有-XX非标参数命令

  5. 打印JVM所有参数列表的方法 -XX:PrintFlagsFinal、–XX:PrintCommandLineFlags

    1.–XX:PrintFlagsFinal 在JVM启动后,在命令行中输入命令java –XX:+PrintFlagsFinal -version可以输出按字母排序的所有XX参数和值的表格. 注:不同 ...

  6. JVM之XX参数详解

    JVM的XX参数详解 目录 标准参数 X参数(了解) XX参数(重点) -Xms,-Xmx是X参数还是XX参数,如何解释? 1. 标准参数 指每个版本都不会大发生改变的参数 测试命令: 2. X参数( ...

  7. JVM实用参数(八)GC日志

    原文地址:https://blog.codecentric.de/en/2014/01/useful-jvm-flags-part-8-gc-logging/ 作者:PATRICK PESCHLOW, ...

  8. JVM实用参数(二)参数分类和即时(JIT)编译器诊断

    作者: PATRICK PESCHLOW     原文地址    译者:赵峰 校对:许巧辉 在这个系列的第二部分,我来介绍一下HotSpot JVM提供的不同类别的参数.我同样会讨论一些关于JIT编译 ...

  9. JVM实用参数 GC日志

    为什么80%的码农都做不了架构师?>>>    原文章地址:http://blog.panaihua.com/archives/151 GC日志是一个很重要的工具,它准确记录了每一次 ...

最新文章

  1. 周立功:专注的力量成就梦想
  2. 独占设备的分配和回收模拟_系统设计硬核知识(4)——操作系统的设备管理...
  3. 什么是时间管理,一个大四学生的简单理解
  4. 布朗大学和FAIR开源LA-MCTS,及其在神经网络结构搜索的应用
  5. ELK学习2_用Kibana和logstash快速搭建实时日志查询、收集与分析系统
  6. Angular里的style property binding的一个例子
  7. 过期时间_2020年最新航空里程过期时间及避免过期方法总结
  8. 震惊!快速幂怎么编?省一说暴力,银牌说递归,国集听完笑了
  9. 基于Token的身份验证——JWT
  10. JavaEE编码规范
  11. Node.js设置CORS跨域请求中多域名白名单的方法
  12. BitHacks--位操作技巧
  13. UOJ291 BZOJ4785 ZJOI2017树状数组
  14. easypoi中excel注解开关_easypoi: 入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法...
  15. 【颜色识别】【Python+OpenCV】KNN(K近邻算法)实现魔方颜色识别【 3-1】
  16. 如何快速输出产品的用户故事地图
  17. 中易云 易云系统 电镀废水处理远程监控解决方案
  18. linux中date命令详解,linux中date命令的详细解释
  19. JVM面试题(含答案和图和解释)
  20. java应届生如何找工作?

热门文章

  1. “你的手机上未安装应用程序”的解决方案
  2. js代码计算济南出租车打车费用
  3. python发红包问题_一个关于红包的问题引发的python算法初体验
  4. php100视频教程2012,PHP100视频教程2012新版
  5. 搜狗浏览器智慧版_奥维互动地图浏览器下载_奥维互动地图浏览器64位版v7.1.2
  6. mysql微服务查询问题_微服务架构下,Mysql读写分离后,数据库CPU飙升卡壳问题解析...
  7. java中properties作用,java中Properties有什么用,举例说明?
  8. python excel详解_python操作excel详解
  9. el-drawer点击的时候为什么有边框_80%人都有的表格强迫症怎么破,一招教你自动添加表格边框...
  10. mysql子查询的方式_分布式系统中一种迭代处理MYSQL子查询的方法