JVM系列(五) -内存相关的调优参数

news2024/9/27 5:53:50

一、摘要

在上篇文章中,我们详细介绍了 JVM 的内存布局。

今天这篇文章,并结合之前的介绍知识,一起了解一下 JVM 内存相关的调优参数。

二、内存设置相关的命令

所有内存溢出的问题,除了代码可能存在问题以外,更直观的问题是内存空间不足,如何通过参数来控制各区域的内存大小呢?

我们先来看一张图。

相关的常用控制参数介绍!

2.1、堆内存大小相关参数设置

1)-Xms

设置堆的最小空间大小,此值必须是 1024 的倍数且大于 1 MB。附加字母 k 或 k 表示千字节,m 或 m 表示兆字节,g 或 g 表示千兆字节,其它命令参数同理。比如-Xms1024m,表示堆的最小内存为1024M,默认值为物理内存的1/64

2)-Xmx

设置堆的最大空间大小,此值必须是 1024 的倍数且大于 2 MB。比如-Xmx2048m,表示堆最大内存为2G,默认值为物理内存的1/4

对于服务器部署,-Xms-Xmx通常建议设置为相同的值,以避免堆的内存空间频繁扩缩。

3)-XX:+HeapDumpOnOutOfMemoryError

表示可以让虚拟机在出现内存溢出异常时 Dump 出当前的堆内存转储快照

2.2、年轻代内存大小相关参数设置

1)-XX:NewSize

设置年轻代的最小空间大小,比如-XX:NewSize=256m,表示年轻代的最小内存为256M

GC 在这个区域比在其他区域执行的频率更高,如果年轻一代的设置太小,那么将进行大量的小频率 GCs。如果设置太大,那么会执行完整的GCs,这可能需要很长时间才能完成。Oracle 建议将年轻一代的大小保持在堆总大小的一半到四分之一之间。同时,该值需要小于-Xms的值。

2)-XX:MaxNewSize

设置年轻代的最大空间大小,比如-XX:MaxNewSize=512m,表示年轻代的最大内存为512M

3)-Xmn

设置年轻代堆的初始大小和最大大小,比如-Xmn128m,表示年轻代的初始大小和最大大小为128M

这个参数是对-XX:newSize-XX:MaxnewSize两个参数同时进行配置,虽然会很方便,但需要注意的是这个参数是在 JDK1.4 版本以后才加入的,低于此版本无法使用。

没有直接设置老年代的参数,但是可以设置堆空间大小和年轻代空间大小两个参数来间接控制,公式如下:

老年代空间大小 = 堆空间大小 - 年轻代空间大小
2.3、比例方式相关参数设置

1)-XX:NewRatio

设置年轻代和老年代大小之间的比例,默认值是-XX:NewRatio=2,表示Young : Old = 1 : 2

2)-XX:SurvivorRatio

设置 Eden 空间大小和 Survivor 空间大小之间的比例,默认值是-XX:SurvivorRatio=8,表示Eden : from : to = 8 : 1 : 1

3)-XX:MinHeapFreeRatio

设置 GC 事件后允许的最小可用堆空间百分比(0到100),如果可用堆空间低于此值,则堆将被扩展。默认情况下,此参数为-XX:MinHeapFreeRatio=40,表示40%

4)-XX:MaxHeapFreeRatio

设置 GC 事件后允许的最大可用堆空间百分比(0到100)。如果可用堆空间高于此值,则堆将被缩小。默认情况下,此参数为-XX:MaxHeapFreeRatio=70,表示70%

2.4、非堆区相关参数设置

1)-XX:PermSize

设置永久代的最小空间大小,比如-XX:PermSize=256m,表示永久代的最小内存为256M,默认值为物理内存的1/64

2)-XX:MaxPermSize

置永久代的最大空间大小,比如-XX:MaxPermSize=512m,表示永久代的最大内存为512M,默认值为物理内存的1/4

值得注意的是,-XX:PermSize-XX:MaxPermSize这两个参数,在 JDK1.7 及以前的版本中有效,在 JDK1.8 中已经被弃用,被-XX:MetaspaceSize-XX:MaxMetaspaceSize两个参数取代。

2.5、栈内存相关参数设置

1)-Xss

设置每个线程的栈大小,比如-Xss1024k,表示每个线程的堆栈空间大小为1024KB,通常不需要我们调整设置,默认值取决于平台:

  • Linux/ARM (32-bit):320 KB
  • Linux/i386 (32-bit):320 KB
  • Linux/x64 (64-bit):1024 KB
  • OS X (64-bit):1024 KB
  • Oracle Solaris/i386 (32-bit):320 KB
  • Oracle Solaris/x64 (64-bit):1024 KB

