写点什么

JVM 内存模型学习笔记(二)

用户头像
风翱
关注
发布于: 2 小时前

JVM 内存模型学习笔记(二)


一、JVM 栈内存结构

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


二、JVM 堆内存结构

堆内存是所有线程共用的内存空间,JVM 将 Heap 内存分为年轻代和老年代两部分。年轻代还划分了 3 个内存池,新生代和存活区,在大部分 GC 算法中有 2 个存活区(S0,S1),在我们可以观察到的任何时刻,S0 和 S1 总有一个是空的,但一般较小,也不浪费多少空间。

Non-Heap 本质上还是 Heap,只是一般不归 GC 管理,里面划分为 3 个内存池。Metaspace 以前叫持久代,Java8 换为了元空间。CCS(Compressed Class Space),存放 class 信息的,和 Metaspace 有交叉。

Code Cache 存放 JIT 编译器编译后的本地机器代码。


三、什么是 JMM?

JMM 规范对应的是“[JSR-133.Java Memory Model and Thread Specification]”,《Java 语言规范》的[$17.4. Memory Model 章节],JMM 规范明确定义了不同的线程之间,通过哪些方式,在什么时候可以看见其他线程保存到共享变量中的值;以及在必要时,如何对共享变量的访问进行同步。这样的好处是屏蔽各种硬件平台和操作系统之间的内存访问差异,实现了 Java 并发程序真正的跨平台。


发布于: 2 小时前阅读数: 2
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
JVM 内存模型学习笔记(二)