堆中存什么?栈中存什么?

堆中存的是对象。栈中存的是基本数据类型和堆中对象的引用。一个对象的大小是不可估计的,或者说是可以动态变化的,但是在栈中,一个对象只对应了一个 4btye 的引用(堆栈分离的好处)。

为什么不把基本类型放堆中呢?

因为基本数据类型占用的空间一般是1~8个字节,需要空间比较少,而且因为是基本类型,所以不会出现动态增长的情况,长度固定,因此栈中存储就够了。如果把它存在堆中是没有什么意义的。基本类型和对象的引用都是存放在栈中,而且都是几个字节的一个数,因此在程序运行时,它们的处理方式是统一的。但是基本类型、对象引用和对象本身就有所区别了,因为一个是栈中的数据一个是堆中的数据。最常见的一个问题就是,Java 中参数传递时的问题。

发表评论

后才能评论

评论(1)

  • 一蓑烟雨 普通 2022-09-29 4:21 下午

    栈是线程独享的,主要存储线程运行时的局部变量表(基本数据类型、对象的引用)、程序运行状态、方法返回值等等;
    堆是线程共享的,只负责存储对象实例的信息。