JVM内存结构

本文详细介绍了JVM堆内存(包括新生代、老年代)、方法区、JIT缓存的内存结构,以及关键的内存配置参数,如Xss、Xmx、Xmn等,并提供了生产环境优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、JVM堆内存结构图

在这里插入图片描述
从图上可知,JVM堆内存大体分为两类:新生代、老年代

1.1 新生代内存

新生代内存又可以划分为两个区域:Eden区、Survivor区;
Survivor区又可以划分两个区域:From区、To区,并且这两个区占得内存比是1:1

1.1.1 特性(默认配置下)
  1. Eden区和From区默认比例是8:1
  2. From区和To区比例一定是1:1

1.2 老年代内存

  1. 新生代和老年代默认比是1:2

结论

  • Eden区:Survivor区:Old区 = 4:1:10
  • Eden区:From区:To区:Old区=8:1:1:20

二、JVM方法区内存结构

在这里插入图片描述
方法区的内存结构相对比较简单:class spacenon-class space

  • class space:存储如类名、方法入口等等,其内存在默认配置下会被初始化为1G,但是默认没有上限。
  • non-class space:存储类的注解、类的字节码源信息等

三、JIT缓存内存结构

在这里插入图片描述
JIT内存结构受-XX:ReservedCodeCacheSize参数影响,当参数>=240m就会产生三块空间,当参数<240m则只有一个空间

四、JVM内存配置参数

  • Xss=1m:表示JVM每个线程所占用的最大内存(计数器、JVM虚拟机栈、本地方法栈之和),Linux64位操作系统下,默认值就是1Mb
  • -Xmx1024m: 表示JVM内存最大是1024M;
  • -Xms1024m:表示JVM内存最小是1024M;
  • -Xmn200m:表示新生代内存是200M,则剩下的内存就是老年代;
  • -XX:SurvivorRadio=3:表示Eden区/From区的比值是3,所以如果Eden区内存是200Mb,则From区内存就是200/3=67Mb,Survivor区内存就是200 / 3 * 2 = 133Mb
  • -XX:NewRatio=2:1:表示老年代和新生代的内存比值是2:1
  • -XX:MaxNewSize=100Mb:表示设置新生代的最内存值是100Mb
  • -XX:NewSize=100Mb:表示设置新生代的最内存是100Mb
  • -XX:CompressedClassSpaceSize=100Mb:表示设置JVM方法区class space 的最大内存大小
  • -XX:MaxMatespace=2048m:表示设置元空间(JDK8之后方法区的叫法)的最大内存为2G。
  • -XX:ReservedCodeCacheSize=240m:控制JIT即时编译器的缓存空间最大为240Mb

建议生产环境将JVM内存最大值和最小值设置为相同值,避免内存扩容带来的性能损耗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值