堆和栈的实际区别是什么,,,还有heap之类的函数干什么用的.
发布网友
发布时间:2022-04-24 15:10
我来回答
共1个回答
热心网友
时间:2022-05-04 21:35
堆和栈一片用于保存数据的内存空间。他们的区别是:栈保存的是地址;堆保存的是数值;二者之间的关系是:栈中保存地址是堆中保存的数值的地址。
Heap 译为"堆"是Java虚拟机JVM的内存数据区。Heap 的管理很复杂,每次分配不定长的内存空间,专门用来保存对象的实例。在Heap 中分配一定的内存来保存对象实例,实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在Stack中),在Heap 中分配一定的内存保存对象实例和对象的序列化比较类似。而对象实例在Heap 中分配好以后,需要在Stack中保存一个4字节的Heap 内存地址,用来定位该对象实例在Heap 中的位置,便于找到该对象实例。
由于Stack的内存管理是顺序分配的,而且定长,不存在内存回收问题;而Heap 则是随机分配内存,不定长度,存在内存分配和回收的问题。