JVM-(8)JVM启动的常用命令以及参数

JVM启动的常用命令以及参数

在上文 JVM 堆内存逻辑分区 中已经使用过一些 jvm 启动命令,本文着重讲述JVM启动命令用法以及一些常用的参数

一. 基本命令格式

java [options] classname [args...]
java [options] -jar filename.jar [args...]

① [options] - 命令行选项(可选)

比如标准参数 -version ,非标准参数 -Xms,非稳定参数 -XX:+PrintGCDetails,下面有详细说明

② classname - 要执行的类(必需)

指定包含 main 方法的类的全限定名:

java com.example.MyApp

③ [args…] - 传递给 main 方法的参数(可选)

这些参数会传递给应用程序的 main 方法的 String[] args 参数:

java MyApp arg1 arg2 arg3

④ 完整示例

# 复杂的实际应用示例
java \-Xms1g -Xmx4g \                  # 堆内存设置-XX:+UseG1GC \                   # 使用 G1 垃圾收集器-XX:MaxGCPauseMillis=200 \       # 最大 GC 暂停时间-Dspring.profiles.active=prod \  # Spring 环境配置-Dlog4j.configurationFile=conf/log4j2.xml \  # 日志配置-cp "lib/*:app.jar:config" \     # 类路径设置com.example.MainApplication \    # 主类--server.port=8080 \             # 应用参数--database.url=jdbc:mysql://localhost:3306/mydb

二. JVM 启动常用命令参数分类

JVM 常用命令参数主要分为三类:

  1. 标准参数
    以 - 开头,是所有 JVM 实现必须支持的参数,例如:
    -version:显示版本信息
    -help:显示所有标准参数列表
  2. 非标准参数
    以 -X 开头,默认支持但可能不保证所有 JVM 实现兼容,例如:
    -Xms:设置初始堆内存(如 -Xms512m) ‌
    -Xmx:设置最大堆内存(如 -Xmx2g) ‌
    -Xmn:设置新生代大小(如 -Xmn2g)
  3. 非稳定参数
    以 -XX 开头,可能随版本变更而取消,需谨慎使用,例如:
    -XX:MetaspaceSize:设置元空间初始大小
    -XX:+PrintGCDetails:输出详细 GC 日志 ‌

三. 常用命令举例

非稳定参数举例

① java -XX:+PrintCommandLineFlags

主要作用是:在 JVM 启动时,打印出那些被显式设置或由 JVM 自动设置的关键 -XX 参数及其值。

java -XX:+PrintCommandLineFlags -version

C:\Users\Administrator>java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=267006528 -XX:MaxHeapSize=4272104448 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

解读:

  • -XX:InitialHeapSize=267006528 ,JVM 根据当前机器的内存,自动设置的初始堆大小约为 255 MB。
  • -XX:MaxHeapSize=4272104448 ,JVM 自动设置的最大堆大小约为 4 GB。(大概是电脑内存的 1/4)
  • -XX:+PrintCommandLineFlags ,我们自己设置的参数也被打印出来了
  • -XX:+UseCompressedClassPointers -XX:+UseCompressedOops,JVM 自动启用了压缩指针(64位系统上的优化,节省内存)。
  • -XX:-UseLargePagesIndividualAllocation
  • -XX:+UseParallelGC,JVM 自动选择了并行垃圾收集器(Parallel GC)作为默认收集器。(这在JDK 8及之前是默认行为,高版本JDK默认可能是G1)

由上述 jvm 指令格式可知 classname 是必须参数,但是我们不需要运行某个类,只需要查看参数设置,那么添加 -version 参数可以告诉 JVM 不要尝试执行任何应用程序,只需显示版本信息然后退出
如果不加上 -version 会报如下错:

② java -XX:+PrintFlagsInitial

查看所有不稳定指令的默认值

③ java -XX:+PrintFlagsFinal

查看所有不稳定指令最终生效的实际值

④ 打印GC日志

命令如下:

java -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log -jar yourapp.jar
  • -XX:+PrintGC (或 -verbose:gc):表示开启简要 GC 日志。
  • -XX:+PrintGCDetails:(强烈建议加上) 打印详细的 GC 信息,包括各区(Eden, Survivor, Old)在 GC 前后的内存使用情况。没有这个参数,日志信息会非常有限。
  • -XX:+PrintGCDateStamps 或 -XX:+PrintGCTimeStamps:
    • -XX:+PrintGCDateStamps:在日志中添加日期时间戳(如 2024-05-27T10:00:00.123+0800)。
    • -XX:+PrintGCTimeStamps:在日志中添加从 JVM 启动开始计算的相对时间戳(如 12.345 秒)。生产环境推荐使用 PrintGCDateStamps。
  • -Xloggc:<file_path>:(强烈建议加上) 将 GC 日志输出到文件,而不是控制台。例如 -Xloggc:/logs/gc.log。

