当前位置: 首页 > news >正文

常用的 JVM 参数:配置与优化指南

文章目录

      • 常用的 JVM 参数:配置与优化指南
        • 引言
      • 1. 内存管理参数
        • 1.1 堆内存配置
        • 1.2 方法区(元空间)配置
        • 1.3 直接内存配置
      • 2. 垃圾回收参数
        • 2.1 垃圾回收器选择
        • 2.2 GC 日志配置
        • 2.3 GC 调优参数
      • 3. 性能监控参数
        • 3.1 堆内存转储
        • 3.2 JVM 监控
        • 3.3 远程监控
      • 4. 其他常用参数
        • 4.1 类加载参数
        • 4.2 线程栈参数
        • 4.3 系统属性
      • 5. 综合示例
      • 6. 总结
        • 参考资料


常用的 JVM 参数:配置与优化指南

引言

Java 虚拟机(JVM)是 Java 程序运行的核心环境,通过合理配置 JVM 参数,可以显著提升应用程序的性能和稳定性。本文将详细介绍常用的 JVM 参数,包括内存管理、垃圾回收、性能监控等方面的配置,帮助开发者更好地优化 Java 应用程序。


1. 内存管理参数

内存管理是 JVM 调优的核心部分,合理配置内存参数可以避免内存溢出(OOM)和频繁的垃圾回收。

1.1 堆内存配置
  • -Xms:设置 JVM 初始堆大小。
    -Xms512m  # 初始堆大小为 512MB
    
  • -Xmx:设置 JVM 最大堆大小。
    -Xmx2048m  # 最大堆大小为 2048MB
    
  • -Xmn:设置年轻代(Young Generation)大小。
    -Xmn256m  # 年轻代大小为 256MB
    
1.2 方法区(元空间)配置
  • -XX:MetaspaceSize:设置元空间初始大小。
    -XX:MetaspaceSize=128m  # 元空间初始大小为 128MB
    
  • -XX:MaxMetaspaceSize:设置元空间最大大小。
    -XX:MaxMetaspaceSize=512m  # 元空间最大大小为 512MB
    
1.3 直接内存配置
  • -XX:MaxDirectMemorySize:设置直接内存的最大大小。
    -XX:MaxDirectMemorySize=256m  # 直接内存最大大小为 256MB
    

2. 垃圾回收参数

垃圾回收(GC)是影响 Java 应用程序性能的关键因素,合理配置 GC 参数可以减少停顿时间(Stop-The-World)和提升吞吐量。

2.1 垃圾回收器选择
  • -XX:+UseSerialGC:使用串行垃圾回收器(适合单核 CPU)。
    -XX:+UseSerialGC
    
  • -XX:+UseParallelGC:使用并行垃圾回收器(适合多核 CPU)。
    -XX:+UseParallelGC
    
  • -XX:+UseG1GC:使用 G1 垃圾回收器(适合大内存、低延迟场景)。
    -XX:+UseG1GC
    
2.2 GC 日志配置
  • -XX:+PrintGCDetails:打印详细的 GC 日志。
    -XX:+PrintGCDetails
    
  • -XX:+PrintGCDateStamps:在 GC 日志中打印时间戳。
    -XX:+PrintGCDateStamps
    
  • -Xloggc:<file>:将 GC 日志输出到指定文件。
    -Xloggc:/path/to/gc.log
    
2.3 GC 调优参数
  • -XX:MaxGCPauseMillis:设置最大 GC 停顿时间(适用于 G1 回收器)。
    -XX:MaxGCPauseMillis=200  # 最大停顿时间为 200ms
    
  • -XX:GCTimeRatio:设置 GC 时间与应用程序时间的比例。
    -XX:GCTimeRatio=99  # GC 时间占比不超过 1%
    

3. 性能监控参数

通过配置性能监控参数,可以实时监控 JVM 的运行状态,帮助定位性能瓶颈。

3.1 堆内存转储
  • -XX:+HeapDumpOnOutOfMemoryError:在发生 OOM 时生成堆内存转储文件。
    -XX:+HeapDumpOnOutOfMemoryError
    
  • -XX:HeapDumpPath=<file>:指定堆内存转储文件的路径。
    -XX:HeapDumpPath=/path/to/heapdump.hprof
    
3.2 JVM 监控
  • -XX:+PrintFlagsFinal:打印所有 JVM 参数的最终值。
    -XX:+PrintFlagsFinal
    
  • -XX:+PrintCommandLineFlags:打印 JVM 启动时设置的参数。
    -XX:+PrintCommandLineFlags
    
