专业的JAVA编程教程与资源

网站首页 > java教程 正文

JVM 性能调优,实现高吞吐量和低延迟

temp10 2025-07-03 19:19:01 java教程 3 ℃ 0 评论
ENTRYPOINT [
  "java",
  "-Xss256k",
  "-Xms1g",
  "-Xmx4g",
  "-XX:+UseZGC",
  "-XX:+UseStringDeduplication",
  "-XX:+ZGenerational",
  "-XX:SoftMaxHeapSize=4g",
  "-XX:+ClassUnloadingWithConcurrentMark",
  "-XX:+UseNUMA",
  "-XX:ConcGCThreads=4",
  "-XX:+ZUncommit",
  "-XX:+AlwaysPreTouch",
  "-XX:MaxGCPauseMillis=100",
  "-XX:+UseLargePages",
  "-XX:+UseTransparentHugePages",
  "org.springframework.boot.loader.launch.JarLauncher"
]

-Xss256k

  • Java 中的此-Xss选项用于设置 Java 虚拟机 (JVM) 中每个线程的线程堆栈大小。该-Xss256k选项具体将线程堆栈大小设置为 256 千字节 (KB)。此值在调整 Java 应用程序时非常有用,尤其是在多线程场景中。
  • 优点: 在高度并发的应用程序中,例如处理许多同时请求的服务器(例如,Web 服务器、消息代理等),减少线程堆栈大小可以通过允许创建更多线程而不会达到内存限制来帮助防止内存耗尽。

-Xms<Size>g

  • Java 中的 JVM选项-Xms指定应用程序启动时 JVM 的初始堆大小。
  • 优点:大型 Web 应用程序、数据处理系统或内存数据库可能会受益于初始的大堆分配,以满足其内存需求,而无需在启动期间不断调整堆大小。

-Xmx<MaxSize>g

  • Java 中的 JVM选项-Xmx设置了 JVM 的最大堆大小。最大大小可能是 RAM 的 90%。
  • 优点:
  • 避免内存不足错误
  • 优化 GC 性能
  • 优化内存密集型应用程序(内存数据库、缓存等)
  • 避免频繁调整堆大小
  • 提高多线程应用程序的性能

-XX:+UseZGC

  • Java 中的此-XX:+UseZGC选项可在 JVM 中启用 ZGC。ZGC 是一种低延迟垃圾收集器,旨在最大限度地减少垃圾收集期间的停顿时间,即使对于运行非常大堆(高达 TB 级内存)的应用程序也是如此。
  • 优点:低延迟 GC大堆的可扩展性并发和增量 GC适用于容器化和云原生环境即使在 Full GC 期间,暂停时间也很短更适合多核系统。

-XX:+ZGenerational

  • 在 Java 中,此-XX:+ZGenerational选项用于为 ZGC 启用分代模式。默认情况下,ZGC 以非分代垃圾收集器的方式运行,这意味着它在执行垃圾收集时将整个堆视为一个统一的区域。
  • 优点:提高具有许多短期对象的应用程序的性能通过单独收集年轻代来减少 GC 暂停时间改进堆管理降低完整 GC 的成本。

使用-XX:+ZGenerational此功能可在 ZGC 中启用分代垃圾收集,通过将长生命周期对象和短生命周期对象隔离到堆的不同区域,可以提高混合使用应用程序的性能。这可以改善内存管理,减少暂停时间,并提高可扩展性,尤其适用于处理大量数据的大型应用程序。

-XX:SoftMaxHeapSize=<Size>g

  • JVM选项-XX:SoftMaxHeapSize用于设置 Java 应用程序最大堆大小的软限制。使用 时-XX:SoftMaxHeapSize=4g,即指示 JVM 在正常情况下将堆大小控制在不超过 4 GB 的范围内,但必要时 JVM 可以超出此限制。
  • 优点:灵活的内存管理处理内存激增而不会崩溃适用于容器化或云环境性能调优和资源优化防止过度使用内存。

-XX:+UseStringDeduplication

  • Java 中的此-XX:+UseStringDeduplication选项可将字符串去重功能作为垃圾回收过程的一部分。字符串去重是一种技术,它允许 JVM 识别并移除内存中重复的字符串字面值或相同的字符串对象,即使字符串值在应用程序中出现多次,也只需存储一份副本,从而有效减少内存占用。
  • 优点:减少重复字符串的内存使用量优化包含大量字符串的大型应用程序中的内存适用于内部字符串帮助处理大量文本数据以最低配置自动删除重复数据。

使用此-XX:+UseStringDeduplication标志可以有效优化 Java 应用程序的内存使用情况,尤其是那些处理大量重复字符串值的应用程序。启用重复数据删除功能后,JVM 可以消除堆中字符串的冗余副本,从而显著节省内存,并提升内存密集型应用程序的性能。

JVM 性能调优,实现高吞吐量和低延迟

