如何判断一个对象是创建在栈中还是堆中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断一个对象是创建在栈中还是堆中相关的知识,希望对你有一定的参考价值。

参考技术A 对象都是创建在栈中的 除了一些特殊的对象 如 stirng 是在字符常量池中 也是堆。。静态对象。。创建在堆中。。

js的变量——基本类型保存在栈中,引用类型保存在堆中

javascript的基本类型:Undefined,Null,Boolean,Number,String

引用类型:Object,Array,Function

基本类型值在内存中占据固定大小,被保存在栈内存中,引用类型值是对象,保存在堆内存中。

Javascript的内存的生命周期对于用户来说是透明的,不开放的。在定义变量时候就完成了分配内存,使用时候是对内存的读写操作,内存的释放依赖于浏览器的垃圾回收机制。

栈(stack)和堆(heap)==>

1,栈

stack是有结构的,先进后出,存放基本类型和对象的引用,每个区块的大小是明确的。

2,堆

heap没有结构,数据任意存放,js中主要存放的是引用类型,比如:Array,Object对象

所以明显看出:数据查询速度比较的话,stack远远大于heap。

在实际开发过程中,偶尔遇到栈溢出的情况,stack overflow错误,因为stack创建时候,大小是确定的,超过额度大小就会发生栈溢出【当js出现死循环或者错误的递归时候】。heap大小是不确定的,需要可以一直累加。

js是单线程的,核心特征哈,那么怎么利用多核的CPU呢?H5的Web Worker标准,允许js脚本创建多个线程,但是子线程受主线程的控制,且不能操作DOM。

stack是线程独占的,heap是线程共有的。

【完】

 

以上是关于如何判断一个对象是创建在栈中还是堆中的主要内容,如果未能解决你的问题,请参考以下文章

java中的String常量是存放在栈中还是堆中?

Java中原始数据类型存放位置理解

09-从零玩转JavaWeb-匿名对象

js的变量——基本类型保存在栈中,引用类型保存在堆中

java中啥是栈啊?

Java中的值类型