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

掌握 JVM 的参数及配置

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~

JVM(Java虚拟机)是Java编程语言的核心组件之一,它负责执行Java程序,并提供一系列参数和配置选项,可以调整Java程序的行为和性能。

1

JVM 参数

e1dc0140985b0f4fa143efcfefbb5756.png

JVM 参数主要有 3 类:标准参数,非标准参数,高级参数。

1、标准参数(Standard Options)

标准参数所有的 Java 虚拟机都支持,用于常见操作,例如:检查 Java 版本,查看 java 命令的用法等,标准参数以“-”开头。

-version :查看 Java 版本

-help :查看 java 命令的使用帮助

2、非标准参数(Non-Standard Options)

非标准参数不能保证所有 Java 虚拟机都支持它们,不同的 JDK 版本可能会发生变化,这些参数以“-X”开头。

-Xmixed:混合模式执行 (默认)

-Xint:仅解释模式执行

-Xms<size>:设置堆的初始大小

-Xmx<size>:设置内存分配池的最大大小

-Xss<size>:设置线程堆栈大小

CMD 里运行 java -X 命令,可以显示所有可用 -X 参数的说明。

3、高级参数(Advanced Options)

开发人员使用最多的参数,用于 JVM 调优和 debug,不同的 JDK 版本可能会发生变化,这些参数以 “-XX” 开头。

“-XX” 参数有 2 种类型:Boolean 类型和需要参数的类型。

Boolean 类型:用于启用默认情况下禁用的功能,或者禁用默认情况下启用的功能,此类选项不需要参数。

格式:-XX:[+-] <OptionName>, “+” 或 “-” 表示启用或者禁用 OptionName 属性。

-XX:+UseConcMarkSweepGC  表示启用 CMS 垃圾收集器

-XX:+UseG1GC  表示启用 G1 垃圾收集器

-XX:+PrintCommandLineFlags  表示启用打印 JVM 设定的值,例如堆空间大小和选定的垃圾收集器

需要指定参数值的类型:用于指定某个参数为某个值。

格式:-XX:<OptionName>=<value>,表示 OptionName 属性的值是 value。

-XX:ThreadStackSize=size 设置线程堆栈大小(以字节为单位),字母“k”或“K”表示千字节,“m”或“M”表示兆字节,“g”或“G”表示千兆字节。“-XX:ThreadStackSize ”等效于 “-Xss”。

-XX:InitialHeapSize=size 设置内存分配池的初始大小(以字节为单位),此值必须为 0 或 1024 的倍数且大于 1 MB,“-XX:InitialHeapSize”等效于 “-Xms”。

-XX:MaxHeapSize=size 设置内存分配池的最大大小(以字节为单位),此值必须是 1024 的倍数且大于 2 MB,“-XX:MaxHeapSize ”等效于 “-Xmx”。

-XX:MaxGCPauseMillis=time 设置最大 GC 暂停时间的目标(以毫秒为单位)

4、以下是一些常见的JVM参数和配置选项:

-classpath:指定类路径,可以包括多个目录和JAR文件。

-verbose:启动JVM时输出详细信息,包括类加载、内存分配和线程启动等。

-version:显示JVM版本信息。

-showversion:启动JVM时显示版本信息。

-X:使用非标准选项启动JVM,可以指定各种参数和配置选项。

-Xmx:设置JVM最大堆内存大小,例如-Xmx2G表示最大堆内存为2GB。

-Xms:设置JVM初始堆内存大小,例如-Xms512M表示初始堆内存为512MB。

-XX:PermSize 和 -XX:MaxPermSize:设置永久代(PermGen)的初始大小和最大大小。

-XX:+UseConcMarkSweepGC:使用并发标记清除(CMS)垃圾回收器。

-XX:+UseParallelGC:使用并行垃圾回收器。

-XX:+PrintGC:启动垃圾回收时输出垃圾回收信息。

