知识大全 JVM 命令行标志您不知道的5件事

Posted 标志

篇首语:逆水行舟用力撑,一篙松劲退千寻。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JVM 命令行标志您不知道的5件事相关的知识,希望对你有一定的参考价值。

JVM 命令行标志您不知道的5件事  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  JVM 是多数开发人员视为理所当然的 Java 功能和性能背后的重负荷机器 然而 我们很少有人能理解 JVM 是如何进行工作的 — 像任务分配和垃圾收集 转动线程 打开和关闭文件 中断和/或 JIT 编译 Java 字节码 等等 不熟悉 JVM 将不仅会影响应用程序性能 而且当 JVM 出问题时 尝试修复也会很困难 本文将介绍一些命令行标志 您可以使用它们来诊断和调优您的 Java 虚拟机性能   DisableExplicitGC  我已记不清有多少次用户要求我就应用程序性能问题提供咨询了 其实只要跨代码快速运行 grep 就会发现清单 所示的问题 — 原始 java 性能反模式   清单 System gc();   显式垃圾收集是一个非常糟糕的主意 — 就像将您和一个疯狂的斗牛犬锁在一个电话亭里 尽管调用的语法是依赖实现的 但如果您的 JVM 正在运行一个分代的垃圾回收器(大多数是)System gc(); 强迫 VM 执行一个堆的 全部清扫 虽然有的没有必要 全部清扫比一个常规 GC 操作要昂贵好几个数量级 这只是个简单数学问题   您可以不把我的话放在心上 — Sun 的工程师为这个特殊的人工错误提供一个 JVM 标志; XX:+DisableExplicitGC 标志自动将 System gc() 调用转换成一个空操作 为您提供运行代码的机会 您自己看看 System gc() 对于整个 JVM 执行有害还是有利    HeapDumpOnOutOfMemoryError  您有没有经历过这样的情况 JVM 不能使用 不断抛出 OutOfMemoryError 而您又不能为自己创建调试器来捕获它或查看出现了什么问题?像这类偶发和/或不确定的问题 通常使开发人员发疯   买者自负并不是任何 VM 都支持所有命令行标志 Sun/Oracle 的 VM 除外 查明一个标志是否被支持的最好方法是试用它 看它是否正常工作 倘若这些标志在技术上是不支持的 那么 使用它们您要承担全部责任 如果这些标志中的任何一个使您的代码 您的数据 您的服务器或您的一切消失得无影无踪 我 Sun/Oracle 和 IBM? 都将不负责任 为以防万一 建议先在虚拟(非常生产)环境中实验   在这个时刻您想要的是 在 JVM 消亡之际捕获堆的一个快照 — 正好 XX:+HeapDumpOnOutOfMemoryError 命令可以完成这一操作   运行该命令通知 JVM 拍摄一个 堆转储快照 并将其保存在一个文件中以便处理 通常使用 jhat 实用工具 您可以使用相应的 XX:HeapDumpPath 标志指定到保存文件的实际路径 (不管文件保存在哪 务必确保文件系统和/或 Java 流程必须要有权限配置 可以在其中写入 )

   bootclasspath  定期将一个类放入类路径是很有帮助的 这类路径与库存 JRE 附带的类路径或者以某种方式扩展的 JRE 类路径略有不同 (新 Java Crypto API 提供商就是一个例子) 如果您想要扩展 JRE 那么您定制的实现必须可以使用引导程序 ClassLoader 该引导程序可以加载 rt jar 中的 java lang Object 及其所有相关文件   尽管您可以 非法打开 rt jar 并将您的定制实现或新数据包移入其中 但从技术上您就违反了您下载 JDK 时同意的协议了   相反 使用 JVM 自己的 Xbootclasspath 选项 以及皮肤 Xbootclasspath/p 和 Xbootclasspath/a    Xbootclasspath 使您可以设置完整的引导类路径(这通常包括一个对 rt jar 的引用) 以及一些其他 JDK 附带的(不是 rt jar 的一部分)JAR 文件 Xbootclasspath/p 将值前置到现有 bootclasspath 中 并将 Xbootclasspath/a 附加到其中   例如 如果您修改了库中的 java lang Integer 并将修改放在一个子路径 mods 下 那么 Xbootclasspath/a mods 参数将新 Integer 放在默认的参数前面   verbose  对于虚拟的或任何类型的 Java 应用程序 verbose 是一个很有用的一级诊断使用程序 该标志有三个子标志 gc class 和 jni   开发人员尝试寻找是否 JVM 垃圾收集器发生故障或者导致性能低下 通常首先要做的就是执行 gc 不幸的是 解释 gc 输出很麻烦 — 足够写一本书 更糟糕的是 在命令行中打印的输出在不同的 Java 版本中或者不在不同的 JVM 中会发生改变 这使得正确解释变得更难   一般来说 如果垃圾收集器是一个分代收集器(多数 企业级 VMs 都是) 某种虚拟标志将会出现 来指出一个全部清扫 GC 通路;在 Sun JVM 中 标志在 GC 输出行的开始以 [Full GC ] 形式出现   想要诊断 ClassLoader 和/或不匹配的类冲突 class 可以帮上大忙 它不仅报告类何时加载 还报告类从何处加载 包括到 JAR 的路径(如果来自 JAR)   jni 很少使用 除了使用 JNI 或本地库时 打开时 它将报告各种 JNI 事件 比如 本地库何时加载 方法何时弹回;再一次强调 在不同 JVM 版本中 输出会发生变化   Command line X  我列出了 JVM 中提供的我喜欢的命令行选项 但是还有一些更多的需要您自己发现 运行命令行参数 X 列出 JVM 提供的所有非标准(但大部分都是安全的)参数 — 例如    Xint 在解释模式下运行 JVM(对于测试 JIT 编译器实际上是否对您的代码起作用或者验证是否 JIT 编译器中有一个 bug 这都很有用)    Xloggc: 和 verbose:gc 做同样的事 但是记录一个文件而不输出到命令行窗口   JVM 命令行选项时常发生变化 因此 定期查看是一个好主意 甚至 您深夜盯着监控器和下午 点回家和妻子孩子吃顿晚饭 (或者在 Mass Effect 中消灭您的敌人 根据您的喜好) 它们都是不一样的   结束语  在生产环境中 命令行标志不是为永久使用而设计的 — 事实上 除了您终止用来调优 JVM 垃圾收集器的标志 没有一个非标准命令行标记是专用于生产使用的 但是 作为工具来刺探在其他方面完全不透明的虚拟机的内部工作 是非常有用的 cha138/Article/program/Java/hx/201311/25594

