堆栈有什么区别呢?
下文笔者讲述堆栈的区别说明,如下所示
堆 | 栈 | |
物理地址 | 物理地址分配是不连续的,因此性能慢些。 在GC的时候需要考虑到不连续的分配,所以有各种垃圾回收算法。 |
栈使用的是数据结构中的栈,具有先进后出的规则, 物理地址分配是连续的,因此性能快 |
分配内存时机 | 堆因为是不连续的,所以分配的内存是在运行期确认的, 因此大小不固定。一般堆大小远远大于栈。 |
栈是连续的,所以分配的内存大小要在编译期就确认,大小是固定的 |
存放的内容 | 堆存放的是对象的实例和数组。 此区域更关注的是数据的存储 |
栈存放:局部变量,操作数栈,返回结 此区域更关注的是程序方法的执行 |
程序的可见度 | 堆对于整个应用程序都是共享的、可见的 | 栈对当前线程是可见的,是线程私有。 他的生命周期和线程相同 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。