javascript 之堆栈
2015-11-18 17:03
453 查看
先来一张图解释下
1 、基本类型
基本类型有 Undefined、Null、Boolean、Number 和String。 这些基本类型,他们的值保存在栈空间,我们通过按值来访问的。
2 、引用类型
引用类型,值大小不固定,栈内存中存放地址指向堆内存中的对象。是按引用访问的。 由于这种值的大小不固定,因此不能把它们保存到栈内存中。但内存地址大小的固定的,因此可以将内存地址保存在栈内存中。 这样,当查询引用类型的变量时, 先从栈中读取内存地址, 然后再通过地址找到堆中的值。对于这种,我们把它叫做按引用访问。
当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁了。因此,所有在方法中定义的变量都是放在栈内存中的;
当我们在程序中创建一个对象时,以便反复利用,这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(方法的参数传递时很常见),只有当一个对象没有任何引用变量引用它时,系统的垃圾回收机制才会在核实的时候回收它。
1 、基本类型
基本类型有 Undefined、Null、Boolean、Number 和String。 这些基本类型,他们的值保存在栈空间,我们通过按值来访问的。
2 、引用类型
引用类型,值大小不固定,栈内存中存放地址指向堆内存中的对象。是按引用访问的。 由于这种值的大小不固定,因此不能把它们保存到栈内存中。但内存地址大小的固定的,因此可以将内存地址保存在栈内存中。 这样,当查询引用类型的变量时, 先从栈中读取内存地址, 然后再通过地址找到堆中的值。对于这种,我们把它叫做按引用访问。
为什么会有栈内存和堆内存之分?
通常与垃圾回收机制有关。为了使程序运行时占用的内存最小。当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁了。因此,所有在方法中定义的变量都是放在栈内存中的;
当我们在程序中创建一个对象时,以便反复利用,这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(方法的参数传递时很常见),只有当一个对象没有任何引用变量引用它时,系统的垃圾回收机制才会在核实的时候回收它。
相关文章推荐
- 牛腩之Javascript
- EXtjs 下fieldset 与colum整合
- Extjs-4.2.1(二)——使用Ext.define自定义类
- js实现暂停,淡出效果。
- js公有、私有、静态属性和方法的区别
- javascript设计模式之解释器模式详解
- json操作
- JavaScript如何获取数组最大值和最小值
- js 获取 对对象相对于页面四边的距离
- 前端开发学习笔记(二)JavaScript DOM编程技术(一、二)
- ajaxfileupload.js问题汇总及解决 附修复版下载
- js中的闭包
- 使用JS输出一个二维数组
- js四种继承方式
- rapidjson使用总结
- 原生js模拟淘宝购物车项目实战
- JSTL中的c:forEach详解
- js给li标签中的所有a标签加点击事件
- js replace
- 合并js