虚拟机内存结构

本文深入解析Java内存结构,包括年轻代、老年代、方法区、虚拟机栈和本地方法栈等部分的配置与作用。特别关注JDK1.8中永久代的废弃与元空间的引入,探讨其对内存管理的影响。

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

1.内存结构图

在这里插入图片描述

2.堆内存

-Xms128m    //初始值   等效于  -XX:InitialHeapSize=128m	
-Xmx512m  //最大值  等效于   -XX:MaxHeapSize=512m	
–XX:NewRatio =3    //新域与旧域比例为1:3

1)年轻代

-Xmn100m   //设置年轻代	
-XX:NewSize=50   //设置新域初始值	
-XX:MaxNewsize=100   //设置新域最大值。	
注:Xmn 与  NewSize 都是设置新生代的内存大小。经过测试,写在最后的一个参数起作用。

2)老年代

3)存活区

-XX:SurvivorRatio=n     //年轻代中Eden区与两个Survivor区的比值。

3.虚拟机栈内存

-Xss2m  设置线程栈的大小

4.本地方法栈内存

5.方法区内存

-XX:PermSize=32m  初始值	
-XX:MaxPermSize=64m  最大值

6.codeCache简介

Java代码在执行时一旦被编译器编译为机器码,下一次执行的时候就会直接执行编译后的代码,也就是说,编译后的代码被缓存了起来。缓存编译后的机器码的内存区域就是codeCache。这是一块独立于java堆之外的内存区域。

网址:https://blog.youkuaiyun.com/yandaonan/article/details/50844806

7.jdk1.8变动

  1. 废弃永久代(PermGen)改用元空间(Metaspace)

  2. 为什么废弃永久代(PermGen)

    1)移除永久代是为融合HotSpot JVM与 JRockit VM而做出的努力,因为JRockit没有永久代,不需要配置永久代。

    2)由于永久代内存经常不够用或发生内存泄露,爆出异常java.lang.OutOfMemoryError: PermGen

  3. 元空间(Metaspace)跟永久代(PermGen)区别

    元空间是方法区的在HotSpot jvm 中的实现,方法区主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分,但是为了与堆进行区分,通常又叫“非堆”。

    元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。理论上取决于32位/64位系统可虚拟的内存大小。可见也不是无限制的,需要配置参数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值