JVM 参数前缀 -XX: 含义 详解

news2024/12/27 1:19:46

在 Java 虚拟机(JVM)中,参数前缀 -XX: 表示的是 JVM 的非标准(实验性)选项。这些参数用于调整和优化 JVM 的性能、垃圾回收行为、内存分配策略等。


1. 参数分类

-XX: 参数大致分为三类,根据其格式区分:

  1. 布尔类型选项:用于启用或禁用某个特性。

    • 格式:-XX:+<Option>-XX:-<Option>
      • + 表示启用该选项。
      • - 表示禁用该选项。
  2. 键值对选项:用于设置某个参数的具体值。

    • 格式:-XX:<Option>=<Value>
  3. 诊断选项:用于调试和诊断 JVM 的行为。

    • 格式:类似于布尔类型和键值对,但通常需要额外启用 -XX:+UnlockDiagnosticVMOptions

2. 常用的 -XX: 参数

2.1 布尔类型参数

参数说明默认值
-XX:+UseG1GC启用 G1 垃圾回收器。
-XX:+UseParallelGC启用并行垃圾回收器(Parallel GC)。
-XX:+UseConcMarkSweepGC启用 CMS 垃圾回收器(Concurrent Mark-Sweep)。
-XX:-UseAdaptiveSizePolicy禁用自适应内存分配策略(与垃圾回收器有关)。
-XX:+PrintGCDetails输出详细的 GC 日志信息。
-XX:+PrintGCDateStamps输出 GC 日志时添加时间戳。
-XX:+HeapDumpOnOutOfMemoryError当发生 OutOfMemoryError 时生成堆转储文件。

2.2 键值对类型参数

参数说明默认值
-XX:MaxHeapSize=<size>设置堆的最大大小。例如 -XX:MaxHeapSize=512m-XX:MaxHeapSize=2g系统自动计算
-XX:InitialHeapSize=<size>设置堆的初始大小。系统自动计算
-XX:MaxMetaspaceSize=<size>设置元空间的最大大小(仅适用于 Java 8 及以上)。无限(受系统限制)
-XX:ThreadStackSize=<size>设置每个线程的堆栈大小。与操作系统相关
-XX:NewRatio=<value>设置新生代和老年代内存比例。例如,-XX:NewRatio=2 表示新生代是老年代的 1/2。2
-XX:SurvivorRatio=<value>设置 Eden 区和 Survivor 区的比例。例如,-XX:SurvivorRatio=8 表示 Eden 是 Survivor 的 8 倍。8
-XX:MaxTenuringThreshold=<value>设置对象从新生代晋升到老年代所需的最大年龄。15

2.3 诊断和调试参数

诊断参数需要配合 -XX:+UnlockDiagnosticVMOptions 使用。例如:

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version
参数说明备注
-XX:+UnlockExperimentalVMOptions启用实验性参数。使用时需谨慎
-XX:+PrintFlagsFinal打印 JVM 参数的最终值,包括默认值和用户设置值。调试常用
-XX:+TraceClassLoading打印类加载的详细信息。调试类加载问题
-XX:+TraceClassUnloading打印类卸载的详细信息。调试类卸载问题
-XX:+LogCompilation输出 JIT 编译相关日志,通常与 -XX:+UnlockDiagnosticVMOptions 一起使用。性能调优
-XX:+PrintGCApplicationStoppedTime打印 GC 导致的应用停止的时间。GC 调优

3. 常见场景下的 -XX: 参数使用

3.1 设置 JVM 堆大小

设置 JVM 的堆初始大小和最大大小:

java -XX:InitialHeapSize=512m -XX:MaxHeapSize=2g -jar app.jar
  • 初始堆大小:512 MB。
  • 最大堆大小:2 GB。

3.2 启用 G1 垃圾回收器

使用 G1 垃圾回收器并设置最大暂停时间目标:

java -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar app.jar
  • -XX:+UseG1GC:启用 G1 垃圾回收器。
  • -XX:MaxGCPauseMillis=200:目标最大暂停时间为 200 毫秒。

3.3 打印 GC 日志

调试 GC 时输出详细日志:

java -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log -jar app.jar
  • -XX:+PrintGCDetails:打印详细的 GC 信息。
  • -XX:+PrintGCDateStamps:添加时间戳。
  • -Xloggc:gc.log:将 GC 日志输出到文件 gc.log

3.4 调试类加载

输出类加载和卸载信息:

java -XX:+TraceClassLoading -XX:+TraceClassUnloading -jar app.jar
  • -XX:+TraceClassLoading:打印类加载的详细信息。
  • -XX:+TraceClassUnloading:打印类卸载的详细信息。

