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

JVM有哪些参数以及如何使用

JVM(Java虚拟机)参数用于调整和优化Java应用程序的性能和行为。这些参数主要分为标准参数、非标准参数(以-X开头)和高级参数(以-XX开头)。以下是一些常见的JVM参数及其使用方法:

标准参数

  • -server:启动JVM时使用服务器模式,适用于生产环境,具有更好的性能和内存管理效率。
  • -client:启动JVM时使用客户端模式,适用于桌面应用程序或开发测试环境,启动速度较快。
  • -verbose:class:输出JVM载入类的相关信息,有助于诊断类加载问题。
  • -verbose:gc:输出每次垃圾回收(GC)的相关情况,有助于了解JVM的内存管理行为。
  • -verbose:jni:输出本地方法调用的相关情况,有助于诊断JNI调用错误信息。
  • -classpath 或 -cp:指定类路径,可以包括多个目录和JAR文件。
  • -version 或 -showversion:显示JVM版本信息。

非标准参数(-X参数)

  • -Xms:设置JVM初始堆内存大小,单位为MB或G。例如,-Xms512m表示设置初始堆内存为512MB。
  • -Xmx:设置JVM最大堆内存大小,单位为MB或G。例如,-Xmx2g表示设置最大堆内存为2GB。建议在线上生产环境中,将-Xms和-Xmx设置为相同的值,以避免内存抖动。
  • -Xmn:设置新生代内存大小,包括Eden区和两个Survivor区的总和。这个参数会影响JVM的内存分配和垃圾回收行为。
  • -Xss:设置线程堆栈大小,单位为KB。例如,-Xss128k表示设置线程堆栈大小为128KB。
  • -Xloggc::将每次GC事件的相关情况记录到一个文件中,有助于分析JVM的内存管理行为。
  • -Xint:仅解释模式执行,JVM不会进行即时编译。
  • -Xmixed:混合模式执行,默认模式,JVM会进行即时编译和解释执行。

高级参数(-XX参数)

  • -XX:NewSize=:设置新生代对象生成时占用内存的默认值。
  • -XX:MaxNewSize=:设置新生成对象能占用内存的最大值。
  • -XX:PermSize=:设置永久代(PermGen)的初始大小,单位为MB。在JDK 8及更高版本中,永久代被元空间(Metaspace)替代。
  • -XX:MaxPermSize=:设置永久代(PermGen)的最大大小,单位为MB。在JDK 8及更高版本中,此参数不再使用。
  • -XX:MetaspaceSize=:设置元空间的初始大小,单位为MB。元空间用于存储类的元数据。
  • -XX:NewRatio=:设置新生代与老生代的内存容量比例。例如,-XX:NewRatio=4表示新生代与老生代的比例为1:4。
  • -XX:SurvivorRatio=:设置Eden区与Survivor区的容量比值。例如,-XX:SurvivorRatio=8表示Eden区与两个Survivor区的比例为8:1:1。
  • -XX:+HeapDumpOnOutOfMemoryError:在JVM遇到内存溢出异常(OOM)时生成堆转储文件,有助于分析内存泄漏问题。
  • -XX:HeapDumpPath= :指定导出堆信息时的路径或文件名。
  • -XX:+UseConcMarkSweepGC:启用CMS垃圾收集器,适用于对响应时间要求较高的应用场景。
  • -XX:+UseG1GC:启用G1垃圾收集器,适用于需要处理大量内存和减少停顿时间的应用场景。
  • -XX:+PrintGC:在控制台上打印出GC信息。
  • -XX:+PrintGCDetails:在控制台上打印出详细的GC信息,包括各个内存区域的分配和回收情况。
  • -XX:+PrintGCTimeStamps:打印每次GC的时间戳,有助于了解GC的执行时间。
  • -XX:MaxGCPauseMillis=:设置最大GC暂停时间的目标(以毫秒为单位),JVM会尝试在满足该目标的前提下进行垃圾回收。

使用方法

  1. 在开发工具中设置:如IDEA、Eclipse等IDE,可以在运行配置中设置JVM参数。
  2. 在命令行中运行JAR包时设置:使用java命令运行JAR包时,可以在命令后添加JVM参数。例如:
java -Xmx1024m -Xms1024m -jar xxx.jar
  1. 在Tomcat容器中设置:在Tomcat的启动脚本(如catalina.sh)中设置JAVA_OPTS环境变量,以指定JVM参数。例如:
JAVA_OPTS="-server -Xms8g -Xmx8g -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/gclogs/dump/heap.hprof -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/usr/local/gclogs/gc.log -XX:+DisableExplicitGC"

了解并掌握这些JVM参数的使用方法,有助于优化Java应用程序的性能和内存管理行为。


http://www.kler.cn/a/328285.html

相关文章:

  • D3中颜色的表示方法大全
  • 【面试】前端vue项目架构详细描述
  • 量化交易系统开发-实时行情自动化交易-4.1.3.A股平均趋向指数(ADX)实现
  • 博客文章怎么设计分类与标签
  • 智慧安防丨以科技之力,筑起防范人贩的铜墙铁壁
  • 智谱AI清影升级:引领AI视频进入音效新时代
  • 基于Java+SQL Server2008开发的(CS界面)个人财物管理系统
  • 【深度学习】(6)--图像数据增强
  • 信息安全工程师(16)密码学概况
  • HarmonyOS应用六之应用程序进阶一
  • 服装时尚与动漫游戏的跨界联动:创新运营与策划策略研究
  • [论文阅读] ChartInstruct: Instruction Tuning for Chart Comprehension and Reasoning
  • C++_unique_ptr_一个类Frame的普通指针fr初始化一个unique_ptr, 这个普通指针还有管理权吗?
  • 蓝桥杯--STM32G431RBT6(TIM定时器的输出频率和占空比,含详细原理介绍和使用方法)
  • Git Stash: 管理临时更改的利器
  • 基于C+++Mysql实现(CS界面)图书管理系统
  • 笔墨歌盛世 丹青绘匠心,艺术赋能“百千万工程”
  • 了解独享IP的概念及其独特优势
  • 【STM32单片机_(HAL库)】4-3【定时器TIM】定时器输入捕获实验配置步骤
  • 大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
  • 音视频通话 SDK
  • WSL (Linux)配置 Rust 开发调试环境
  • Vue创建一个web项目实现布局和路由
  • opencv实战项目二十八:基于Shi-Tomasi算法的箱子角点检测
  • 解决AWS Organizatiion邀请多个Linker账号数量限额问题
  • iwebsec靶场 解析漏洞通关笔记2-Nginx解析漏洞