面向Java开发人员的JVM参数指南

JVM 11 的优化指南:如何进行JVM调优,JVM调优参数有哪些 在实际的Java应用开发中,JVM(Java Virtual Machine)调优是提升应用性能的关键步骤。合理的调优可以显著提升应用的响应速度、吞吐量,并且减少内存消耗和GC(Garbage Collection)停顿时间。本文将详细介绍JVM 11的优化指南,包含如何进行JVM调优以及常见的JVM调优参数,并提供3个实用的代码示例。 阅读详情

通过理解和使用JVM和JVM参数,开发人员和最终用户都可以诊断故障并改进Java应用程序的性能。

当你编写源代码时,你是在编写供人类阅读的代码。在代码被编译成机器语言之前,计算机不能执行源代码。机器语言是一个通用术语,指的是特定机器所需的任意数量的语言。通常,如果在Linux上编译代码,它就在Linux上运行,如果在Windows上编译代码,它就在Windows上运行,以此类推。然而,Java是不同的。它并不以某种真正的机器为目标。它的目标是Java虚拟机(JVM),因此它可以在任何机器上运行。

Java源代码被编译成字节码,由安装在计算机上的JVM运行。JVM是一个执行引擎,但它不是一个你通常直接与之交互的引擎。它安静地运行,处理Java字节码。大多数人不需要考虑甚至不需要了解JVM,但是了解JVM的工作原理对调试和优化Java代码是很有用的。例如:

  • 生产环境中,你可能会发现已部署的应用程序需要性能提升。
  • 如果编写的应用程序出现问题,开发人员和最终用户都可以选择调试该问题。
  • 你是否希望了解用于开发或运行Java应用程序的Java开发工具包(JDK)的详细信息,可以通过查询JVM获得这些详细信息

本文介绍了一些基本的JVM参数,希望可以在这些场景中提供帮助……

image.png

JVM、JDK和JRE之间的区别是什么?

Java有很多J首字母缩略词,包括JVM、JDK和JRE。

  • Java开发者工具包(JDK)可供需要在代码中使用开发库的程序员使用。
  • Java运行时环境(JRE)是由想要运行Java应用程序的人所使用的。
  • Java虚拟机(JVM)是运行Java字节码的组件。

JDK包含JRE和JVM,但是一些Java发行版提供了包含JRE(包括JVM)的替代下载。

image.png

Java是开源的,所以会有不同的公司构建和发行不同版本的JDK。你可以在系统上安装多个JDK,当你正在处理或使用不同的Java项目(其中一些可能使用旧的JDK)时,这会很有帮助。

要列出Linux系统上的JDK,你可以使用alternatives命令:

复制

$ alternatives --config java

There are 2 programs that provide java.

Selection Command


*+ 1 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-2.fc35.x86_64/bin/java)

2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.fc35.x86_64/jre/bin/java)

Enter to keep the current selection[+], or type selection number:

要在可用的JDK之间切换,请再次执行以下命令:

复制

$ sudo alternatives --config java

另一个选择是使用SDKMan,它可以帮助你下载、更新和管理系统上的JDK。

什么是JVM调优?

JVM调优是调整JVM参数以提高Java应用程序性能的过程。它还有助于诊断应用程序故障。

一般来说,在调优之前考虑这些要点是很重要的:

  • 成本:有时候,改进运行代码的硬件可以提高应用程序的性能。这似乎是一种“欺骗”,但请考虑你愿意花多少时间来调优JVM参数。有时,应用程序需要更多的内存来执行所需的操作,任何软件优化都无法改变这一点。
  • 预期结果:长期来看,稳定比性能更重要。如果调优影响稳定性,那么明智地选择调优参数可能会更好。
  • 底层问题:有时,问题可能是主机操作系统的底层问题。在调优JVM之前,请确保JVM的平台按预期工作。
  • 内存泄漏:如果你发现自己在使用垃圾收集(GC)调优参数,那么可能存在需要在应用程序代码中修复的内存泄漏。

JVM参数类型

JVM参数分为三类:标准参数、非标准参数和高级选项。

标准参数

所有JVM实现都支持标准参数。在终端中运行’java’命令查看标准参数列表。