3.5 在 OOM 时生成堆转储

捕获内存溢出时生成堆转储文件:

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapdump.hprof -jar app.jar
  • -XX:+HeapDumpOnOutOfMemoryError:发生 OutOfMemoryError 时生成堆转储。
  • -XX:HeapDumpPath=./heapdump.hprof:设置堆转储文件的保存路径。

4. 如何查看支持的 -XX: 参数

运行以下命令查看所有 JVM 参数及其默认值:

java -XX:+PrintFlagsFinal -version

输出结果示例:

   size      Flags     Name
    512       -XX:InitialHeapSize
   2048       -XX:MaxHeapSize
      0       -XX:+UseG1GC

列出所有支持的 JVM 参数:

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsInitial -version

5. 注意事项

  1. 稳定性:某些 -XX: 参数是实验性或诊断参数,可能在不同版本的 JVM 中行为不同,需谨慎使用。
  2. 兼容性:参数在不同的 JVM 实现(如 Oracle JDK 和 OpenJDK)中可能略有差异。
  3. 调优慎重:在生产环境中调整 -XX: 参数时,应先在测试环境中充分验证。

总结

-XX: 参数为 JVM 调优提供了强大的工具,适合垃圾回收优化、性能调试、类加载分析等场景。理解这些参数的作用和用法可以帮助开发者更好地优化 Java 应用的性能和稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2254164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PlantUML系列】类图(一)

目录 一、类 二、接口 三、抽象类 四、泛型类 五、类之间的关系 六、添加注释 七、包图 八、皮肤参数 一、类 使用class关键字定义类&#xff0c;类名后跟大括号&#xff0c;声明类的属性和方法。 属性&#xff1a;格式为{visibility} attributeName : AttributeType…

VR眼镜可视化编程:开启医疗信息系统新纪元

一、引言 随着科技的飞速发展&#xff0c;VR 可视化编程在医疗信息系统中的应用正逐渐成为医疗领域的新趋势。它不仅为医疗教育、手术培训、疼痛管理等方面带来了新的机遇&#xff0c;还在提升患者体验、推动医疗信息系统智能化等方面发挥着重要作用。 在当今医疗领域&#xf…

IS-IS的原理

IS-IS的基本概念&#xff1a; 概述&#xff1a; IS-IS&#xff0c;中间系统到中间系统&#xff0c;是ISO国际标准化组织为它的无连接网络协议设计的一种动态路由协议 IS-IS支持CLNP网络和IP网络&#xff0c;采用数据链路层封装&#xff0c;区别于ospf只支持IP网络&#xff0…

华为ACL应用笔记

1、基本ACL 2000-2999 基本ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09;是一种网络安全技术&#xff0c;它根据源IP地址、分片信息和生效时间段等信息来定义规则&#xff0c;对报文进行过滤。 规则&#xff1a; ACL由一系列规则组成&#xff0c;每…

点云标注软件SUSTechPOINTS的安装和使用,自测win10和ubuntu20.04下都可以用

点云标注软件SUSTechPOINTS的安装和使用 github项目源码&#xff1a;https://github.com/naurril/SUSTechPOINTS gitee源码以及使用教程&#xff1a;https://gitee.com/cuge1995/SUSTechPOINTS 首先拉取源码 git clone https://github.com/naurril/SUSTechPOINTS最好是在cond…

大模型评测中的基础指标都包括哪些

大语言模型&#xff08;LLM&#xff09;评测是LLM开发和应用中的关键环节。目前评测方法可以分为人工评测和自动评测&#xff0c;其中&#xff0c;自动评测技术相比人工评测来讲&#xff0c;具有效率高、一致性好、可复现、鲁棒性好等特点&#xff0c;逐渐成为业界研究的重点。…

SystemUI修改状态栏电池图标样式为横屏显示(以Android V为例)

SystemUI修改状态栏电池图标样式为横屏显示(以Android V为例) 1、概述 在15.0的系统rom产品定制化开发中&#xff0c;对于原生系统中SystemUId 状态栏的电池图标是竖着显示的&#xff0c;一般手机的电池图标都是横屏显示的 可以觉得样式挺不错的&#xff0c;所以由于产品开发…

最长最短单词

最长最短单词 C语言实现C实现Java实现Python实现 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入1行句子&#xff08;不多于200个单词&#xff0c;每个单词长度不超过100&#xff09;&#xff0c;只包含字母、空格和逗号。单词由至少一…

