当前位置: 首页 > 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…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用

摘要 神经影像技术对医学科学产生了深远的影响&#xff0c;推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下&#xff0c;基于神经血管耦合现象的多模态神经影像方法&#xff0c;通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里&#xff0c;本研…...