复制

$ java

Usage: java [options] [args…]

To specify an argument for a long option, you can use –= or

– .

这些都是包含在任意JVM中的标准参数,你可以在使用任何命令行选项时安全地使用它们。例如,为了验证配置的命令参数,创建一个VM并在不执行主类的情况下加载一个主类,使用以下命令:

复制

$ java --dry-run

非标准参数

非标准参数以-X开头。它们用于通用用途,并且特定于JVM的特定实现。列出这些选项:

复制

$ java -X

-Xbatch disable background compilation

-Xbootclasspath/a:<directories and zip/jar files separated by :>

append to end of bootstrap class path

-Xinternalversion

displays more detailed JVM version information than the

-version option

-Xloggc: log GC status to a file with time stamps

[…]

这些额外的参数可以在没有通知的情况下更改,并且不是所有的JVM实现都支持这些参数。由Microsoft构建的JVM可能与由Red Hat构建的JVM有不同的参数,等等。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

要获取详细的JVM版本信息,请使用以下命令:

复制

$ java -Xinternalversion --version

OpenJDK 64-Bit Server VM (11.0.13+8) for linux-amd64 JRE (11.0.13+8), built on Nov 8 2021 00:00:00 by “mockbuild” with gcc 11.2.1 20210728 (Red Hat 11.2.1-1)

要获取属性设置,请使用:

复制

java -XshowSettings:properties --version

高级选项

这些选项不是临时使用的,而是用于调整Hotspot VM的特定区域。这些参数可能会发生变化,并且不能保证所有JVM实现都会支持它。

这些参数以-XX开头。要列出这些参数,请使用以下命令:

复制

$ java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version

例如,要跟踪类的加载,可以使用下面的命令:

复制

$ java -XX:+TraceClassLoading Hello

Hello.java如下:

复制

$ cat Hello. java

public class Hello {

}

你可能面临的另一个常见问题是OOM(内存不足)错误,这可能在没有太多调试信息的情况下发生。要解决这样的问题,你可以使用调试选项 -XX:+HeapDumpOnOutOfMemoryError,它会创建一个包含调试信息的.hprof文件。

复制

$ cat TestClass. java

import java.util.ArrayList;

import java.util.List;

public class TestClass {

}

$ Javac TestClass.java

$ java -XX:+HeapDumpOnOutOfMemoryError -Xms10m -Xmx1g TestClass

java.lang.OutOfMemoryError: java heap space

Dumping heap to java_pid444496.hprof …

Heap dump file created [1018925828 bytes in 1.442 secs]

Exception in thread “main” java.lang.OutOfMemoryError: java heap space

at TestClass.main(TestClass.Java:8)

有一些工具可以查看这个.hprof文件,以了解哪里出了问题。

结语

通过理解和使用JVM和JVM参数,开发人员和最终用户都可以诊断故障并改进Java应用程序的性能。下次使用Java时,可以花些时间看看可供选择的选项。

JVM 21 的优化指南:如何进行JVM调优,JVM调优参数有哪些 这篇文章将详细介绍如何进行JVM 21调优,包括JVM 21调优参数及其应用。此外,我将提供12个实用的代码示例,每个示例都会结合和Java代码。本文已收录于,我的技术网站,有大厂完整,工作技术,架构师成长之路,等经验分享随着JVM版本的不断更新,JVM 21 在性能和功能上都带来了显著的提升。合理的JVM调优不仅可以提高应用程序的性能,还能显著减少内存消耗和GC(垃圾回收)停顿时间。本文将详细介绍JVM 21 的优化指南,包含如何进行JVM调优以及常见的JVM调优参数,并提供3个实用的代码示例。 阅读详情

相关推荐

深入JVM(二)|启动参数设置、Java命令、JVM调优

深入JVM(二)|启动参数设置、Java命令、JVM调优四、JVM的启动参数设置(一)标准参数(二)非标准参数(三)非stable参数(非静态参数)五、Java命令(一) jps:显示当前所有Java进程pid的命令(二) jinfo:实时查看和调整虚拟机参数(三) jstat:监控虚拟机各种运行状态信息(四) jmap:生成堆转储快照(五) jhat:Java堆分析工具(六) jstack:堆栈...

weixin_44978957的博客 2762

【Java进阶营】面向Java开发人员的JVM参数指南

通过理解和使用JVM和JVM参数,开发人员和最终用户都可以诊断故障并改进Java应用程序的性能。 当你编写源代码时,你是在编写供人类阅读的代码。在代码被编译成机器语言之前,计算机不能执行源代码。机器语言是一个通用术语,指的是特定机器所需的任意数量的语言。通常,如果在Linux上编译代码,它就在Linux上运行,如果在Windows上编译代码,它就在Windows上运行,以此类推。然而,Java是不同的。它并不以某种真正的机器为目标。它的目标是Java虚拟机(JVM),因此它可以在任何机器上运行。 Java源

java364104的博客 380

Java领域JVM的启动参数配置指南

本文旨在为Java开发者提供全面的JVM启动参数配置指南,涵盖从基础到高级的各类参数配置技巧。我们将重点讨论影响性能、稳定性和可观测性的关键参数。文章首先介绍JVM参数的基本分类,然后深入解析内存管理、垃圾回收等核心参数的原理,最后通过实际案例展示调优方法。JVM: Java Virtual Machine,Java程序的运行环境Heap: 堆内存,存储对象实例的区域GC: Garbage Collection,垃圾回收机制新一代GC算法(ZGC/Shenandoah)减少调优需求。

Java大师兄的博客 1139

linux查看JDK、JRE安装路径详细分析

如果环境里安装了多个版本或多个路径的jdk,那么要搞清楚真正使用的jdk是哪一个是很重要的,特别是不同版本的时候(如jdk8和jdk11) which,和whereis的区别 $JAVA_HOME和$PATH的作用

lzhfdxhxm的博客 4450

Windows11下QGIS 3.34.4安装Geo-SAM插件全流程(附RTX3060 CUDA12.0配置技巧)

本文详细介绍了在Windows 11系统中为QGIS 3.34.4安装和配置Geo-SAM插件的完整流程,特别针对RTX 3060显卡用户提供了CUDA 12.0与PyTorch环境的精准搭建方案。通过预编码与交互式分割两大核心步骤,该插件能显著提升遥感图像半自动标注的效率,降低硬件门槛,是地理信息处理领域融合AI技术的实用指南。

weixin_29089057的博客 296

NeurIPS‘25新研究!PINN+GNN强强联手,模型精度飙升50%!

物理图神经网络研究取得重大进展!UCLA团队提出的PhysGNN架构在NeurIPS'2025上引发关注,该模型成功融合PINN的物理约束优势与GNN的图结构处理能力,解决了工程仿真中的关键瓶颈。研究显示,PhysGNN在城市热网预测中误差降低42%,电网负荷模拟的物理规则违反率下降68%。同步解析的SyncTREE模型则创新性地将RC树物理特性融入GNN,实现毫秒级IC时序分析;HSPGNN模型通过嵌入偏微分方程,显著提升多变量时间序列填补精度。

m0_73122726的博客 1021

Linux系统安装jdk环境

Linux系统安装jdk环境 本文主要借助本地虚拟机CentOS7和Ubuntu18.0.4两种不同的系统介绍如何安装JDK1.8 一.CentOS7系统 1.查看java版本 java -version 若发现jdk版本信息,如下: [root@localhost ~]# java -version openjdk version "1.8.0_262" OpenJDK Runtime Environment (build 1.8.0_262-b10) OpenJDK 64-Bit

qq_33798133的博客 1569

基于STM32开发的智能语音控制系统

本文将介绍如何使用STM32微控制器开发一个智能语音控制系统,通过语音识别模块、OLED显示屏、Wi-Fi模块等实现对家用电器或其他设备的语音控制。智能语音控制系统的核心是STM32微控制器,通过语音识别模块识别用户的语音指令,并根据指令控制家用电器或其他设备。:定期测试语音识别模块、继电器控制模块、OLED显示屏和Wi-Fi模块的工作状态,确保系统能够在各种情况下正常运行,并保持智能语音控制系统的可靠性。本系统同样适用于办公环境,可以通过语音指令控制办公室设备,如照明、空调等,提供智能化的办公体验。

