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

JVM常见启动参数

目录

内存参数设置

垃圾收集

内存溢出

其他杂项

总结


java虚拟机(JVM)的启动参数可以用来调整其行为、性能和资源分配。以下是一些常见的JVM启动参数:

内存参数设置

初始化堆内存以满足应用程序需求是最常见的与性能相关的实践之一。

这就是为什么我们应该指定最小和最大堆大小。我们可以使用以下参数来实现这一点:

-Xms<heap size>[unit] 
-Xmx<heap size>[unit]

在这里,单位表示我们将初始化内存的单位(由堆大小表示)。我们可以将单位标记为‘g’表示GB,‘m’表示MB,‘k’表示KB。

例如,如果我们想要分配最小的2GB和最大的5GB给JVM,我们需要写:

-Xms2G -Xmx5G

从Java 8开始,元数据空间(Metaspace)的大小不再固定。一旦达到全局限制,JVM会自动增加其大小。然而,为了克服任何不必要的不稳定性,我们可以使用以下方式设置Metaspace大小:

-XX:MaxMetaspaceSize=<metaspace size>[unit]

在这里,元空间大小表示我们想要分配给元空间的内存量。

根据Oracle的指南,除了总可用内存之外,第二个最具影响力的因素是为年轻代保留的堆的比例。默认情况下,YG的最小大小为1310 MB,最大大小为无限制。

我们可以显式地为它们分配:

-XX:NewSize=<young size>[unit] 
-XX:MaxNewSize=<young size>[unit]

垃圾收集

为了提高应用程序的稳定性,选择正确的垃圾收集算法至关重要。

JVM有四种类型的GC实现:

串行垃圾收集器(Serial Garbage Collector)

并行垃圾收集器(Parallel Garbage Collector)

CMS垃圾收集器(CMS Garbage Collector)

G1垃圾收集器(G1 Garbage Collector)

我们可以使用以下参数声明这些实现:

-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+USeParNewGC
-XX:+UseG1GC

GC日志 

为了严密监控应用程序的健康状况,我们应该始终检查JVM的垃圾收集性能。最简单的方法是以人类可读的格式记录GC活动。

使用以下参数,我们可以记录GC活动:

-XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=< number of log files > 
-XX:GCLogFileSize=< file size >[ unit ]
-Xloggc:/path/to/gc.log

UseGCLogFileRotation参数指定日志文件的滚动策略,类似于log4j、s4lj等。NumberOfGCLogFiles参数表示单个应用程序生命周期内可以写入的最大日志文件数。GCLogFileSize参数指定文件的最大大小。最后,loggc指定了日志文件的位置。

在这里要注意的一点是,还有两个JVM参数可用(-XX:+PrintGCTimeStamps和-XX:+PrintGCDateStamps),我们可以使用它们在GC日志中打印日期时间戳。

例如,如果我们想要分配最多100个GC日志文件,每个文件最大大小为50 MB,并且我们想要将它们存储在'/home/user/log/'位置,我们可以使用以下语法:

-XX:+UseGCLogFileRotation  
-XX:NumberOfGCLogFiles=10
-XX:GCLogFileSize=50M 
-Xloggc:/home/user/log/gc.log

然而,问题在于始终会使用一个额外的守护线程在后台监视系统时间。这种行为可能会产生一些性能瓶颈,因此最好不要在生产环境中使用这个参数。

内存溢出

对于大型应用程序来说,面临内存溢出错误并导致应用程序崩溃是非常常见的。这是一个非常关键的场景,也很难复制以排查问题。

这就是为什么JVM提供了一些参数将堆内存转储到一个物理文件中,以便我们稍后使用它来查找内存泄漏的原因:

-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=./java_pid<pid>.hprof
-XX:OnOutOfMemoryError="< cmd args >;< cmd args >" 
-XX:+UseGCOverheadLimit

一些需要注意的要点:

  • HeapDumpOnOutOfMemoryError指示JVM在发生OutOfMemoryError时将堆转储到物理文件中。
  • HeapDumpPath表示文件将被写入的路径。可以给出任何文件名;但是,如果在名称中找到<pid>标记,当前进程导致内存不足错误的进程ID将附加到文件名中,并使用.hprof格式。
  • OnOutOfMemoryError用于在发生内存不足错误时执行紧急命令。我们应该在cmd args的空间中使用适当的命令。例如,如果我们希望在发生内存不足时立即重启服务器,可以设置参数:
-XX:OnOutOfMemoryError="shutdown -r"
  • UseGCOverheadLimit是一个策略,它限制了在抛出OutOfMemory错误之前VM在GC中花费的时间的比例。

