http://courses.washington.edu/css342/zander/css332/arch.html
页面底部:
C++内存模型与Java模型不同。在C++中,内存来自两个位置:运行时堆栈和内存堆。
这读起来好像Java没有堆(或堆栈)?
我正在努力学习Java和C++的所有“帽下”细节。
发布于 2011-11-26 18:45:11
Java使用堆内存模型。所有对象都是在堆上创建的;引用用于引用它们。
它还在处理方法帧时将它们放到堆栈上。
我想说这两者都有。
发布于 2011-11-26 18:50:45
是的,Java有堆(对于整个JVM来说是通用的)和堆栈(每个线程有一个堆栈)。
拥有堆栈和堆更多的是实现的属性,而不是语言的属性。
我甚至可以说,大多数Linux程序都有堆(通过mmap和sbrk系统调用获得)和堆栈(在操作系统级别上,这不依赖于语言)。
Java所拥有的(但通常不是C++ )是一个垃圾收集器。您不需要在Java中释放未使用的内存。但是在C++中,您需要通过调用delete来释放它,对于堆中分配给new的每个C++对象。
但是,请参阅博姆垃圾收集器,以获得在C& C++中可用的GC。它在实践中非常有效(即使它在理论上可能会泄漏,是一个保守的,而不是一个精确的GC)。
一些受限的C++或C环境(特别是没有操作系统内核的嵌入式系统的独立实现)没有任何堆。
https://stackoverflow.com/questions/8280689
复制相似问题