增加高级设置

java -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause -XX:+PrintTenuringDistribution -Xloggc:gc.log -jar yourapp.jar
  • -XX:+PrintGCCause:打印触发 GC 的原因(如 Allocation Failure, System.gc() 等)。这在 JDK 8 之后通常是默认开启的。
  • -XX:+PrintTenuringDistribution:打印晋升年龄阈值(对象在 Survivor 区熬过多少次 GC 才能进入老年代)的信息,对调优 Survivor 区大小非常有帮助。
  • -XX:+PrintHeapAtGC:在每次 GC 前后打印堆的详细信息。非常详细,但日志量会急剧增大,主要用于深度调试。
  • -XX:+PrintReferenceGC:打印处理各种引用(软引用、弱引用、虚引用、Finalizer)的耗时。

⑤ 设置堆内存溢出时自动生成Dump文件

Dump 文件(转储文件)是计算机程序在特定时间点的状态快照,它记录了程序在发生错误、崩溃或特定触发条件时的内存内容、执行状态和系统信息,开发人员可以根据Dump文件事后分析到底发生了什么问题。
命令示例:

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -Xmx512m -jar yourapp.jar
  • -XX:+HeapDumpOnOutOfMemoryError:启用堆内存溢出时自动生成 dump 文件的功能
  • -XX:HeapDumpPath=:指定 dump 文件的保存路径和文件名,可以指定文件名,也可以只指定目录,当只指定目录时,JVM 会自动生成文件名,格式为:java_pid.hprof

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

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

相关文章

GO学习记录七——上传/下载文件功能,添加启动运行工具

本来计划是学习Docker部署的&#xff0c;研究了一天没搞出来&#xff0c;得出结论是需要翻墙&#xff0c;懒得弄了&#xff0c;暂时放置。 一、以下是&#xff0c;上传/下载代码&#xff0c;和之前是重复的&#xff0c;只多添加了&#xff0c;上传/下载功能。 测试目录为工程根…

SQL中对视图的操作命令汇总

以下是基于搜索结果整理的SQL视图操作命令汇总&#xff0c;按功能分类说明&#xff1a; 一、创建视图 使用 CREATE VIEW 语句定义视图&#xff0c;需指定视图名称和基础查询表达式&#xff1a; CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHER…

【Spring Cloud 微服务】2.守护神网关Gateway

目录 1.API网关的作用 2.Spring Cloud Gateway 是什么&#xff1f; 3.核心由来与背景 1. 微服务架构的挑战&#xff1a; 2. API 网关模式的兴起&#xff1a; 3. Zuul 的局限性&#xff1a; 4. Spring Cloud Gateway 的诞生&#xff1a; 4.核心特征&#xff1a; 5.核心概…

解读商业智能BI,数据仓库中的元数据

之前的文章讨论过数据分析、数据治理、数据仓库等等&#xff0c;即使是非业内人员从字面意思&#xff0c;也是可以了解一二的&#xff0c;但是&#xff0c;很多人对于元数据可能就比较陌生了。那么&#xff0c;今天我们就来聊一聊元数据管理。数据仓库要说元数据&#xff0c;那…

3 种无误的方式删除 Itel 手机上的短信

如果你希望释放存储空间、保护隐私&#xff0c;或者准备出售或转让手机&#xff0c;删除 Itel 手机上的短信是一个实用的步骤。无论是收件箱中充斥着垃圾短信、过时的对话还是敏感内容&#xff0c;删除不需要的短信可以让你的消息体验更加干净和安全。本文将向你介绍 3 种简单且…

【学习笔记】网络安全专用产品类别与参考标准

一、基本标准 1.1 关键设备 网络关键设备认证依据的强制标准为 GB 40050-2021。 1.2 专用产品 网络安全专用产品认证依据的强制标准为 GB 42250-2022。 二、数据备份与恢复产品标准 相关标准&#xff1a; GB/T 29765-2021《信息安全技术 数据备份与恢复产品技术要求与测试评…

Pytho“张量”(Tensor)和 Java的“向量”(Vector)区别和联系

在Python和Java中&#xff0c;“张量”&#xff08;Tensor&#xff09;和“向量”&#xff08;Vector&#xff09;是两个不同语境下的概念&#xff0c;它们的设计目标、功能和应用场景存在显著差异&#xff0c;但也存在一定的共性。以下从区别和联系两方面详细说明&#xff1a;…

Ubuntu部署K8S集群

Ubuntu部署K8S集群 本例以三台Ubuntu24.04为例,1master节点2worker节点 环境准备 修改hostname,三台服务器分别执行 hostnamectl set-hostname k8s-master01hostnamectl set-hostname k8s-worker01hostnamectl set-hostname k8s-worker02 配置静态ip(不同系统修改方法略微差…

openEuler系统安装Ascend Docker Runtime的方法

在openEuler系统中使用NPU前一定要安装Ascend Docker Runtime,也是在安装CANN和mis-tei前的必备工作。 使用容器化支持、整卡调度、静态vNPU调度、动态vNPU调度、断点续训、弹性训练、推理卡故障恢复或推理卡故障重调度的用户,必须安装Ascend Docker Runtime。 下面是具体的安…

控制对文件的访问:Linux 文件系统权限管理总结

在 Linux 系统中&#xff0c;文件权限是保障系统安全和数据完整性的核心机制。红帽企业 Linux 9.0通过一套灵活且精细的权限控制体系&#xff0c;让用户能够精确管理文件和目录的访问范围。本章将系统梳理 Linux 文件系统权限的核心概念、管理方法及高级应用&#xff0c;为系统…

ansible中roles角色是什么意思?

文章目录一、介绍二、Ansible Roles目录编排三、创建role四、playbook调用角色五、roles中tags使用免费个人运维知识库&#xff0c;欢迎您的订阅&#xff1a;literator_ray.flowus.cn 一、介绍 角色是ansible自1.2版本引入的新特性&#xff0c;用于层次性、结构化地组织playbo…

pytorch 网络可视化

1.torchsummary在 Anaconda prompt 中进入自己的 pytorch 环境&#xff0c;安装依赖包。 bash pip install torchsummary 2.tensorboardX 3. graphviz torchviz 4.Jupyter Notebook tensorwatch 5.netron 6.hiddenlayer 7.PlotNeuralNet

可以一键生成PPT的AI PPT工具(最新整理)

在当今快节奏的职场环境中&#xff0c;高效制作专业PPT已成为一项必备技能。传统PPT制作流程耗时费力&#xff0c;从构思大纲、搜集资料、撰写内容到设计排版&#xff0c;往往需要数小时甚至数天时间。AI生成PPT工具的兴起彻底改变了这一局面&#xff0c;让职场人士能够专注于内…

数仓核心概念阐述

数仓核心概念阐述一、数据仓库建模模型二、数据处理架构三、流批处理架构演进**为什么需要流批融合&#xff1f;****1. Lambda 架构&#xff08;双引擎护航&#xff09;****2. Kappa 架构&#xff08;流处理一统江湖&#xff09;****关键概念对照表****实际案例理解****演进趋势…

Spring Boot 自动配置全流程深度解析

在 Spring Boot 的世界里&#xff0c;“约定优于配置” 理念通过自动配置机制展现得淋漓尽致。从一个简单的SpringBootApplication注解开始&#xff0c;背后隐藏着一套精妙的自动配置加载流程。本文将从SpringBootApplication出发&#xff0c;逐步拆解自动配置类是如何被发现、…

AI:业务驱动与技术赋能:企业智能化应用的双向进化深度指南

一、业务与技术的双螺旋进化模型 1.1 从单向适配到双向驱动的认知转变 传统的信息化建设往往遵循"业务提需求、技术做实现"的线性模式&#xff0c;这种模式在稳定的业务环境中确实有效&#xff0c;但在当前快速变化的数字化时代已经显露出明显的局限性。真正的数字化…

2721. 【SDOI2010】外星千足虫

2721. 【SDOI2010】外星千足虫 题解 题目描述 题目描述 公元2089年6月4日&#xff0c;在经历了17年零3个月的漫长旅行后&#xff0c;“格纳格鲁一号”载人火箭返回舱终于安全着陆。此枚火箭由美国国家航空航天局&#xff08;NASA&#xff09;研制发射&#xff0c;行经火星、…

[RestGPT] RestGPT智能体

第3章&#xff1a;RestGPT智能体 欢迎回来&#x1f43b;‍❄️ 在第1章&#xff1a;配置与环境中&#xff0c;我们为RestGPT配备了必要的"钥匙和密码"&#xff1b;在第2章&#xff1a;OpenAPI规范(OAS)中&#xff0c;我们为它提供了与在线服务对话的"使用说明…

笔记本电脑Windows+Ubuntu 双系统,Ubuntu无法挂载Windows的硬盘 报错问题解决

目录 一、前情提要 二、解决方案步骤 第一步&#xff1a;进入Windows进行修复和检查。这是最关键的一步&#xff0c;目的是让Windows来检查和修复它自己的文件系统。 第二步&#xff1a;回到Ubuntu验证挂载 三、总结与预防 一、前情提要 网上找到许多解决方案&#xff0c…

加密货币与区块链:六大刑事重灾区

高鹏律师&#xff08;首席数据官&#xff09;数字经济团队创作&#xff0c;AI辅助在数字货币的世界里&#xff0c;一夜暴富的传说屡见不鲜&#xff0c;但顷刻间失去所有的悲剧也时有发生&#xff0c;现在&#xff0c;我将为您剖析加密货币与区块链领域的六大刑事风险重灾区&…