-XX:+PrintGCDetails:启动垃圾回收时输出详细的垃圾回收信息。

-Xloggc:指定垃圾回收日志文件的路径和名称。

-XX:ParallelGCThreads:指定并行垃圾回收线程数。

-XX:MaxDirectMemorySize:设置直接内存的最大大小。

这些参数和配置选项可以用来调整JVM 的行为和性能,以便更好地适应不同的应用场景和硬件环境。

JDK 8 的参数官方链接:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BABDCEGG 

大家可以自行研究。

2

JVM 参数配置的方式

0395713234a281ca8954c8793e009b0a.png

1、开发工具中设置:IDEA,eclipse。

2、命令行运行 jar 包的时候设置:java -Xmx1024m -Xms1024m -jar xxx.jar

3、tomcat 容器设置:tomcat 启动执行的是 tomcat/bin/startup.sh,startup.sh 执行的是 catalina.sh,所以要在 catalina.sh 中进行设置,修改JAVA_OPTS配置。

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"

3b90c9e54b1a89a8d7c97274a1fcf101.png

以上各参数含义:

-server:表示这是服务器虚拟机

-Xms8g:设置 JVM 最小内存为 8g,可以与 -Xmx 相同,以避免每次垃圾回收完成后 JVM 重新分配内存

-Xmx8192m:设置 JVM 最大可用内存为 8g

-XX:NewRatio=4:设置新生代(包括 Eden 和两个 Survivor 区)与老年代的比值,设置为 4,则表示新生代:老年代=1:4,也就是新生代占整个堆内存的1/5。

-XX:SurvivorRatio=8:新生代中 Eden 区与 Survivor 区的比值,设置为 8 表示 Eden:(S0+S1)=2:8,也就是一个 Survivor 区占整个新生代的 1/10。

-XX:+UseConcMarkSweepGC:设置老年代使用 CMS 并发收集器,它的主要适合场景是对响应时间的需求大于对吞吐量的需求,能够承受垃圾回收线程和应用线程共享 CPU 资源,并且应用中存在比较多的长生命周期对象。CMS 并发收集器的目标是尽量减少应用的暂停时间(STW),减少 Full GC 发生的概率,利用和应用程序线程并发的垃圾回收线程来标记清除老年代内存。

-XX:ParallelGCThreads=8:表示 JVM 在进行并行 GC 的时候,用于 GC 的线程数

-XX:+HeapDumpOnOutOfMemoryError:启动堆内存溢出打印,当 JVM 堆内存发生溢出时(OOM),自动生成 dump 文件

-XX:HeapDumpPath:生成DUMP文件的路径,表示在 /usr/local/gclogs/dump 目录生成一个 heap.hprof文件;如不设置,默认存储在 jvm 运行环境目录。

-XX:+PrintGCDetails:打印 GC 详细信息,记录 GC 日志并不会特别地影响 Java 程序性能

-XX:+PrintGCDateStamps:允许在每个GC上打印日期戳

-Xloggc:指定 GC log 的位置为 /usr/local/gclogs,将详细的 GC 事件信息重定向到 gc.log 文件

-XX:+DisableExplicitGC:忽略手动调用 GC 的代码使得 System.gc() 的调用不会触发任何 GC

通过 jinfo 实时调整某个 java 进程的参数(只有被标记为 {manageable} 的参数可以被实时修改),后续详细介绍该命令。

3

查看 JVM 参数,打印 XX 选项及值

0770e8b5a61afaba80a3538ad0a62549.png

-XX:+PrintCommandLineFlags  表示启用打印 JVM 设定的值,例如堆空间大小和选定的垃圾收集器

-XX:+PrintFlagsInitial 表示打印出所有 XX 选项的默认值

-XX:+PrintFlagsFinal 表示打印出所有 XX 选项在程序运行时实际的值

在程序运行前设置以上的选项,如下图:

70963f4fc54b16768178718290e62399.png

运行可以打印出类似下面的内容,只截取了一部分信息:

94e8d86e8612daac353256ed78fe6c38.png

输出的值 "=" 表示默认值,":=" 表示被用户或 JVM 修改后的值,{product} 表示官方支持的 JVM 内部选项,{manageable} 表示外部定义的并且是可动态写入的。

在开发工具启动参数里设置:-Xmx20M -Xms10M -XX:+PrintFlagsFinal,我们来观察默认的参数值和修改后的参数值,如下:

e0870c7af15c1d084cfb74e506ab4dff.png

结束语。

相关文章:

掌握 JVM 的参数及配置

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;它负责执行Java程序&#xff0c;并提供一系列参数和配置选项&#xff0c;可以调整Java程…...

如何高性能、高效率地实现3D Web轻量化?

随着互联网和Web技术的发展&#xff0c;3D Web应用的需求越来越多。然而&#xff0c;复杂的3D模型在Web上展示和交互通常需要大量的带宽和计算资源。为了解决这一问题&#xff0c;HOOPS技术作为一套专业的3D图形技术开发工具包&#xff0c;发挥着关键作用。本文将探讨HOOPS技术…...

【Linux 网络】 传输层协议之TCP协议 TCP的三次握手和四次挥手

TCP协议 TCP协议段格式谈谈什么是 “可靠” 和 “不可靠”TCP协议段——序号与确认序号TCP协议段——窗口大小TCP协议段 —— 六个标志位确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制TCP 的三次握手四次挥手TCP三次握手四次挥手总结图 滑动窗口流量控制拥…...

git仓库与本地暂存区的同步问题

向下同步 对于远程仓库的项目&#xff0c;初始化一个配置文件&#xff0c;配置远程仓库及相关信息&#xff0c;赋值远程仓库的地址&#xff0c;使用git pull命令即可拉取仓库代码。 git pull [remote_addr] 该部分完成向下同步 向上同步 向上同步时会遇到很多的问题&#xf…...

MATLAB算法实战应用案例精讲-【图像处理】图像分类模型-LeNetAlexNetVGG

目录 LeNet 模型介绍 模型结构 模型实现 模型特点 模型指标 AlexNet...

ArcGIS API for JavaScript 4.x 教程(二)切换基础地图图层

了解如何更改地图中的基础地图图层。 基础地图图层&#xff1a; 基础地图层是用于访问和显示来自基础地图层服务的数据的层。它为地图或场景提供视觉和地理上下文&#xff0c;通常包含具有管理边界和地名的全局数据。 基本地图图层服务提供了许多基本地图图层样式&#xff0c;例…...

SpringBoot——如何读写使用JSON文件保存的数据

文章目录 1. 将数据写入JSON文件2. 从JSON文件读取数据2.1 读取单个对象2.2 读取对象列表 1. 将数据写入JSON文件 要将数据写入JSON文件&#xff0c;可以使用Spring Boot中提供的Jackson库。Jackson库是处理JSON的Java库&#xff0c;可以轻松地将对象转换为JSON字符串&#xff…...

SDU Crypto School - 计算不可区分性1

Encryption: Computational security 1-4 主讲人&#xff1a;李增鹏&#xff08;山东大学&#xff09; 参考教材&#xff1a;Jonathan Katz, Yehuda Lindell, Introduction to Modern Cryptography - Principles and Protocols. 什么是加密 首先&#xff0c;加密方案的目的在于…...

win11 vscode torch 编译遇错

1. 错误内容&#xff1a; Failed to build pc-util ERROR: Could not build wheels for pc-util, which is required to install pyproject.toml-based projects NativeCommandExitException: Program “pip.exe” ended with non-zero exit code: 2.问题分析&#xff1a; pip出…...

Markdown系列之Flowchat流程图