stm32d1219的博客 6911

Linux如何安装jdk1.8步骤操作

1.检查系统中jdk版本 [root@localhost software]# java-version 显示: openjdkQ version"1.8.0_102% OpenJDK Runtime EnvironmentQ (build 1.8.0_102-b14) OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode) 2.检测jdk安装包 [root@localhost software]# rpm-qal grep2 j

weixin_67782421的博客 358

【QMIX】一种基于Value-Based多智能体算法

文章目录1. QMIX 解决了什么问题(Motivation)2. QMIX 怎样解决团队收益最大化问题(Method)2.1 算法大框架 —— 基于 AC 框架的 CTDE(Centralized Training Distributed Execution) 模式 QMIX 是一种基于 Value-Based 的多智能体强化学习算法(MARL),其基本思想来源于 Actor-Critic 与 DQN 的结合。使用中心式学习(Centralized Learning)分布式执行(Distributed

qq_38638132的博客 9860

LAMMPS实战:如何用ReaxFF力场模拟碳氢化合物热解(附完整脚本)

本文提供了一份使用LAMMPS软件中ReaxFF反应力场模拟碳氢化合物热解过程的完整实战指南。内容涵盖从环境准备、力场参数选择、能量最小化,到升温恒温动力学模拟的完整脚本编写,并介绍了基于轨迹文件的产物分析方法,帮助计算化学与材料科学研究者快速上手这一关键的分子动力学仿真技术。

soda5的博客 1099

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x000001faf3e50000

背景 早上在用IDEA构建项目的时候,爆出了以下问题。 OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x000001faf3e50000, 65536, 0) failed; error='页面文件太小,无法完成操作。' (DOS error/errno=1455) # There is insufficient memory for the Java Runtime Environment to continue. # Nat..

沛哥儿的专栏 9994

C++实现复制粘贴文本功能

要实现这个功能,我们需要使用操作系统提供的函数来操作剪贴板。在Windows操作系统中,我们可以使用Windows API函数来访问剪贴板。总结起来,使用C++实现复制和粘贴文本功能涉及使用操作系统提供的API函数来操作剪贴板。在本篇文章中,我将向您展示如何使用C++编程语言实现复制和粘贴文本的功能。我们将使用操作系统提供的API来进行剪贴板操作,并编写相应的代码来完成这个任务。如果您使用的是Linux操作系统,您需要使用适当的库和函数来访问剪贴板。函数中,我们首先将一个字符串复制到剪贴板中,然后使用。

PixelDyno的博客 1233

面向 Java 开发人员的 JVM 参数指南

但是,Java 是不同的,它并不以真实的机器为目标,而是面向 Java 虚拟机Java Virtual Machine(JVM)。Java 是开源的,因此,许多不同的公司都会构建和发行他们自己的 JDK 发行版。如果你想了解关于 JDK(即 Java 开发工具包Java Development Kit,用于开发/运行 Java 应用程序)的详细信息,你可以通过查询 JVM 来获取。JVM 调优指的是,通过调整 JVM 参数,来提高 Java 应用程序性能的过程,它还有助于诊断应用程序的故障。

m0_69804655的博客 133

YOLOv11官方代码库与预训练模型下载:介绍Ultralytics官方GitHub及模型权重(yolov11n.pt, yolov11s.pt等)

本文介绍了Ultralytics官方GitHub仓库和YOLOv11预训练模型。Ultralytics仓库是YOLO系列算法的官方实现,包含YOLOv11最新代码、预训练模型、文档和工具。仓库采用清晰的代码结构和活跃的更新策略,支持全流程开发。YOLOv11提供了5种不同规模的模型变体(YOLOv11n/s/m/l/x),在精度、速度和模型大小间权衡,适用于从移动设备到高精度检测等不同场景。各模型在COCO数据集上预训练,可直接使用或微调,满足多样化应用需求。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 5830

手把手教你完成基于matlab的路面裂缝检测系统设计

