JVM内存模型是如何工作的?

2026-05-27 21:120阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1678个文字,预计阅读时间需要7分钟。

JVM内存模型是如何工作的?

前情提要:上文对运行时数据区描述了很多,实际上重点存储数据的是堆和栈区。内存的设计也着重从这两个方面展开(注意:这两块区域都是线程共享的)。对于虚拟机栈,本地方法栈,主要存储数据。

前情提要

上面对运行时数据区描述了很多,其实重点存储数据的是堆和方法区(非堆),所以内存的设计也着重从这两方面展开(注意这两块区域都是线程共享的)。对于虚拟机栈,本地方法栈,程序计数器都是线程私有的。 可以这样理解,JVM运行时数据区是一种规范,而JVM内存模式是对该规范的实现

图形展示

一块是非堆区,一块是堆区。

堆区分为两大块,一个是Old区,一个是Young区。

Young区分为两大块,一个是Survivor区(S0+S1),一块是Eden区。

S0和S1一样大,也可以叫From和To

对象创建过程

一般情况下,新创建的对象都会被分配到Eden区,一些特殊的大的对象会直接分配到Old区。

我是一个普通的Java对象,我出生在Eden区,在Eden区我还看到和我长的很像的小兄弟,我们在Eden区中玩了挺长时间。有一天Eden区中的人实在是太多了,我就被迫去了Survivor区的“From”区,自从去了Survivor 区,我就开始漂了,有时候在Survivor的“From”区,有时候在Survivor的“To”区,居无定所。直到我18岁的时候,爸爸说我成人了,该去社会上闯闯了。于是我就去了年老代那边,年老代里,人很多,并且年龄都挺大的。

阅读全文

本文共计1678个文字,预计阅读时间需要7分钟。

JVM内存模型是如何工作的?

前情提要:上文对运行时数据区描述了很多,实际上重点存储数据的是堆和栈区。内存的设计也着重从这两个方面展开(注意:这两块区域都是线程共享的)。对于虚拟机栈,本地方法栈,主要存储数据。

前情提要

上面对运行时数据区描述了很多,其实重点存储数据的是堆和方法区(非堆),所以内存的设计也着重从这两方面展开(注意这两块区域都是线程共享的)。对于虚拟机栈,本地方法栈,程序计数器都是线程私有的。 可以这样理解,JVM运行时数据区是一种规范,而JVM内存模式是对该规范的实现

图形展示

一块是非堆区,一块是堆区。

堆区分为两大块,一个是Old区,一个是Young区。

Young区分为两大块,一个是Survivor区(S0+S1),一块是Eden区。

S0和S1一样大,也可以叫From和To

对象创建过程

一般情况下,新创建的对象都会被分配到Eden区,一些特殊的大的对象会直接分配到Old区。

我是一个普通的Java对象,我出生在Eden区,在Eden区我还看到和我长的很像的小兄弟,我们在Eden区中玩了挺长时间。有一天Eden区中的人实在是太多了,我就被迫去了Survivor区的“From”区,自从去了Survivor 区,我就开始漂了,有时候在Survivor的“From”区,有时候在Survivor的“To”区,居无定所。直到我18岁的时候,爸爸说我成人了,该去社会上闯闯了。于是我就去了年老代那边,年老代里,人很多,并且年龄都挺大的。

阅读全文