Java有堆和堆栈吗

Does Java have heap and stack?

本文关键字:堆栈 Java      更新时间:2023-10-16

http://courses.washington.edu/css342/zander/css332/arch.html

页面底部:

C++内存模型不同于Java内存模型。在C++中,内存来自两个地方,运行时堆栈和内存堆。

这读起来好像Java没有堆(或堆栈(?

我正在努力学习Java和C++的所有"隐藏"细节

Java还有一个堆和一个(每个线程(堆栈。不同之处在于,在Java中,您不能选择在哪里分配变量或对象。

基本上,所有对象及其实例变量都在堆上分配,所有方法参数和局部变量(在对象的情况下只是引用(都在堆栈上分配。

然而,一些现代JVM在检测到对象仅在本地使用时,会在堆栈上分配一些对象作为性能优化。

Java使用堆内存模型。所有对象都是在堆上创建的;引用是用来指代它们的。

它还在处理方法帧时将它们放到堆栈中。

我认为两者兼而有之。

是的,Java既有堆(整个JVM通用(,也有堆栈(每个线程一个堆栈(。

并且具有stack&堆更多的是实现的特性,而不是语言的特性。

我甚至会说,大多数Linux程序都有堆(通过mmap&sbrk系统调用获得(和堆栈(在操作系统级别,这与语言无关(。

Java有一个垃圾收集器,而C++通常没有。您不需要在Java中释放未使用的内存。但是在C++中,您需要通过调用delete来释放它,用于在具有new的堆中分配的每个C++对象。

然而,请参阅Boehm的垃圾收集器,以获得可用于C&C++它在实践中运行得很好(即使它在理论上可能泄漏,作为一个保守的,而不是精确的GC(。

一些受限的C++或C环境(特别是没有操作系统内核的嵌入式系统的独立实现(没有任何堆。