32/64 Bit 

        在安装了32位和64位软件包的操作系统环境中,JVM会自动选择32位的环境软件包。

如果我们想要手动将环境设置为64位,可以使用以下参数:

-d<OS位数>

其中,OS位数可以是32或64。我们可以在这里找到更多关于此的信息。

其他杂项

  • -server:启用“Server Hotspot VM”。在64位JVM中,我们默认使用此参数。
  • -XX:+UseStringDeduplication:Java 8u20引入了这个JVM参数,用于通过创建太多相同字符串的实例来减少内存的不必要使用。这通过将重复的字符串值减少到一个全局char[]数组来优化堆内存。
  • -XX:+UseLWPSynchronization:设置基于LWP(轻量级进程)的同步策略,而不是基于线程的同步。
  • -XX:LargePageSizeInBytes:设置用于Java堆的大页大小。它以GB/MB/KB为参数。使用较大的页面大小,我们可以更好地利用虚拟内存硬件资源;但是,这可能会导致PermGen的空间大小更大,从而迫使我们减小Java堆空间的大小。
  • -XX:MaxHeapFreeRatio:设置GC后堆空闲的最大百分比,以避免收缩。
  • -XX:MinHeapFreeRatio:设置GC后堆空闲的最小百分比,以避免扩展。为了监视堆使用情况,我们可以使用JDK附带的VisualVM。
  • -XX:SurvivorRatio:Eden区/幸存者空间大小的比率。例如,-XX:SurvivorRatio=6将每个幸存者空间和Eden空间之间的比率设置为1:6。
  • -XX:+UseLargePages:如果系统支持,则使用大页内存。请注意,OpenJDK 7在使用此JVM参数时可能会崩溃。
  • -XX:+UseStringCache:启用String池中常用字符串的缓存。
  • -XX:+UseCompressedStrings:对可以表示为纯ASCII格式的String对象使用byte[]类型。
  • -XX:+OptimizeStringConcat:在可能的情况下优化字符串连接操作。

总结

        在本文中,我们学习了一些重要的JVM参数,这些参数可以用来调整和改善一般应用程序的性能。我们也可以将其中一些用于调试目的。

相关文章:

JVM常见启动参数

目录 内存参数设置 垃圾收集 内存溢出 其他杂项 总结 java虚拟机&#xff08;JVM&#xff09;的启动参数可以用来调整其行为、性能和资源分配。以下是一些常见的JVM启动参数&#xff1a; 内存参数设置 初始化堆内存以满足应用程序需求是最常见的与性能相关的实践之一。 …...

单元测试、集成测试、系统测试区别

一、测方法不同 1、单元测试属于白盒测试范畴。 2、集成测试属于灰盒测试范畴。 3、系统测试属于黑盒测试范畴。 二、考察范围不同 1、单元测试主要测试单元内部的数据结构、逻辑控制、异常处理等。exception handling 2、集成测试主要测试模块之间的接口和接ロ数据传递关…...

NIVision-相机图像采集

应用场景 上位机与工业相机通讯&#xff0c;控制相机抓取图像。 工业相机的通讯接口大多为USB口或网口。 USB口则直接将通讯线缆插入上位机USB端口&#xff0c;打开MAX中设备与接口一栏可以看到电脑给相机分配的资源名称&#xff1b;网口则需要将网线连接相机和上位机&#xf…...

【vue-小知识】var、let 和 const之间的区别

文章目录 结论1、重复定义变量名var&#xff1a;允许重复定义变量名let和const&#xff1a;不可以重复定义变量名 2、修改值var&#xff1a;允许修改值let&#xff1a;允许修改值const&#xff1a;不允许修改值&#xff0c;会报错 3、变量提升var : 支持变量提升let和const&…...

24.3 分布式综合应用

24.3 分布式综合应用 1. 分布式事务1.1 分布式事务1.2 分布式事务方案1. 2pc2. 其他方案1.3 Seata分布式事务框架:基于2pc1. 简介2. 启动seata服务1.4 微服务事务案例分析1. 代码分析2. 基于Seata改造2. 分布式锁2.1 简介1. redis实现...

Android学习进阶

UI组件进阶 使用RecyclerView和Adapter显示列表数据 RecyclerView是Android开发中用于显示列表数据的一个灵活且高效的组件。与其前身ListView相比&#xff0c;RecyclerView引入了更加复杂的布局排列和动画支持&#xff0c;使得创建高度定制化的列表和网格布局变得更加简单。…...

“低代码+平台”:驱动企业数字化转型与创新的新引擎

“低代码平台”作为一种新兴的软件开发范式&#xff0c;正逐渐成为企业快速响应市场变化、优化业务流程、提升数字化水平的重要手段。它的价值在于&#xff0c;将传统软件开发的复杂性大大降低&#xff0c;赋予了非技术人员或轻量级开发者快速构建应用的能力&#xff0c;并能灵…...

