Jvm

JVM 中的参数前缀

1、概览 Java 虚拟机(JVM)是驱动 Java 应用的核心引擎,负责执行编译后的 .class 文件,并通过即时编译(JIT)和垃圾回收(GC)等技术管理内存并提升性能。 JVM 具有高度灵活性,通过特定参数可轻松调整其行为以提升性能、排查问题或启用实验性功能。本文将带你了解用于配置 JVM 的不同参数前缀。 2、JVM 参数是什么? JVM 参数是能改变虚拟机行为的特殊命令行选项,用于控制内存设置、性能调优、调试监控开关、垃圾回收配置及实验性功能。 启动 JVM 时可通过以下方式指定这些参数: java -Xmx512m -Denv=prod -verbose:gc -XX:+UseG1GC -jar App.jar 上述命令中使用了多种参数前缀,每个前缀标识了不同的配置类型。 -Xmx512m - 设置最大堆内存为 512 MB(非标准参数) -Denv=prod - 定义名为 env、值为 prod 的系统属性(System Property) -verbose:gc - 启用垃圾回收日志记录(标准参数) -XX:+UseG1GC - 指定 JVM 使用 G1 垃圾回收器(高级参数) 下面详细解析各类参数前缀的作用。 3、不同的 JVM 参数前缀 3.1、System Properties (-D) 系统属性(System Properties)通常用于配置 JVM 特定参数,如文件编码、用户目录、JVM 版本等 Java 相关配置。 通过 -D 命令行参数可定义键值对形式的系统属性,例如: java -Denv=prod -jar App.jar 在 -D 参数前缀中,字母 D 代表 Define(定义)。Java 为避免歧义未使用其他字母,该前缀简短、直观且易记忆,明确表示正在定义属性。

JVM 中的高级选项

1、概览 Java 虚拟机(JVM)是驱动 Java 应用程序的强大引擎。它具有高度可定制性,通过标准选项提供基本配置,通过非标准选项进行一般性性能调优,以及通过高级选项实现精确控制。 高级选项允许开发人员对性能进行微调,诊断问题,并尝试最前沿的功能。 本文将带你了解最著名的高级 JVM 选项以及如何使用它们,从而对 JVM 行为进行更精细的控制。 2、JVM 选项的分类 JVM 参数可分为三大类: 标准选项(-version、-help) 非标准选项(-X: options) 高级选项(-XX: options) 3、理解高级 JVM 选项 高级选项不仅限于基本配置,还可以设置 JVM 的更低级属性。这些选项允许我们调整性能关键参数,如垃圾回收、内存管理和运行时诊断。 其中一些高级选项也是常用的最重要的 JVM 参数。不过,由于它们可以针对特定应用场景进行微调,我们必须谨慎使用。在不清楚应用程序行为的情况下过度定制,可能会导致性能低下、崩溃或意外行为。 此外,高级 JVM 选项并不能保证为所有 JVM 实现所支持,而且可能会发生变化。因此,由于这些选项会随着 JVM 的更新而变化,有些选项可能会过时,或者在较新版本中表现不同。 例如,Java 并发标记和清理垃圾收集(CMS)算法就曾出现过这种情况,该算法在 Java 9 中被弃用,并在 Java 14 中被删除。通过关注官方文档,我们可以在发生任何变化之前及时了解情况。 4、垃圾收集调整 垃圾回收对内存管理至关重要,但也会带来影响性能的停顿。高级选项可控制垃圾回收行为,确保应用程序运行更流畅。 从 Java 9 开始,默认情况下使用垃圾优先的垃圾收集器(G1),旨在平衡吞吐量和延迟。 为了克服 G1 的延迟限制,JDK12 引入了 Shenandoah GC,可以使用 -XX:+UseShenandoahGC 选项启用它。Shenandoah 的可用性取决于 JDK 供应商和版本。 还可以根据专门的工作负载使用其他实现方式。Epsilon 垃圾收集器也非常适合用于性能调优,以检查垃圾收集是否会影响我们程序的性能。 5、内存管理 如上所述,垃圾回收是内存管理的重要组成部分,但它只是 JVM 中更大的内存管理生态系统的一部分。 要实现最佳性能,同样重要的是配置内存分配、管理堆大小以及了解堆外内存的工作原理,特别是对于内存密集型应用或有特定性能要求的系统。 回顾一下与内存管理相关的一些高级 JVM 选项: