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虚拟机(JVM)的启动参数可以用来调整其行为、性能和资源分配。以下是一些常见的JVM启动参数: 内存参数设置 初始化堆内存以满足应用程序需求是最常见的与性能相关的实践之一。 …...
单元测试、集成测试、系统测试区别
一、测方法不同 1、单元测试属于白盒测试范畴。 2、集成测试属于灰盒测试范畴。 3、系统测试属于黑盒测试范畴。 二、考察范围不同 1、单元测试主要测试单元内部的数据结构、逻辑控制、异常处理等。exception handling 2、集成测试主要测试模块之间的接口和接ロ数据传递关…...

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

【vue-小知识】var、let 和 const之间的区别
文章目录 结论1、重复定义变量名var:允许重复定义变量名let和const:不可以重复定义变量名 2、修改值var:允许修改值let:允许修改值const:不允许修改值,会报错 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相比,RecyclerView引入了更加复杂的布局排列和动画支持,使得创建高度定制化的列表和网格布局变得更加简单。…...

“低代码+平台”:驱动企业数字化转型与创新的新引擎
“低代码平台”作为一种新兴的软件开发范式,正逐渐成为企业快速响应市场变化、优化业务流程、提升数字化水平的重要手段。它的价值在于,将传统软件开发的复杂性大大降低,赋予了非技术人员或轻量级开发者快速构建应用的能力,并能灵…...
python代码截取任意页的pdf
python代码把截取任意页的pdf:比如你有一个pdf文件1.pdf,共有30页,但是,你想把其中的10-20页截取出来保存成新的pdf,名为2.pdf,可以使用下面代码 from PyPDF2 import PdfReader, PdfWriter# 输入和输出文件…...
速盾:cdn加速后真实ip会暴漏吗?
CND(内容分发网络)是一种通过将内容分发到全球各地的服务器来加速网站访问的技术。当用户请求访问一个网站时,CDN会将静态资源(如图片、视频、脚本等)缓存在离用户最近的服务器上,从而提高网站的加载速度。…...

ATA-5310前置微小信号放大器在红外线传感器中的应用
当涉及到红外线传感器时,前置微小信号放大器扮演着关键的角色。红外线传感器是一种用于探测和测量红外辐射的设备,它们通常用于热成像、物体检测、温度测量、动作检测等应用中。前置微小信号放大器在红外线传感器中的应用具有重要意义,下面将…...
【黑马程序员】Python多任务
文章目录 多进程多进程使用流程导入包Process进程类说明 获取进程编号目的常用操作 获取进程名进程注意点进程之间不共享全局变量主进程会等待子进程结束之后再结束设置守护主进程 多线程threading模块线程注意点线程之间执行是无序的主线程会等待所有的子线程执行结束在结束线…...
前端与后端具备能力的区别
前端与后端具备能力的区别 在软件开发领域,前端和后端是两个至关重要的部分,它们各自承担着不同的职责和任务。前端主要负责与用户交互的界面设计和实现,而后端则负责处理数据和业务逻辑。因此,前端和后端开发者需要具备不同的技…...

【蓝桥杯】第15届蓝桥杯青少组stema选拔赛C++中高级真题答案(20240310)
一、选择题 第 1 题 第 2 题 表达式1000/3的结果是( A )。 A.333 B.333.3 C.334 D.333.0 第 3 题 下列选项中,判断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、农业生产现代化转型-》农机:新疆尉犁县超级棉田里,农业无人机、采棉打包机、棉田打顶机器人等现代化机械设施,让两个人收种3000亩棉田成为了可能(金融机构可以结合农机购置补贴…...
React.js快速入门教程
React.js 是一个流行的 JavaScript 库,用于构建用户界面。以下是一个简单的 React.js 快速入门教程: 步骤 1:安装 Node.js 和 npm 首先,确保你的计算机上安装了 Node.js 和 npm(Node 包管理器)。你可以从…...
Jenkins构建时报错:Build step ‘Execute shell‘ marked build as failure
1.磁盘空间不足导致报错。 2.默认情况下,Jenkins采取 /bin/sh -xe 这种方式 -x 将打印每一个命令;另一个选项 -e,当任何命令以非零值(当任何命令失败时)退出代码时,这会导致shell立即停止运行脚本。 解决…...

C语言复杂度(个人笔记)
时间复杂度主要衡量一个算法的运行快慢. 空间复杂度主要衡量一个算法运行所需要的额外空间. 时间复杂度 算法中的基本操作的执行次数,为算法的时间复杂度. 只需要大概执行次数,我们使用大O的渐进表示法。(看谁对数学表达式的影响最大) 空间复杂度 是…...
与AI机器共存的三个层次
概述 当前我们无法不与AI机器共存。 或者说,在不远的近日,不能与AI机器和谐共处的人,就有可能会被淘汰。 新的生产革命,或许已经到来,只是我们身在此山中,当局者迷而已。 三个层次 API(Application Pr…...

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

腾讯云COS - 前端上传文件到 COS 跨域问题
问题描述 原因分析 因为我本地的地址是:http://localhost:9528 而发送请求时的地址是:http://132-1307119153.cos.ap-beijing.myqcloud.com/tu.jpg 域名不同,自然而然就出现了跨域的问题! 解决方案 先点击对象存储 - 安全设置…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...