Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java有堆和堆栈吗?_Java_C++ - Fatal编程技术网

Java有堆和堆栈吗?

Java有堆和堆栈吗?,java,c++,Java,C++,页面底部: < C++内存模型与java内存模型不同。在C++中, 内存来自两个地方,运行时堆栈和内存堆 这看起来好像Java没有堆(或堆栈) 我试图学习Java和C++的所有“幕后”细节,Java使用堆内存模型。所有对象都是在堆上创建的;引用用于引用它们 在处理方法帧时,它还将方法帧放入堆栈中 我想说它两者都有。Java还有一个堆和一个(每个线程)堆栈。不同之处在于,在Java中,您无法选择在何处分配变量或对象 基本上,所有对象及其实例变量都是在堆上分配的,所有方法参数和局部变量(对于对象来说

页面底部:

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

这看起来好像Java没有堆(或堆栈)


我试图学习Java和C++的所有“幕后”细节,Java使用堆内存模型。所有对象都是在堆上创建的;引用用于引用它们

在处理方法帧时,它还将方法帧放入堆栈中

我想说它两者都有。

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

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

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

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

拥有堆栈和堆更多的是实现的属性,而不是语言的属性

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

java有什么,但C++通常不,是。您不需要在Java中释放未使用的内存。但是C++中,你需要通过调用<代码>删除>代码>,释放在堆中分配的每个C++对象:<代码>新< /COD>

但是,对于GC和C++中使用的GC来说。它在实践中工作得非常好(即使它在理论上可能泄漏,因为它是保守的,而不是精确的GC)


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

这不是关于C++的真的。有四个存储类(自动、静态、动态、线程本地),但除此之外,未指定实现。在java中,最好考虑“值语义”和“引用语义”,并将细节留给JVM。你所发布的链接没有对java内存模型(除了C++不同)有任何说明。我知道-但是说它与C++不同,然后说C++有X和Y,这意味着java既没有X也没有YAF,你想了解java细节,读。很容易到达。不要相信别人的话。@user997112:Bjarne Stroustrup。还有,这是另一本优秀的书。我认为这并不准确。虽然JVM在内部确实有一个堆栈,但如果它认为合适的话,它很可能会决定将短期对象也放在那里,并消除它们对gcollection的需要。“可能会好吗?”?请为此提供一份引文。据我所知,世代模型说所有对象都是基于堆的,即使对象是在方法范围内创建的并且是短期的。短命意味着堆上的伊甸园空间。如果它在一次GC中幸存下来,它将进入第1代,然后是第2代,然后是perm空间。这不应该是“但是,一些现代JVM在检测到对象仅在本地使用时,会在堆栈上分配一些对象作为性能优化。”?全局变量会在哪里?Heap?@user997112:如果您谈论的是静态字段,那么这些字段是类对象的一部分,因此位于Heap上。@Michael,而非静态全局变量?@user997112:静态字段与Java的全局变量最接近。它没有不属于类(或局部)的变量。