Liuqichun's Blog

JVM 内存区域介绍

Java 相较于 C++ 具有内存自动管理功能。内存管理是个宽泛的概念,它既指实例化对象时的内存分配,又指 GC 回收无用的类、对象、变量等。随着 JVM 不断发展,JVM 内存区也在不断变化,这些变化在 Java 语言层面感知不到,因为字节码屏蔽了底层实现。了解 JVM 内存区域是深入学习 Java 的第一步,今天总结一下。

JVM 是《Java 虚拟机规范》的实现

《Java 虚拟机规范》定义了 Java 字节码规范及实现 Java 的注意事项,而 JVM 是它的具体实现,它们是一对多的关系,很多公司(Sun、IBM、Red Hat、甲骨文)都对它有具体的实现。刚刚提到“随着 Java 语言的发展,Java 内存区域不断变化”这句话不太严谨:不同 JVM 在内存管理、内存区域划分上都存在差异,每个都有其特点。

JVM 内存区域划分

一般我们把内存区域划分为如下几个:

从上图我们可以清晰地看到堆、方法区、直接内存(又称堆外内存)都是共享的,共享的意思是可以被多个线程访问和使用,而虚拟机栈、本地方法栈、程序计数器是线程私有的,而且每个线程都有自己的一份。

下面介绍各个区域的作用及存放的数据。

对象的内存布局

对象的组成部分。

image.png

对象的访问

image.png

image.png

对比&区别:

(本文完)

<< Previous Post

|

Next Post >>

#JVM