2024年8月26日
前段时间,我写了几篇关于Java 垃圾收集和Java 按值传递的文章。之后,我收到了很多电子邮件,要求我解释Java 堆空间、Java 堆栈内存、Java 中的内存分配以及它们之间的区别。你会看到很多关于 Java、Java EE 书籍和教程中堆和堆栈内存的参考资料,但很难从程序的角度完整解释什么是堆和堆栈内存。
Java 堆空间
Java 运行时使用 Java 堆空间为对象和 JRE 类分配内存。每当我们创建一个对象时,它总是在堆空间中创建。垃圾收集在堆内存上运行,以释放没有任何引用的对象使用的内存。在堆空间中创建的任何对象都具有全局访问权限,并且可以从应用程序的任何位置引用。
Java 堆栈内存
Java 堆栈内存用于执行线程。它们包含方法特定的短暂值以及对从方法引用的堆中其他对象的引用。堆栈内存始终按 LIFO(后进先出)顺序引用。每当调用一个方…