3.3 远程监控
  • -Dcom.sun.management.jmxremote:启用 JMX 远程监控。
    -Dcom.sun.management.jmxremote
    
  • -Dcom.sun.management.jmxremote.port=<port>:设置 JMX 远程监控端口。
    -Dcom.sun.management.jmxremote.port=9010
    

4. 其他常用参数

4.1 类加载参数
  • -XX:+TraceClassLoading:跟踪类加载过程。
    -XX:+TraceClassLoading
    
  • -XX:+TraceClassUnloading:跟踪类卸载过程。
    -XX:+TraceClassUnloading
    
4.2 线程栈参数
  • -Xss:设置每个线程的栈大小。
    -Xss1m  # 每个线程栈大小为 1MB
    
4.3 系统属性
  • -D<key>=<value>:设置系统属性。
    -Duser.timezone=GMT+08  # 设置时区为东八区
    

5. 综合示例

以下是一个综合配置示例,适用于需要高吞吐量和低延迟的 Java 应用程序:

java -Xms2048m -Xmx2048m -Xmn512m \
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m \
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:GCTimeRatio=99 \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump.hprof \
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log \
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 \
-jar myapp.jar

6. 总结

  • 内存管理:合理配置堆内存、元空间和直接内存,避免内存溢出。
  • 垃圾回收:根据应用场景选择合适的垃圾回收器,优化 GC 停顿时间和吞吐量。
  • 性能监控:通过堆内存转储和 JMX 监控,实时分析 JVM 运行状态。
  • 其他参数:根据需求配置类加载、线程栈和系统属性。

通过合理配置 JVM 参数,可以显著提升 Java 应用程序的性能和稳定性。建议在实际应用中根据具体场景进行调整和优化。


参考资料
  • Oracle 官方文档:JVM 参数
  • 《深入理解 Java 虚拟机》
  • 《Java 性能调优实战》

相关文章:

常用的 JVM 参数:配置与优化指南

文章目录 常用的 JVM 参数&#xff1a;配置与优化指南引言 1. 内存管理参数1.1 堆内存配置1.2 方法区&#xff08;元空间&#xff09;配置1.3 直接内存配置 2. 垃圾回收参数2.1 垃圾回收器选择2.2 GC 日志配置2.3 GC 调优参数 3. 性能监控参数3.1 堆内存转储3.2 JVM 监控3.3 远…...

【JavaWeb学习Day17】

Tlias智能学习系统&#xff08;员工管理&#xff09; 新增员工&#xff1a; 三层架构职责&#xff1a; Controller&#xff1a;1.接收请求参数&#xff08;员工信息&#xff09;&#xff1b;2.调用service方法&#xff1b;3.响应结果。 具体实现&#xff1a; /***新增员工…...

DeepSeek 提示词:定义、作用、分类与设计原则

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

前端大文件上传

1. 开场概述 “大文件上传是前端开发中常见的需求&#xff0c;但由于文件体积较大&#xff0c;直接上传可能会遇到网络不稳定、服务器限制等问题。因此&#xff0c;通常需要采用分片上传、断点续传、并发控制等技术来优化上传体验” 2. 核心实现方案 “我通常会采用以下方案…...

JDK源码系列(一)Object

Object 概述 Object类是所有类的基类——java.lang.Object。 Object类是所有类的基类&#xff0c;当一个类没有直接继承某个类时&#xff0c;默认继承Object类Object类属于java.lang包下&#xff0c;此包下的所有类在使用时无需手动导入&#xff0c;系统会在程序编译期间自动…...

【Python 打造高效文件分类工具】

【Python】 打造高效文件分类工具 一、代码整体结构二、关键代码解析&#xff08;一&#xff09;初始化部分&#xff08;二&#xff09;界面创建部分&#xff08;三&#xff09;核心功能部分&#xff08;四&#xff09;其他辅助功能部分 三、运行与使用四、示图五、作者有话说 …...

大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1)

Paimon的下载及安装&#xff0c;并且了解了主键表的引擎以及changelog-producer的含义参考&#xff1a; 大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1) 利用Paimon表做lookup join&#xff0c;集成mysql cdc等参考&#xff1a; 大数据组件(四)快速入门实时数据…...

边缘安全加速(Edge Security Acceleration)

边缘安全加速&#xff08;Edge Security Acceleration&#xff0c;简称ESA&#xff09;是一种通过将安全功能与网络边缘紧密结合来提升安全性和加速网络流量的技术。ESA的目标是将安全措施部署到接近用户或设备的地方&#xff0c;通常是在网络的边缘&#xff0c;而不是将所有流…...