相关参考

知识大全 关于jvm的内存限制的问题的解决办法

  jdk编译器对内存的支持不同client状态和server状态不同后者支持更大些操作系统不同也存在不同位操作系统就比位操作系统大  测试方法在命令行下用javaXmxXXXXMversion命令来

知识大全 轻松处理命令行参数

  轻松处理命令行参数        作者翻译Java研究组织-公飞    TuesdayApril:PM    你能够轻松地使用java标准的传递标志的方式获得一个简单且功能强大的命令行应用事实上传

知识大全 命令行参数

  我们把main成员函数的参数args称为命令行参数args可以用来接收外界传给Java应用程序的参数下面我们举一个例子来看看参数传递的具体过程  classdoRect      publicst

知识大全 命令行参数

SQL*Loader详细使用教程:命令行参数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  输入

知识大全 dos命令行中cd命令用法

显示当前目录名或改变当前目录CHDIR[/D][drive:][path]CHDIR[]CD[/D][drive:][path]CD[]指定要改成父目录键入CDdrive:显示指定驱动器中的当前目录不

知识大全 cmd命令行模式

  Oracle数据导入导出imp/exp就相当于oracle数据还原与备份exp命令可以把数据从远程数据库服务器导出到本地的dmp文件imp命令可以把dmp文件从本地导入到远处的数据库服务器中利用这

知识大全 PowerBuilder命令行编译详解[2]

PowerBuilder命令行编译详解[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这里

知识大全 PowerBuilder命令行编译详解[1]

PowerBuilder命令行编译详解[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  公司

知识大全 利用.NET Framework命令行工具

利用.NETFramework命令行工具  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Visu

知识大全 利用 .NET Framework 命令行工具

利用.NETFramework命令行工具  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Visu