2)-Xoss

设置每个线程中的本地方法栈大小,比如-Xoss128k,表示每个线程中的本地方法栈大小为128KB,不过 HotSpot 并不区分虚拟机栈和本地方法栈,因此对于 HotSpot 来说这个参数是无效的。

2.6、堆外内存相关参数设置

1)-XX:MaxDirectMemorySize

此参数的含义是通过Direct ByteBuffer方式分配的最大堆外内存大小。比如-XX:MaxDirectMemorySize=60m,表示堆外最大内存不能超过60M,如果没有设置,默认是 0,JVM 会自动申请内存的大小,最大大小受限于-Xmx值。

三、内存溢出的几种场景

在上文中,我们介绍了 JVM 内存结构以及可能会发生的异常状况,下面我们一起来复现一下几种常见的内存溢出现象。

3.1、堆溢出

堆溢出测试类如下。

/**
 * 虚拟机参数: -Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError
 */
public class HeapOOMTest {
   

    public static void main(String[] args) {
   
        List<HeapOOMTest> list = new ArrayList<>();
        while (true){
   
            list.add(new HeapOOMTest());
        }
    }
}

在 IDEA 中设置 JVM 相关的参数。

运行后输出结果如下:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid21886.hprof ...
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:3210)
	at java.util.Arrays.copyOf(Arrays.java:3181)
	at java.util.ArrayList.grow(ArrayList.java:265)
	at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)
	at java.util.ArrayList

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

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

相关文章

【数据结构】排序算法篇二

【数据结构】排序算法篇二 1. 快速排序&#xff08;hoare版本&#xff09;&#xff08;1&#xff09;基本思想&#xff1a;&#xff08;2&#xff09;动态图解&#xff1a;&#xff08;3&#xff09;代码实现&#xff1a;&#xff08;4&#xff09;特性总结&#xff1a; 2. 快速…

《Few-shot Object Counting with Similarity-Aware Feature Enhancement》CVPR2023

摘要 论文提出了一种新颖的学习模块&#xff0c;该模块包含一个相似性比较模块&#xff08;Similarity Comparison Module, SCM&#xff09;和一个特征增强模块&#xff08;Feature Enhancement Module, FEM&#xff09;。通过比较支持图像和查询图像的投影特征&#xff0c;生…

运维变革:迎接数字化转型的挑战

在数字化转型的浪潮中&#xff0c;我们的技术架构和实现方式正经历着前所未有的变革。这一变革不仅重塑了业务形态&#xff0c;也对运维体系和运维组织模式产生了深远影响。近期&#xff0c;在与众多客户探讨“十四五”规划时&#xff0c;运维变革成为一个无法回避的重要话题。…

海外广告投放矩阵:如何选择合适的平台?

跨境电商的旺季即将来临&#xff0c;对于卖家们来说&#xff0c;如何进行有效的营销推广至关重要。在多渠道广告覆盖的策略下&#xff0c;选择合适的平台成为关键。那么&#xff0c;哪些平台是跨境旺季营销的首选呢&#xff1f; 一、社交媒体平台 1、Instagram 以图片和短视频…

React 通用后台管理项目

React 通用后台管理项目 项目介绍 本项目是基于React的通用后台管理系统&#xff0c;整体系统有数据可视化展示&#xff0c;数据基本的增删改查功能。项目使用 Create React App创建&#xff0c;主语言为JavaScript。在使用React框架过程中通过hook进行页面逻辑编写。后端接口…

使用SQL语句查询MySQL数据表

6.1 创建单表基本查询 1&#xff0e;Select 语句的语法格式及其功能 &#xff08;1&#xff09;Select 语句的一般格式。 Select < 字段名称或表达式列表 > From < 数据表名称或视图名称 > [ Where < 条件表达式 > ] [ Group By < 分组的字段名称…

web前端-HTML常用标签案例

体育新闻&#xff1a; 代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&g…

轻翼AI 1.1版本发布!多轮对话、多模态等等你期待的全都有

轻翼 AI 是一款低门槛的 AI 智能体搭建平台。即便是没有任何编程基础的人&#xff0c;也可以通过轻翼 AI 快速搭建出各种由LLM&#xff08;大语言模型&#xff09;驱动的企业级AI智能体。 智能体&#xff1a;拥有独立人设和岗位职责&#xff0c;熟悉企业知识且能够调用技能&…

下载Mongodb 4.2.25 版本教程

