js object类型转换 内存泄漏 垃圾回收机制

Posted 海小真

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js object类型转换 内存泄漏 垃圾回收机制相关的知识,希望对你有一定的参考价值。

-------------------------------------------------------------*************

- object 变量名存储在栈里面,存储的是引用地址 ,指向堆里面的对象内容数据;

- 内存泄漏

  + 发生条件:新对象不断创建,旧对象却不清除;

为了避免内存泄漏,有垃圾及回收机制

- 垃圾回收机制(gc)

  + 当对象的引用地址在栈中没有引用时,内存占比过高,垃圾回收车会将其清除。

  (前提:内存占比过高,object=null;如果引用对象的变量不全设为null不清除,全设为null不再引用了才有可能被清除掉;这个垃圾回收车不确定时间来。)

 

eg: 
  1、object对象同字符串之间的转换(包括   JSON字符串)
   var obj={a:1};
        console.log(String(obj));//[object Object] 所有的对象转换为字符串就会变成这样
        console.log(JSON.stringify(obj));//{"a":1} 将object对象转换为字符串(JSON字符串)
        console.log(JSON.parse(\'{"a":1}\'));//将JSON字符串转换为对象
  2、object对象,键(key)-属性名;值(value)-属性值;键值对
     栈 堆 
   var obj1=JSON.parse(JSON.stringify(obj)); //将obj对象转换成字符串再转换成对象重新赋值给obj2,这时所指向的堆区域不同了即引用地址不同了
        console.log(obj,obj1); //{a: 10} {a: 1}结果不一样了,说明指向不同的两个堆区域
        console.log(JSON.stringify(obj),JSON.stringify(obj1)); //{"a":10} {"a":1}
        console.log(obj1===obj); //false
 
            变量名存储的是引用地址
            var obj2=obj;//将引用地址赋值给obj2
            obj.a=10;
            console.log(obj2.a);//10 结果一样,说明存储的引用地址一样

            存在栈中,修改的是值
            var num=3;
            var num1=num;
            num=10;
            console.log(num1);//3 num1没有再继续改变


            存在堆中,修改引用地址值的内容,地址不会发生改变
            
    //  存在堆中,修改引用地址值的内容,地址不会发生改变
            // var obj1=JSON.parse(JSON.stringify(obj));
            // console.log(obj1===obj);//这俩肯定引用地址不一样
            var obj2=obj;//将引用地址赋值给obj2
            console.log(obj2===obj);//true
            obj.a=50; //只改变引用地址值的内容
            console.log(obj2===obj);//true 这俩引用地址还是一样吧
            console.log(obj,obj2); //{a: 50} {a: 50}
 
            var obj2={a:10,b:{a:20}}; //现在我重新赋值给obj2,改变地址了
            console.log(obj2===obj);//false
            console.log(obj,obj2);//{a: 1} {a: 10, b: {…}}不一样了
            

以上是关于js object类型转换 内存泄漏 垃圾回收机制的主要内容,如果未能解决你的问题,请参考以下文章

垃圾回收机制与内存管理

垃圾回收机制

内存泄漏与垃圾回收机制

面试题~ 垃圾回收机制得优点以及原理

垃圾回收 及 内存泄漏

js中的垃圾回收机制