JVM内存模型

一.JVM堆内存结构 

堆内存是所有线程共用的内存空间,JVM 将 Heap 内存分为年轻代(Young generation)和 老年代(Old generation, 也叫 Tenured)两部分。

年轻代还划分为 3 个内存池,新生代(Eden space)和存活区(Survivor space), 在大部分 GC 算法中有 2 个存活区(S0, S1),在我们可 以观察到的任何时刻,S0 和 S1 总有一个是空的, 但一般较小,也不浪费多少空间。

Non-Heap 本质上还是 Heap,只是一般不归 GC 管理,里面划分为 3 个内存池。 Metaspace, 以前叫持久代(永久代, Permanent generation), Java8 换了个名字叫 Metaspace。 CCS, Compressed Class Space, 存放 class 信 息的,和 Metaspace 有交叉。 Code Cache存放 JIT 编译器编译后的本地机器代 码。

二.JVM 栈内存结构

栈帧是一个逻辑上的概念,具体的大小在 一个方法编写完成后基本上就能确定。 比如返回值需要有一个空间存放,每个局 部变量都需要对应的地址空间,此外还有 给指令使用的操作数栈,以及 class 指针 (标识这个栈帧对应的是哪个类的方法, 指 向非堆里面的 Class 对象)。

三.JVM 内存结构

方法中使用的原生数据 类型和对象引用地址在栈上存储;如果是对象引用,则栈中的局部变 量槽位中保存着对象的引用地址, 而实际的对象内容保存在堆中。

对象、对象成员与类定义、静态变 量在堆上; 对象的成员变量与对象本身一起存 储在堆上, 不管成员变量的类型是 原生数值,还是对象引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值