1、MongoDB 安装包的下载链接 Download MongoDB Community Server | MongoDB 进入如下截图&#xff1a; 2、查找历史版本 往下拉&#xff0c;点击“...”,找到”Archived releases”,点击进入 、 3、下载Mongodb 4.2.25 版本 找到如下图4.2.25版本下载链接&#xff0c;点击就可…

Python爬虫使用实例-漫kzhan

环境配置 pip install shutil parsel pillow pypdf1/ 单个章节 singleChapter 需要获取参数&#xff1a;chapter_id与comic_id&#xff0c;可能要sign和uid 获取请求地址 urlhttps://comic.mkzhan.com/chapter/content/v1/ # 请求地址获取请求参数 data{chapter_id:499…

LiveQing视频点播流媒体RTMP推流服务功能-支持大疆等无人机RTMP推流支持OBS推流一步一步搭建RTMP视频流媒体服务示例

LiveQing支持大疆等无人机RTMP推流支持OBS推流一步一步搭建RTMP视频流媒体服务示例 1、流媒体服务搭建2、推流工具准备3、创建鉴权直播间4、获取推流地址5、配置OBS推流6、推流及播放7、获取播放地址7.1 页面查看视频源地址7.2 接口查询 8、相关问题8.1、大疆无人机推流花屏 9、…

湖南(竞品调研)源点咨询 品牌进行有效竞争对手分析之浅见

在做品牌竞品调研时&#xff0c;首先在选择对标品牌的时候定要选择同赛道的&#xff0c;其次要深入地做好调研&#xff0c;搜集同品类、同赛道的品牌、门店调研。 同时&#xff0c;对竞品的调研一定要全面的分析他们的优势、劣势&#xff0c;充分学习他们身上的优点&#xff0…

2024 年全国大学生数学建模竞赛论文资料

获取比赛资料&#xff0c;请关注WX&#xff1a;“小何数模”&#xff01; &#xff08;需要完整B、C和E题资料请关注WX&#xff1a;“小何数模”&#xff01;&#xff0c;获取资料链接&#xff01;&#xff09; 经过团队努力&#xff0c;今年国赛数学建模B、C和E题完整论文资…

【mysql】mysql之主从部署以及介绍

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

高压喷雾车的功能与应用_鼎跃安全

在一次森林火灾中&#xff0c;位于山区的一个小型度假村附近突然起火&#xff0c;由于山风强劲&#xff0c;火势迅速蔓延&#xff0c;消防部门立即调派多辆高压喷雾车赶往现场。在扑救过程中&#xff0c;传统消防车难以进入崎岖的山路&#xff0c;但高压喷雾车凭借其高机动性顺…

调度台在现代社会中发挥哪些重要作用

在当今这个高度信息化、快节奏的社会中&#xff0c;调度台作为各行各业运行管理的中枢神经&#xff0c;正发挥着日益重要的作用。它不仅是一个物理上的工作平台&#xff0c;更是信息汇聚、指令发出、资源调配的核心节点&#xff0c;对于保障社会正常运转、提升服务效率、应对突…

百度智能云向量数据库创新和应用实践分享

本文整理自第 15 届中国数据库技术大会 DTCC 2024 演讲《百度智能云向量数据库创新和应用实践分享》 在 IT 行业&#xff0c;数据库有超过 70 年的历史了。对于快速发展的 IT 行业来说&#xff0c;一个超过 70 年历史的技术&#xff0c;感觉像恐龙一样&#xff0c;非常稀有和少…

JVM系列(六) -对象的创建过程

一、摘要 在之前的文章中,我们介绍了类加载的过程和 JVM 内存布局相关的知识。本篇我们综合之前的知识,结合代码一起推演一下对象的真实创建过程,以及对象创建完成之后在 JVM 中是如何保存的。 二、对象的创建 在 Java 中,创建对象的方式有很多种,比如最常见的通过new …

【SpringBoot】使用Redis

目录 0. 安装Redis 1. 导入依赖 2. 配置Redis 3. idea连接Redis 4. 使用Redis简单实现记录访问次数 1. 配置拦截器 2. 定义拦截器 3. 控制器类 0. 安装Redis 我使用的是本地Redis服务器&#xff0c;安装过程。安装完成后启动Redis服务。 1. 导入依赖 <!-- red…

SQL常见100面试题解析

文章目录 内容简介SQL 初级查询SQL 高级查询设计与开发总结 内容简介 本文介绍并分析了常见的 100 道 SQL 面试题&#xff0c;主要分为三个模块&#xff1a;SQL 初级查询、SQL 高级查询以及数据库设计与开发。内容结构如下图所示&#xff1a; 本文主要使用三个示例表&#xf…