裂缝是路面病害最早的形态之一,只有在裂缝出现的早期进行维护,才能有效地提高公路的使用寿命。因此,路面裂缝的检测识别系统对于提升公路质量有着重大的意义。首先,对路面裂缝图像进行相应的预处理,目的是减小环境因素的影响,消除无用的噪点。然后提取目标图像特征,判断路面裂缝类型,标记出路面裂缝的位置。最后通过设计的 GUI 界面来集成各个关键步骤,显示所得到的试验结果。仿真结果表明,设计的路面裂缝检测识别系统是高效可行的。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1216

面向 Java 程序猿的 JVM 参数指南

当你在编写源代码时,你是在编写人类可以阅读的代码。在将代码编译成机器语言之前,计算机无法执行它。机器语言是一个通用术语,指的是特定机器所需的任意数量的语言。通常,如果你在 Linux 上编译代码,它只能 Linux 上运行;如果你在 Windows 上编译代码,它就只在 Windows 上运行。但是,Java 是不同的,它并不以真实的机器为目标,而是面向 Java 虚拟机(JVM)。因此,它可以在任何机器上运行。 Java 源代码被编译成字节码,然后由安装在计算机上的 JVM 运行。JVM 是一个

m0_69860228的博客 1854

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java JVM启动参数

摘要 已经使用了一段时间的Java,期间也了解和用过一些JVM(Java Virtual Machine)参数,但是没有仔细去整理过每个参数代表的意义,为此整理成文。 Java使用方式 java [options] classname [args] java [options] -jar filename [args] options: 命令行选项,空格分隔 classname: 启...

学而不厌 诲人不倦 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java JVM常用参数

对Java JVM基本参数类型与简单使用,予以记录!

web15185420056的博客 1081

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

如何通过Java命令行查看JVM参数

要通过Java命令行查看JVM的启动参数,你可以使用Java的java命令结合一些特殊的选项,但是java命令本身并不直接提供一个选项来列出所有JVM启动参数。

DKPT的博客 2139

Java jvm所有参数以及关于jvm调优

参数汇总 一、java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容; 其三是非St...

抛弃幻想,准备斗争 4113

Java笔记——Java JVM常用参数

改变jvm元空间的大小:java -XX:MetaspaceSize=128m 【T】-XX:NewRatio=2新生代占1,老年代2,年轻代占整个堆的1/3。-XX:NewRatio=4新生代占1,老年代4,年轻代占整个堆的1/5。-Xms等价于-XX:InitialHeapSize:初始化堆内存大小。默认为物理内存的1/64,等价于-XX:InitialHeapSize。-Xmx等价于-XX:MaxHeapSize:最大堆内存大小。默认为物理内存的1/4,等价于-XX:MaxHeapSize。

a25847a的博客 1796

Java8 JVM参数解读

我们知道java虚拟机启动时会带有很多的启动参数,Java命令本身就是一个多参数的启动命令。那么具体JVM启动包含哪些参数呢?这篇文章针对java8的情况做一篇汇总解读,包含大多数常见和不常见的命令参数,过于小众的就不写了。 命令参数包含 标准参数(Standard Option) 非标准参数(Non-Standard Options) 高级运行时参数(Advanced Runtime Options) 高级JIT编译器参数(Advanced JIT Compiler Options) 高级服务

攻城狮不是猫 2454

Java 动态设置 JVM 参数的方法

JVM参数分为两类:系统属性和JVM启动参数。系统属性:系统属性通常在运行时通过方法设置。这些属性在Java应用运行期间可以被访问和修改。JVM启动参数:JVM启动参数在JVM启动时设定,如内存大小和垃圾回收策略。常见的启动参数包括-Xms(设置初始堆大小)、-Xmx(设置最大堆大小)、(启用G1垃圾回收器)等。虽然部分JVM启动参数在运行时无法更改,但通过设置合适的初始参数和监控内存状况,依然可以达到优化目的。此外,通过动态调整应用程序的内存使用(如对象的创建和释放),可以间接实现性能优化。

sdgfafg_25的博客 1459
上一篇: 为什么社会上的Java程序员还没有饱和?
下一篇: 什么是 Java 代理?
宇小哥
博客等级 码龄5年 4粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值