一.欢迎来到我的酒馆 介绍Markdown的Flowchart流程图语法。 目录 一.欢迎来到我的酒馆二.什么是Flowchart三.更进一步 二.什么是Flowchart 2.1 Flowchart是一款基于javascript的工具&#xff0c;使用它可以用代码创建简单的流程图。具体信息可以查看flowchart官网&#xff1a;…...

小程序wx:else提示 Bad attr `wx

问题&#xff1a;以下wx:for里的wx:if &#xff0c; wx:else 会报这个错&#xff1a;Bad attr wx <scroll-view class"scroll1" scroll-x enable-flex"true"><view wx:if"{{playlist.length>0}}" class"item" wx:for"…...

halcon 学习笔记

图像的参数 图形参数 Iconic, 包括 image, region, XLD 1.1 image 图像由一个或者多个通道组成&#xff0c;是大小相同的矩阵&#xff0c;包含各种像素类型的灰度值 在图像显示界面&#xff0c;按ctrl健&#xff0c;可以查看当前的像素值 灰度图 一个通道像素点存放在一个矩…...

vscode 设置滑条颜色

1. 默认的滑条是灰黑色的&#xff0c;很难看的清 2. 左下角&#xff0c;打开VS Code 设置功能 3. 输入命令 workbench color&#xff0c;回车 4. 找到工作台&#xff1a;自定义颜色设置&#xff0c;打开设置文件 setting.json 5. 打开配置文件 6. 添加颜色配置 "workben…...

农业大数据可视化平台,让农业数据更直观展现!

农业大数据可视化平台是指利用大数据技术和可视化工具&#xff0c;对农业领域的数据进行收集、整理、分析和展示的平台。它可以帮助农业从业者更好地理解和利用农业数据&#xff0c;提高农业生产效率和决策水平。 农业大数据可视化平台通常具有以下特点和功能&#xff1a; 数据…...

【沁恒蓝牙mesh】CH58x USB功能开发记录(二)

本文主要介绍基于【沁恒蓝牙mesh】CH58x USB功能, BLE_USB 工程 解析与修改,主要实现 手机app与节点的数据双向通讯 【沁恒蓝牙mesh】CH58x USB功能开发记录(二) 1. BLE_USB 工程1.1 数据转发接口1.2 PC端测试1.3 手机APP端测试1.4 工程修改实现双向通讯1.4.1 【测试原理图…...

go的type关键字

在 Go 语言中&#xff0c;type 关键字用于定义自定义数据类型&#xff08;类型别名、结构体、接口等&#xff09;&#xff0c;以及获取某个变量的类型信息。type 关键字有多种用法&#xff0c;下面将详细解释这些用法&#xff1a; 1. 自定义数据类型 使用 type 关键字可以定义…...

Linux 信号signal处理机制

Signal机制在Linux中是一个非常常用的进程间通信机制&#xff0c;很多人在使用的时候不会考虑该机制是具体如何实现的。signal机制可以被理解成进程的软中断&#xff0c;因此&#xff0c;在实时性方面还是相对比较高的。Linux中signal机制的模型可以采用下图进行描述。 每个进程…...

SpringBoot3之Web编程

标签&#xff1a;Rest.拦截器.swagger.测试; 一、简介 基于web包的依赖&#xff0c;SpringBoot可以快速启动一个web容器&#xff0c;简化项目的开发&#xff1b; 在web开发中又涉及如下几个功能点&#xff1a; 拦截器&#xff1a;可以让接口被访问之前&#xff0c;将请求拦截…...

策略模式(C++)

定义 定义一系列算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可互相替换((变化)。该模式使得算法可独立手使用它的客户程序稳定)而变化(扩展&#xff0c;子类化)。 ——《设计模式》GoF 使用场景 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多…...

【每日一题Day290】LC1281整数的各位积和之差 | 模拟

整数的各位积和之差【LC1281】 给你一个整数 n&#xff0c;请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 思路&#xff1a;简单模拟 循环取余&#xff0c;计算「各位数字之积」与「各位数字之和」&#xff0c;最后求差返回 实现 class Solution {public…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...