-XX:+ClassUnloadingWithConcurrentMark

  • Java 中的此-XX:+ClassUnloadingWithConcurrentMark选项用于在垃圾收集的并发标记阶段启用并发卸载类。此选项在运行动态加载和卸载类的应用程序时特别有用,例如应用服务器(例如 Tomcat、Jetty)、框架或依赖于热交换或动态类加载的系统。
  • 优点:减少 GC 暂停时间改进长期应用程序的内存管理更好的服务器和容器可扩展性热插拔和框架。

-XX:+UseNUMA

  • -XX:+UseNUMA JVM选项用于针对采用非统一内存访问 (NUMA) 架构的系统优化 JVM。NUMA 是一种用于多处理器系统的内存设计,其中每个处理器都有自己的本地内存,但也可以访问其他处理器的内存,尽管延迟较高。该-XX:+UseNUMA选项使 JVM 能够优化基于 NUMA 的系统上的内存分配和垃圾回收,从而提高性能。
  • 优点:改善内存访问延迟和性能更高的 GC 效率优化内存分配多插槽系统上更好的可扩展性。

什么是NUMA?

在 NUMA 系统中,处理器连接到本地内存,每个处理器访问自身本地内存的速度都比访问连接到其他处理器的内存的速度更快。与所有处理器访问所有内存的时间相同的统一内存访问 (UMA) 系统不同,NUMA 系统由于本地内存和远程内存的延迟不同,因此内存访问不对称。

NUMA 架构通常用于具有多个处理器(或插槽)的大型服务器,通过确保尽可能在本地访问内存可以提高性能。

-XX:+UseNUMA 起什么作用?

启用此-XX:+UseNUMA选项后,JVM 将配置为根据系统的 NUMA 拓扑来优化内存访问。具体来说,JVM 将:

  • 从与执行给定任务的处理器关联的本地 NUMA 节点分配内存(只要有可能)。
  • 使线程本地内存靠近运行线程的处理器,以减少内存访问延迟。
  • 通过优化 JVM 跨多个 NUMA 节点管理堆和其他内存资源的方式来提高垃圾收集性能。

-XX:ConcGCThreads=<size>

  • Java 中的选项-XX:ConcGCThreads允许您控制 JVM 在垃圾收集的并发阶段使用的并发 GC 线程数。
  • 优点:控制 GC 的并行度最大限度地减少垃圾收集暂停时间根据硬件资源优化性能提高多线程应用程序的吞吐量。

-XX:ConcGCThreads 起什么作用?

当 JVM 执行垃圾回收时,某些收集器(例如 G1 GC 或 ZGC)可以并发执行垃圾回收的各个阶段,这意味着它们与应用程序线程并行运行,以最大限度地减少暂停时间并提高吞吐量。此-XX:ConcGCThreads选项允许您指定 JVM 在这些并发 GC 阶段应使用的线程数。

-XX:+ZUncommit

  • JVM选项-XX:+ZUncommit用于控制 ZGC 中的内存管理行为,具体涉及 JVM 在为堆分配内存后如何从操作系统释放(或取消提交)内存。
  • 优点:减少内存占用低内存环境中的动态内存回收避免内存碎片优化 GC 开销。

-XX:+AlwaysPreTouch

  • JVM选项-XX:+AlwaysPreTouch用于预先接触 JVM 将用于其堆的内存页面,这意味着 JVM 将在分配堆后立即接触每个内存页面(即访问它),而不是在实际需要时才懒惰地接触页面。
  • 优点:减少应用程序运行时的延迟防止初始执行期间出现操作系统页面错误在大型堆应用程序中预加载虚拟内存提高多核系统中的内存分配效率避免启动期间的内存交换。

-XX:MaxGCPauseMillis=<size>

  • Java 中的选项-XX:MaxGCPauseMillis用于设置 GC 期间可接受的最大暂停时间目标。指定 时-XX:MaxGCPauseMillis=100,即指示 JVM 的垃圾收集器将 GC 暂停时间目标设定为 100 毫秒。
  • 优点:最大限度地减少应用程序延迟控制和平衡吞吐量与暂停时间针对交互式或高通量系统进行了优化G1 GC 中的垃圾收集调整改善 Web 和服务器应用程序中的用户体验与 ZGC 和其他低延迟垃圾收集器一起使用。

-XX:+UseLargePages

  • JVM选项-XX:+UseLargePages用于使 JVM 能够将大内存页面(也称为大页面或超级页面)用于 Java 堆和内存的其他部分,例如元空间和 JIT(Just-In-Time)编译缓存。
  • 优点:提高内存访问性能减少操作系统开销为内存密集型应用程序提供更好的性能降低内存碎片减少内存分页活动。

-XX:+UseLargePages 起什么作用?

操作系统通常以页面为单位管理内存,页面是内存分配和管理的基本单位。在许多系统中,内存页面的大小通常默认为 4 KB,但某些系统支持更大的页面大小,通常为 2 MB(在 x86-64 Linux 和 Windows 系统上),对于某些处理器和配置,甚至为 1 GB。

-XX:+UseTransparentHugePages

  • JVM选项-XX:+UseTransparentHugePages支持使用透明大页面 (THP) 在 Java 虚拟机 (JVM) 中进行内存管理。透明大页面是一项 Linux 内核功能,旨在自动管理大内存页面,从而提升内存密集型应用程序的性能。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表