堆和栈的区别
CommentContents
前言
java的内存有两种:堆内存和栈内存,堆和栈都是用来在内存中存放数据的地方,只是各自的运行机制有所不同。
什么是堆
堆,是运行时数据区,通过new等指令建立的对象从堆中分配空间,然后通过GC垃圾回收器来进行销毁。
堆的内存空间大小,是由java自己在运行时动态分配的,不需要我们指定设置。不过,也因此导致对的存取速度相对比较慢。
下面的案例,存放在堆中:
1 | Integer num = new Integer(123); |
什么是栈
栈,主要存放一些基本数据类型的变量和对象的引用,栈的数据是可以共享的。
基本数量类型:
1 | byte,short,int,long,float,double,boolean,char |
栈的内存空间大小,在程序编译时,就指定确认下来。所以栈的存取速度比堆快,而且仅次于寄存器。
下面的案例,存放在栈中:
1 | Integer num = 123; |
验证他们的区别?
堆和栈,我们已经有了对它们了解,也认识了它们的区别,那么我们来看看如何去进行验证?
1 | public static void main(String[] args) { |
输出:
1 | 堆对象比较:false |
上面的案例,诠释了它们的区别:
堆,每个new出来的对象都独立占用一块内存地址,所以两者不相等。
栈,因为上一个值存在,而直接指向了相同的内存地址,所以两者相等。
基本类型,存放的就直接是值,所以相等。
- 本文作者:沙果栗子本文链接:https://32e.co/2020/06/27/read-head-stack/版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!