C/C++高性能Web开发框架全解析:2025技术选型指南

一、工业级框架深度解析&#xff08;附性能实测&#xff09; 1. Drogon v2.1&#xff1a;异步框架性能王者 核心架构&#xff1a; Reactor 非阻塞I/O线程池&#xff08;参考Nginx模型&#xff09; 协程实现&#xff1a;基于Boost.Coroutine2&#xff08;兼容C11&#xff09;…...

fedora 安装 ffmpeg 过程记录

参考博客&#xff1a;1. linux(centos)安装 ffmpeg,并添加 libx264库&#xff1a;https://blog.csdn.net/u013015301/article/details/140778199ffmpeg 执行时如添加参数 -vcodec libx264&#xff0c;会出现错误&#xff1a;Unknown encoder libx264’的错误&#xff0c;缺少li…...

【GPU驱动】OpenGLES图形管线渲染机制

OpenGLES图形管线渲染机制 OpenGL/ES 的渲染管线也是一个典型的图形流水线&#xff08;Graphics Pipeline&#xff09;&#xff0c;包括多个阶段&#xff0c;每个阶段都负责对图形数据进行处理。管线的核心目标是将图形数据转换为最终的图像&#xff0c;这些图像可以显示在屏幕…...

Spring Boot项目@Cacheable注解的使用

Cacheable 是 Spring 框架中用于缓存的注解之一&#xff0c;它可以帮助你轻松地将方法的结果缓存起来&#xff0c;从而提高应用的性能。下面详细介绍如何使用 Cacheable 注解以及相关的配置和注意事项。 1. 基本用法 1.1 添加依赖 首先&#xff0c;确保你的项目中包含了 Spr…...

mac开发环境配置笔记

1. 终端配置 参考&#xff1a; Mac终端配置笔记-CSDN博客 2. 下载JDK 到 oracle官网 下载jdk: oracle官网 :Java Downloads | Oraclemac的芯片为Intel系列下载 x64版本的jdk&#xff1b;为Apple Mx系列使用 Arm64版本&#xff1b;oracle官网下载时报错&#xff1a;400 Bad R…...

重装CentOS YUM

1. 检查是否已安装 YUM 运行以下命令检查 YUM 是否已安装&#xff1a; yum list installed | grep yum 如果输出中包含 yum&#xff0c;则说明 YUM 已安装。 2. 卸载旧版本的 YUM&#xff08;如有必要&#xff09; 如果需要重新安装 YUM&#xff0c;可以先卸载旧版本&…...

对免认证服务提供apikey验证

一些服务不带认证&#xff0c;凡是可以访问到服务端口&#xff0c;都可以正常使用该服务&#xff0c;方便是方便&#xff0c;但是不够安全。 比如ollama默认安装后就是这样。现在据说网上扫一下端口11434&#xff0c;免apikey的ollama服务一大堆。。。 那我们怎样将本机安装的o…...

数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)

数据库驱动找起来好麻烦&#xff0c;我整理到了一起&#xff0c;需要的朋友免费下载&#xff1a;驱动下载 目前收录了Oracle、Mysql、达梦、Postgresql的数据库驱动的多个版本&#xff0c;后续可能会分享更多。...

OceanBase 初探学习历程之——安装部署

一、介绍 OceanBase 数据库是一个原生的分布式关系数据库&#xff0c;它是完全由阿里巴巴和蚂蚁集团自主研发 的项目。OceanBase 数据库构建在通用服务器集群上&#xff0c;基于 Paxos 协议和分布式架构&#xff0c;提供 金融级高可用和线性伸缩能力&#xff0c;不依赖特定硬件…...

Windows 下免费开源的多格式文件差异对比工具

软件介绍 有这样一款诞生于 2000 年、专为 Windows 系统打造的开源免费工具&#xff0c;截至 2025 年 1 月已更新至 2.16.46 版本&#xff0c;它就是文件与文件夹比较的得力助手。 其支持文本文件、Word、Excel、PPT 网页、图像等多种格式对比&#xff0c;利用高亮显示行内差…...

Vue3+element UI:使用el-dialog时,对话框不出现解决方案

​​​​ 解决方案&#xff1a;在<el-dialog>标签中&#xff0c;添加:append-to-body“true”*&#xff0c;对话框即可弹出。*...

postman调用ollama的api

按照如下设置&#xff0c;不需要设置key 保持长会话的方法 # 首次请求 curl http://localhost:11434/api/generate -d {"model": "deepseek-r1:32b","prompt": "请永久记住&#xff1a;110&#xff0c;1-12&#xff0c;之后所有数学计算必…...

