JVM核心参数图解-整理

news2024/12/23 16:58:09

一、VM核心参数

在JVM里有几个比较核心的参数,今天就主要来讲这几个:

  • -Xms:JVM初始堆内存大小
  • -Xmx:JVM堆内存的最大值
  • -Xmn:JVM中新生代大小
  • -XX:PermSize:永久代大小
  • -XX:MaxPermSize:永久代最大值
  • -Xss:JVM每个线程的大小

下面我们就对上面列举的几个核心参数进行说明。

1、-Xms和-Xmx分别表示JVM初始堆内存大小和堆内存最大值

这两个参数主要作用就是限定JVM中堆内存的大小。

2、-Xmn:表示JVM堆内存中新生代的大小

一般设置完堆内存,然后用堆内存-新生代大小=老年代大小

3、-XX:PermSize和-XX:MaxPermSize,分别代表永久代的大小和永久代的最大值

如果在JDK8以后,永久代被元空间替代了,所以这两个参数变成了-XX:MetaspaceSize和-XX:MaxMetaspaceSize。这两个参数就是限定永久代的大小。

实际用元空间代替永久代可以避免OOM,因为元空间用的是本地内存,不同于永久代是有上限的。更深层的原因是要合并HotSpot和JRockit,然后JRockit没有永久代,所以就使用了元空间。

4、-Xss:这个参数限定了JVM每个参数的大小

每个线程都有自己一个虚拟机栈,每次执行一个方法,就会把方法的栈帧压入栈中,方法执行完,该栈帧就会从线程里的栈出栈

启动系统的时候配置JVM参数

在自己的编译器(以Idea举例)设置启动时JVM参数,可以加快Idea的编译速度

在启动的main类选择Edit Configurations,然后在VM options配置JVM参数即可

除了以上的方法外,还有第二种方法是打开idea.vmoptions修改配置信息,一般在idea的Help菜单下的Edit Custom VM Options