python代码截取任意页的pdf

python代码把截取任意页的pdf&#xff1a;比如你有一个pdf文件1.pdf&#xff0c;共有30页&#xff0c;但是&#xff0c;你想把其中的10-20页截取出来保存成新的pdf&#xff0c;名为2.pdf&#xff0c;可以使用下面代码 from PyPDF2 import PdfReader, PdfWriter# 输入和输出文件…...

速盾:cdn加速后真实ip会暴漏吗?

CND&#xff08;内容分发网络&#xff09;是一种通过将内容分发到全球各地的服务器来加速网站访问的技术。当用户请求访问一个网站时&#xff0c;CDN会将静态资源&#xff08;如图片、视频、脚本等&#xff09;缓存在离用户最近的服务器上&#xff0c;从而提高网站的加载速度。…...

ATA-5310前置微小信号放大器在红外线传感器中的应用

当涉及到红外线传感器时&#xff0c;前置微小信号放大器扮演着关键的角色。红外线传感器是一种用于探测和测量红外辐射的设备&#xff0c;它们通常用于热成像、物体检测、温度测量、动作检测等应用中。前置微小信号放大器在红外线传感器中的应用具有重要意义&#xff0c;下面将…...

【黑马程序员】Python多任务

文章目录 多进程多进程使用流程导入包Process进程类说明 获取进程编号目的常用操作 获取进程名进程注意点进程之间不共享全局变量主进程会等待子进程结束之后再结束设置守护主进程 多线程threading模块线程注意点线程之间执行是无序的主线程会等待所有的子线程执行结束在结束线…...

前端与后端具备能力的区别

前端与后端具备能力的区别 在软件开发领域&#xff0c;前端和后端是两个至关重要的部分&#xff0c;它们各自承担着不同的职责和任务。前端主要负责与用户交互的界面设计和实现&#xff0c;而后端则负责处理数据和业务逻辑。因此&#xff0c;前端和后端开发者需要具备不同的技…...

【蓝桥杯】第15届蓝桥杯青少组stema选拔赛C++中高级真题答案(20240310)

一、选择题 第 1 题 第 2 题 表达式1000/3的结果是( A )。 A.333 B.333.3 C.334 D.333.0 第 3 题 下列选项中&#xff0c;判断a等于1并且b等于1正确的表达式是( B )。 A.!((a!1)&&(b!1)) B.!((a!1)||(b!1)) C.!(a1)&&(b1) D.(a1)&&(b1) 【解析】 A…...

20240319金融读报:金融助力农业科创企业风控模型

1、农发行2023年第二十期金融债券票面利率为2.85% 2、农业生产现代化转型-》农机&#xff1a;新疆尉犁县超级棉田里&#xff0c;农业无人机、采棉打包机、棉田打顶机器人等现代化机械设施&#xff0c;让两个人收种3000亩棉田成为了可能&#xff08;金融机构可以结合农机购置补贴…...

React.js快速入门教程

React.js 是一个流行的 JavaScript 库&#xff0c;用于构建用户界面。以下是一个简单的 React.js 快速入门教程&#xff1a; 步骤 1&#xff1a;安装 Node.js 和 npm 首先&#xff0c;确保你的计算机上安装了 Node.js 和 npm&#xff08;Node 包管理器&#xff09;。你可以从…...

Jenkins构建时报错:Build step ‘Execute shell‘ marked build as failure

1.磁盘空间不足导致报错。 2.默认情况下&#xff0c;Jenkins采取 /bin/sh -xe 这种方式 -x 将打印每一个命令&#xff1b;另一个选项 -e&#xff0c;当任何命令以非零值&#xff08;当任何命令失败时&#xff09;退出代码时&#xff0c;这会导致shell立即停止运行脚本。 解决…...

C语言复杂度(个人笔记)

时间复杂度主要衡量一个算法的运行快慢. 空间复杂度主要衡量一个算法运行所需要的额外空间. 时间复杂度 算法中的基本操作的执行次数&#xff0c;为算法的时间复杂度. 只需要大概执行次数&#xff0c;我们使用大O的渐进表示法。(看谁对数学表达式的影响最大) 空间复杂度 是…...

与AI机器共存的三个层次

概述 当前我们无法不与AI机器共存。 或者说&#xff0c;在不远的近日&#xff0c;不能与AI机器和谐共处的人&#xff0c;就有可能会被淘汰。 新的生产革命&#xff0c;或许已经到来&#xff0c;只是我们身在此山中&#xff0c;当局者迷而已。 三个层次 API(Application Pr…...