别再只用Cube了!用Unity WheelCollider制作真实汽车物理的5个关键步骤

别再只用Cube了&#xff01;用Unity WheelCollider制作真实汽车物理的5个关键步骤 在游戏开发中&#xff0c;车辆物理模拟一直是提升沉浸感的关键要素。许多开发者习惯使用简单的Transform移动来模拟车辆运动&#xff0c;这种方法虽然易于实现&#xff0c;但缺乏真实的物理反馈…...

告别功耗焦虑:5G NR中的DRX(不连续接收)与带宽自适应,如何让你的终端更省电?

5G终端节能革命&#xff1a;DRX与带宽自适应的实战配置指南 在移动通信领域&#xff0c;电池续航始终是终端设备的核心痛点。随着5G NR技术的普及&#xff0c;用户对高速连接与持久续航的双重期待&#xff0c;将终端节能技术推向了前所未有的重要位置。本文将深入剖析5G NR标准…...

从OTG到Peripheral:在RK3399上手动切换DWC3 USB控制器模式的实战指南

从OTG到Peripheral&#xff1a;在RK3399上手动切换DWC3 USB控制器模式的实战指南 当你在RK3399开发板上调试USB功能时&#xff0c;是否遇到过这样的困境&#xff1a;硬件设计为OTG模式&#xff0c;但实际开发中需要强制将USB口作为设备&#xff08;如模拟U盘&#xff09;或主机…...

如何用Mithril.js快速集成GPS与地图服务:完整指南

如何用Mithril.js快速集成GPS与地图服务&#xff1a;完整指南 【免费下载链接】mithril.js A JavaScript Framework for Building Brilliant Applications 项目地址: https://gitcode.com/gh_mirrors/mi/mithril.js Mithril.js是一款轻量级JavaScript框架&#xff0c;专…...

从30秒到3秒:fmt编译时优化技巧终结C++项目构建噩梦

从30秒到3秒&#xff1a;fmt编译时优化技巧终结C项目构建噩梦 【免费下载链接】fmt A modern formatting library 项目地址: https://gitcode.com/GitHub_Trending/fm/fmt 在C开发中&#xff0c;冗长的编译时间常常成为开发者 productivity 的隐形杀手。fmt作为一款现代…...

三环境零停机!Dokploy部署流水线从开发到生产全攻略

三环境零停机&#xff01;Dokploy部署流水线从开发到生产全攻略 【免费下载链接】dokploy Open Source Alternative to Vercel, Netlify and Heroku. 项目地址: https://gitcode.com/GitHub_Trending/do/dokploy Dokploy 是一款开源的部署平台&#xff0c;作为 Vercel、…...

Excel批量导入图片翻车实录:顺序错乱、名称带后缀?这份避坑指南帮你一次搞定

Excel批量导入图片避坑指南&#xff1a;从顺序错乱到完美排版的全流程解决方案 你是否曾在Excel中批量导入图片时&#xff0c;遇到过图片顺序错乱、名称带后缀、大小不一等令人抓狂的问题&#xff1f;作为一位经历过无数次"翻车"的Excel老手&#xff0c;我深知这些看…...

时间序列预测模型开发全流程指南

1. 时间序列预测模型开发流程概述开发一个高效的时间序列预测模型需要系统化的方法论。与常规的机器学习任务不同&#xff0c;时间序列数据具有时间依赖性、季节性和趋势性等独特特征&#xff0c;这要求我们采用专门的处理流程。本文将详细介绍从问题定义到模型部署的完整开发周…...

VSCode低代码插件性能临界点测试:当表单字段超127个时,这4个插件率先崩溃(附压测脚本)

https://intelliparadigm.com 第一章&#xff1a;VSCode低代码插件性能临界点测试&#xff1a;当表单字段超127个时&#xff0c;这4个插件率先崩溃&#xff08;附压测脚本&#xff09; 低代码开发正深度融入 VSCode 生态&#xff0c;但多数插件在高复杂度表单场景下缺乏压力验…...

3步解决Void编辑器构建时的依赖地狱:从报错到编译通过的实战指南

3步解决Void编辑器构建时的依赖地狱&#xff1a;从报错到编译通过的实战指南 【免费下载链接】void 开源AI代码编辑器&#xff0c;Cursor的替代方案。 项目地址: https://gitcode.com/GitHub_Trending/void2/void Void作为开源AI代码编辑器的新星&#xff0c;为开发者提…...