把编译器的堆内存改大就可以使编译速度提高(当然也不是绝对的,大部分情况下可以

线上部署应用的时候如何指定JVM参数

这个其实就很简单,举例采用"java -jar"的方式启动应用,可以采用以下的方式:

java -Xms512M -Xmx512M -Xmn256M -Xss1M -XX:PermSize=128M -XX:MaxPermSize=128M -jar test.jar

其他方式部署的也是可以配置启动参数,感兴趣可以自行了解。

二、新生代,老生代等

HotSpot JVM堆

从GC的角度可以将HotSpot JVM堆分为新生代、老年代。其中新生代默认占1/3堆空间,老年代默认占2/3堆空间。新生代又分为Eden 区、SurvivorFrom 区和SurvivorTo 区,Eden区默认占8/10新生代空间,SurvivorFrom区和SurvivorTo区默认分别占1/10新生代空间,如图所示。

1. 新生代:Eden区、SurvivorTo区和SurvivorFrom区

JVM新创建的对象(除大对象外)会被存放在新生代,默认占1/3堆内存空间。由于JVM会频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。新生代又分为Eden区、SurvivorTo区和SurvivorFrom区,如下所述。

(1)Eden区:Java新创建的对象首先会被存放在Eden区,如果新创建的对象属于大对象,则直接将其分配到老年代。大对象的定义与具体的 JVM版本、堆大小和垃圾回收策略有关,一般为2KB~128KB,可通过XX:PretenureSizeThreshold设置其大小。在Eden区的内存空间不足时会触发MinorGC,对新生代进行一次垃圾回收。
(2)SurvivorTo区:保留上次MinorGC时的幸存者。
(3)SurvivorFrom区:将上次MinorGC时的幸存者作为这次MinorGC的被扫描者。

新生代的GC过程叫作MinorGC,采用复制算法实现,具体过程如下。

(1)把在Eden区和SurvivorFrom区中存活的对象复制到SurvivorTo区。如果某对象的年龄达到老年代的标准(对象晋升老年代的标准由XX:MaxTenuringThreshold设置,默认为15),则将其复制到老年代,同时把这些对象的年龄加1;如果SurvivorTo区的内存空间不够,则也直接将其复制到老年代;如果对象属于大对象(大小为2KB~128KB的对象属于大对象,例如通过XX:PretenureSizeThreshold=2097152设置大对象为 2MB,1024×1024×2byte=2097152byte=2MB),则也直接将其复制到老年代。
(2)清空Eden区和SurvivorFrom区中的对象。
(3)将SurvivorTo区和SurvivorFrom区互换,原来的SurvivorTo区成为下一次GC时的SurvivorFrom区。

2. 老年代

老年代主要存放长生命周期的对象和大对象。老年代的GC过程叫作MajorGC。在老年代,对象比较稳定,MajorGC不会被频繁触发。在进行MajorGC前,JVM会进行一次MinorGC,在MinorGC后对象仍然出现在老年代且当老年代空间不足或无法找到足够大的连续内存空间分配给新创建的大对象时,会触发MajorGC进行垃圾回收,释放JVM的内存空间。

MajorGC采用标记清除算法,该算法首先会扫描所有对象并标记存活的对象,然后回收未被标记的对象,并释放内存空间。因为要先扫描老年代的所有对象再回收,所以MajorGC的耗时较长。MajorGC的标记清除算法容易产生内存碎片。在老年代没有内存空间可分配时,会抛出Out Of Memory异常。


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

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

相关文章

拓世科技集团到访考察吉安青原区:共谋AIGC数字经济产业园发展大计

千帆竞发立潮头,奋勇争先谋发展,在中国这片广袤的大地上,先行者的每一次拓进都是历史的华章,远谋者的每一次交汇都是未来的预言。当红色江西大地与现代科技脉搏共振,当青原区的绿意拥抱拓世科技的AIGC科技,…

Mysql高级——索引

索引 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构 上…

视频接口冷知识

常用视频接口的分辨率和带宽 VGA接口:VGA接口是一种传输模拟信号的视频接口,它只能支持视频传输,不支持音频传输。VGA接口的最大支持分辨率是2048x1536px。HDMI接口:HDMI接口是一种传输数字信号的视频接口,它可以同时…

【基于Cocos Creator 3.5的赛车游戏】8.引入触摸屏幕事件并简单的控制小车

转载知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具 项目地址:赛车小游戏-基于Cocos Creator 3.5版本实现: 课程的源码,基于Cocos Creator 3.5版本实现 上一张您已经对Cocos的坐标系有了了解。这一章我们将让小车能…

MFC-GetAdaptersAddresses获取网卡信息

需要:#pragma comment(lib, "IPHLPAPI.lib") GetAdaptersAddresses函数参数说明 ULONG bufferSize = 0;ULONG result = ::GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nullptr, nullptr, &bufferSize);/*参数1:ULONG Family 网络协议族,此参…

【linux】Linux wps字体缺失、加粗乱码解决

解决wps字体缺失问题 1、下载字体包 git clone https://github.com/iamdh4/ttf-wps-fonts.git2、创建单独放置字体的目录 mkdir /usr/share/fonts/wps-fonts3、复制字体到系统目录下 cp ttf-wps-fonts/* /usr/share/fonts/wps-fonts4、修改字体权限 chmod 644 /usr/share/f…

2023年Java毕业设计选题推荐,1000道创新创意Java毕业设计题目推荐,避免踩坑

大家好,我是程序员徐师兄,最近有很多同学咨询,说毕业设计了,不知道选怎么题目好,有哪些是想需要注意的。 确实毕设选题实际上对很多同学来说一个大坑, 每年挖坑给自己跳的人太多太多。选到合适的题目的话&…

python pycharm 下载 安装 (1)

pycharm 官网 JetBrains: 软件开发者和团队的必备工具 python 官网 Python Release Python 3.11.5 | Python.org 软件安装 pycharm python 终端安装 然后进行全局配置 打开pycahrm 可以在扩展里边搜索中文翻译 测试

基于分布式系统结构下Nacos配置中心的应用

前言 在上一篇nacos初始中,已经描述过Nacos的基本知识,在这篇博客里记录的是Nacos配置中心的使用。 Nacos配置中心的作用 集中化配置管理:Nacos配置中心支持将应用程序的配置信息集中管理,包括常规的属性配置、文本配置、JSON配…

界面控件DevExtreme DateRangeBox组件发布,支持日期范围选择!

在最新的v23.1版本中,DevExpress官方已经正式发布了DevExtreme DateRangeBox小部件,支持所有JavaScript框架,包括Angular、React、Vue和jQuery。这个新的控件允许最终用户选择一个日期范围,该组件继承了DateBox组件的特性&#xf…

【笔记】简单算法查找、排序的思路和优化

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

李佳琦翻车,眉笔比黄金还贵?美妆品牌如何巧用AIGC降本增效?

又一个顶流翻车了。 9月10日,像往常一样,李佳琦站在镜头前,手中握着一支某国货品牌的眉笔,向消费者激情满满地进行介绍。却不曾想,下一秒却引发了风暴,仿佛随着键盘的敲击声一同汇聚,直指这位“…

如何使用ArcGIS中的Arcmap进行矢量和栅格数据裁剪?

在地理信息系统(GIS)中,我们经常需要处理各种空间数据,而矢量和栅格数据是最常见的两种数据类型。有时候,我们需要对数据进行裁剪,以提取出我们需要的特定区域的数据。本文将介绍如何使用ArcGIS中的Arcmap软件对矢量和栅格数据进行…

回溯系列--11个题

组合问题 第77题. 组合 题⽬链接:https://leetcode-cn.com/problems/combinations/ 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 ⽰例: 输⼊: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] class Solution …

分享一下蛋糕店在微信小程序上可以实现什么功能

蛋糕店在微信小程序上可以实现的功能 微信小程序作为一种新型的商业模式,正逐渐成为各行各业拓展线上业务的重要手段。对于蛋糕店来说,开发微信小程序可以实现以下功能: 一、展示产品和服务 微信小程序可以作为蛋糕店的产品展示平台&#x…

树状数组总结

【使用总结】 经典用法:单点更新o(logn),区间查询/区间最大值(1~n,求sum),o(logn) 扩展用法:区间修改,如对[x,y]区间加上一个数k 模板题:力扣(LeetCode)官网 - 全球极…

操作指南 | 如何参与Moonbeam投票委托

投票委托允许没有时间或者专业度一般的用户能够在治理中拥有话语权。该功能加强了决策流程,并且确保更大范围地代表社区利益。 通过Moonbeam委托平台,你需要 $GLMR 和一个相兼容的钱包。此教程使用MetaMask示范。 如何参与投票委托 前往http://delega…

Python数据容器的总结

1、数据容器分类 数据容器(一共五个)可以从以下视角进行简单的分类: 是否支持下标索引 支持:列表、元组、字符串(序列类型) 不支持:集合、字典(非序列类型&#xff…

基于SSM的校园代购服务订单管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

日本SolarView Compact光伏发电测量系统 目录遍历漏洞复现(CVE-2023-40924)

日本SolarView Compact光伏发电测量系统 目录遍历漏洞复现CVE-2023-40924 一. 系统简介二.漏洞描述三.影响版本四.fofa查询语句五.漏洞复现六.POC&EXP七、修复建议 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或…