C++【PCL】点云数据平移 旋转,对点云进行刚体变化

//头文件 #include <iostream>#include <pcl/point_cloud.h>#include<pcl/io/pcd_io.h>#include <pcl/common/transforms.h> #include <pcl/io/ply_io.h>//主函数int main() {pcl::PointCloud<pcl::PointXYZ>::Ptr source_cloud(new pcl::…

2024第六届金盾信安杯Web 详细题解

比赛一共4道Web题,比赛时只做出三道,那道文件上传没有做出来,所以这里是另外三道题的WP 分别是 fillllll_put hoverfly ssrf fillllll_put 涉及: 绕过exit() 死亡函数 php://filter 伪协议配合base64加解密 一句话木马 题目源码&#xff1a; $content参数在开头被…

006 MATLAB编程基础

01 M文件 MATLAB输入命令有两种方法&#xff1a; 一是在MATLAB主窗口逐行输入命令&#xff0c;每个命令之间用分号或逗号分隔&#xff0c;每行可包含多个命令。 二是将命令组织成一个命令语句文集&#xff0c;使用扩展名“.m”&#xff0c;称为M文件。它由一系列的命令和语句…

Delphi Web前端开发教程(9):基于TMS WEB Core框架

3、REST Servers服务端(后端)框架 REST服务端特点&#xff1a; – 为远程资源提供一个REST API接口。也可以为其他网络内容提供服务&#xff1b; – 包括在Delphi Enterprise & Architect企业版和架构师版中的RAD服务器、DataSnap、WebBroker&#xff1b; – 开源框架&a…

SPC三种判定准则的算法

1.连续6个点递增或递减 //传入数据列表 //返回连续X个及以上递增或递减的数组下标int n = array.Length; int X = X_in; List<int> regions_start = new List<int>(); List<int> regions_end = new List<int>();if(Open){for (int i = 0; i < n - (…

AI一键生成原创圣诞印花图案

一、引言 随着科技的飞速发展&#xff0c;AI 已经深入到我们生活和工作的各个角落&#xff0c;为创意设计领域带来了前所未有的变革。在圣诞即将来临之际&#xff0c;想要设计独特的圣诞印花图案却又担心缺乏灵感或专业技能&#xff1f;别担心&#xff0c;千鹿 AI 为我们提供了…

Ubuntu的pip怎么用

第一步&#xff1a;查看python3版本 第二步&#xff1a;安装pip 第三步&#xff1a;可以尝试使用pip list查看 也可以尝试安装 下面这条命令可以设置永久源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

基于Matlab三点雨流计数法的载荷时间历程分析与循环疲劳评估

随着工程领域中机械设备和结构系统的复杂性不断增加&#xff0c;疲劳分析成为评估其可靠性与使用寿命的关键环节。载荷时间历程数据在疲劳分析中扮演着重要角色&#xff0c;而雨流计数法作为经典的循环计数方法&#xff0c;能够有效地从载荷时间历程中提取疲劳载荷循环信息。本…

帝可得-策略管理

策略管理 需求说明 策略管理主要涉及到二个功能模块&#xff0c;业务流程如下&#xff1a; 新增策略: 允许管理员定义新的策略&#xff0c;包括策略的具体内容和参数&#xff08;如折扣率&#xff09;策略分配: 将策略分配给一个或多个售货机。 #mermaid-svg-PSQOJMLJqVGn3W…

【数据结构】手搓链表

一、定义 typedef struct node_s {int _data;struct node_s *_next; } node_t;typedef struct list_s {node_t *_head;node_t *_tail; } list_t;节点结构体&#xff08;node_s&#xff09;&#xff1a; int _data;存储节点中的数据struct node_s *_next;&#xff1a;指向 node…

嵌入式 C 编程必备(7):const 关键字 —— 打造稳定的常量空间

目录 一、const关键字的基本含义与用法 1.1. 修饰基本数据类型 1.2. 修饰指针 1.3. 修饰数组 1.4. 修饰结构体 二、const关键字在嵌入式编程中的优势 2.1. 提升代码可读性 2.2. 增强代码安全性 2.3. 优化内存使用 2.4. 促进模块化设计 2.5. 支持静态分析和测试 三、…

Day28 买卖股票的最佳时机 跳跃游戏 跳跃游戏 II K 次取反后最大化的数组和

贪心算法 part02 122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 求最大利润 将每天的正利润加和 public int maxProfit(int[] prices) {int totalPrices 0;for(int i0;i<prices.length;i){if(i<prices.length-1&&prices[i1]>prices[…