Java有堆和堆栈吗
Does Java have heap and stack?
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环境(特别是没有操作系统内核的嵌入式系统的独立实现(没有任何堆。
相关文章:
- 在java中解决这段代码时面临循环中的问题
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 尝试用java代码编译和运行c++代码
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 在这种情况下,java对象是否可以调用本机函数
- 为什么调用堆栈数组会导致内存泄漏
- 在java中读取c++字节的位字段
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 使用已使用 java 编码的 openssl 解码数据
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 堆栈和队列是否像C++中的数组一样传递?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- SWIG Java 在使用 -DSWIGWORDSIZE64 时将int64_t转换为 jlong
- C++和 Java 数据结构的重叠:堆栈"top"与"peek"
- Java有堆和堆栈吗
- 在c++中如何像Java那样定义列表的列表或堆栈的列表