java
java将内存分成两种形式,一种是堆内存,另一种是栈内存。java的基本数据类型在栈分配空间,对象在堆分配空间。
js
- js基本数据类型存储在栈中,每种类型的数据占用内存空间的大小是确定的,并由系统自动分配和释放。
结合下图进行理解:
在栈内存中的数据发生复制行为时,系统会自动为新的变量分配一个新值,最后这些变量都是
相互独立的。 - js引用数据类型存储在栈和堆中。具体来说就是引用数据类型的指针存储在栈中,当我们访问一个引用数据类型时,首先从栈中获取对象的地址指针,然后通过地址指针去堆中找到对应的数据。
结合下图进行理解:
实际上复制引用类型的一个
地址指针,指向同一个值,在堆内存中访问到的具体对象实际上是同一个。
总结
| 异同 | |
|---|---|
| 栈内存 | 堆内存 |
| 存储基础数据类型 | 存储引用数据类型 |
| 按值访问 | 按引用访问 |
| 存储的值大小固定 | 存储的值大小不定,可动态调整 |
| 由系统自动分配内存空间 | 由代码进行指定分配 |
| 空间小,运行效率高 | 空间大,运行效率相对比较低 |
| 先进后出,后进先出 | 无序存储,可根据引用直接获取 |