python网络爬虫实战教学——requests的使用(1)

文章目录 专栏导读1、前言2、get请求3、抓取网页4、抓取二进制数据5、请求头 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN 数据分析领域优质创作者&#xff0c;专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》&#xff0c;本专栏针对…...

腾讯云COS - 前端上传文件到 COS 跨域问题

问题描述 原因分析 因为我本地的地址是&#xff1a;http://localhost:9528 而发送请求时的地址是&#xff1a;http://132-1307119153.cos.ap-beijing.myqcloud.com/tu.jpg 域名不同&#xff0c;自然而然就出现了跨域的问题&#xff01; 解决方案 先点击对象存储 - 安全设置…...

企业数据资产化全栈实战:从“入表会计”到“价值运营”的顶层架构设计(PPT)

核心导读&#xff1a; 本文深度解析了企业数据资源入表的政策背景、会计处理逻辑及资产化运营体系。我们将从“数据二十条”与财政部《暂行规定》的合规性出发&#xff0c;深入探讨数据资源作为无形资产与存货的确认标准、成本归集与计量方法&#xff0c;并延伸至数据资产的披露…...

App-Installer:如何在iOS设备上告别电脑,轻松安装第三方应用?

App-Installer&#xff1a;如何在iOS设备上告别电脑&#xff0c;轻松安装第三方应用&#xff1f; 【免费下载链接】App-Installer On-device IPA installer 项目地址: https://gitcode.com/gh_mirrors/ap/App-Installer 你是否曾在手机上找到一款心仪的IPA文件&#xff…...

单片机低功耗设计避坑指南:从SPI片选信号到MCU空闲模式配置

单片机低功耗设计避坑指南&#xff1a;从SPI片选信号到MCU空闲模式配置 在物联网设备井喷式发展的今天&#xff0c;电池供电设备的续航能力成为产品竞争力的关键指标。一位资深工程师曾分享过这样的经历&#xff1a;他们团队开发的智能农业传感器在实验室测试时续航可达6个月&a…...

终极指南:罗技鼠标宏自动压枪如何提升《绝地求生》射击精度300%

终极指南&#xff1a;罗技鼠标宏自动压枪如何提升《绝地求生》射击精度300% 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在《绝地求生》的激烈…...

2026年OpenClaw如何集成?云端10分钟喂饭级部署OpenClaw,千问大模型部署教程

2026年OpenClaw如何集成&#xff1f;云端10分钟喂饭级部署OpenClaw&#xff0c;千问大模型部署教程。本文面向零基础用户&#xff0c;完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw&#xff08;Clawdbot&#xff09;的流程&#xff0c;包含环境配置、服…...

WarcraftHelper:魔兽争霸3免费优化插件完整指南与配置教程

WarcraftHelper&#xff1a;魔兽争霸3免费优化插件完整指南与配置教程 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上频…...

为什么EuroSAT成为遥感图像分类的黄金标准?

为什么EuroSAT成为遥感图像分类的黄金标准&#xff1f; 【免费下载链接】EuroSAT EuroSAT: Land Use and Land Cover Classification with Sentinel-2 项目地址: https://gitcode.com/gh_mirrors/eu/EuroSAT 在人工智能与地球观测技术融合的时代&#xff0c;遥感图像分类…...

通义千问1.5-1.8B-Chat-GPTQ-Int4实战:Java面试题智能解答助手

通义千问1.5-1.8B-Chat-GPTQ-Int4实战&#xff1a;Java面试题智能解答助手 最近在帮团队筛选Java开发&#xff0c;也顺便辅导了几个准备跳槽的朋友&#xff0c;发现大家准备面试的方式还挺“复古”的。要么是抱着厚厚的面试宝典死记硬背&#xff0c;要么是在网上搜罗各种零散的…...

环境监测系统:空气质量与水质数据的实时分析

环境监测系统&#xff1a;守护呼吸与生命之源 在城市化与工业化快速发展的今天&#xff0c;空气质量与水质安全已成为公众关注的焦点。环境监测系统通过实时采集、分析空气和水质数据&#xff0c;为污染预警、生态保护及政策制定提供科学依据。这项技术不仅关乎人类健康&#…...

Nano-Banana多场景落地:跨境电商独立站产品页AI结构图自动化生成

Nano-Banana多场景落地&#xff1a;跨境电商独立站产品页AI结构图自动化生成 1. 引言&#xff1a;跨境电商的产品展示痛点 你有没有遇到过这样的情况&#xff1a;精心挑选的优质商品&#xff0c;因为产品图片不够吸引人&#xff0c;在独立站上的转化率始终上不去&#xff1f;…...