问题描述
我在看文档
-
https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-2.html#jvms-2.5.3
-
https://docs.oracle.com/cd/E15289_01/JRSDK/garbage_collect.htm
还在baeldung上找到了一张有内存结构的图片
我从文档中了解到:
每个 Java 虚拟机线程都有一个私有的 Java 虚拟机堆栈,与线程同时创建
但我无法理解: 堆栈是堆的一部分还是单独的内存?
解决方法
堆栈是堆的一部分还是单独的内存?
JVM 规范没有说。因此,理论上可以实现一个 JVM,其中线程堆栈位于堆中或单独的(非堆)内存中。
在实践中,所有基于主流 Sun、Oracle 和 OpenJDK 代码库的 JVM 都为线程堆栈使用单独的(非堆)内存。原因之一是,如果垃圾收集器无法重定位堆栈,它会简化 JVM 的内存管理。
但另一方面,它与采用特定 Java 实现的 Java 程序没有区别1。
1 - 除了诸如“我是否需要增加堆大小以运行更多线程...”之类的问题。