堆栈是堆的一部分还是单独的内存

问题描述

我在看文档

还在baeldung上找到了一张有内存结构的图片

enter image description here

我从文档中了解到:

每个 Java 虚拟机线程都有一个私有的 Java 虚拟机堆栈,与线程同时创建

但我无法理解: 堆栈是堆的一部分还是单独的内存?

解决方法

堆栈是堆的一部分还是单独的内存?

JVM 规范没有说。因此,理论上可以实现一个 JVM,其中线程堆栈位于堆中或单独的(非堆)内存中。

在实践中,所有基于主流 Sun、Oracle 和 OpenJDK 代码库的 JVM 都为线程堆栈使用单独的(非堆)内存。原因之一是,如果垃圾收集器无法重定位堆栈,它会简化 JVM 的内存管理。

但另一方面,它与采用特定 Java 实现的 Java 程序没有区别1


1 - 除了诸如“我是否需要增加堆大小以运行更多线程...”之类的问题。