搜索
查看: 2197|回复: 6

对于=null,={}赋值的疑问,谢谢

[复制链接]

27

主题

116

帖子

787

积分

三级会员

Rank: 4

积分
787
发表于 2017-10-12 02:02:57 | 显示全部楼层 |阅读模式
对于这个的疑问是从 看到这个
http://bbs.aardio.com/forum.php?mod=viewthread&tid=6555&extra=page%3D1 帖子的回复中产生的
TIM截图20171012015722.jpg

那么按照这样的说法 那软件运行的越久岂不是会不断的增加内存 那岂不是不论再完美的软件。到最后都终将 卡的不能动。直到软件崩溃。
还是说数组
  1. test={1;23;4};
  2. test=null //test={}
复制代码
  1. var test=1;
  2.      test=null;
复制代码

是有不同的结果。
如果是的话,那我们平时应该怎么样注意代码习惯

再次感谢您的回答解惑
回复

使用道具 举报

188

主题

2545

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14131
发表于 2017-10-12 08:58:22 | 显示全部楼层
你这个顾虑基本是多余的。
aardio支持垃圾回收,不再使用的局部变量会自动回收,没有说变量一定要赋值为null,一定要去清空什么的。

要想一个变量不被释放,只有一直保持引用,例如
1、仍然被下层函数可能用到的局部变量
2、全局变量,或全局可访问的名字空间的成员变量。
但通常这样的变量多到导致内存崩溃基本是不可能的。

一般的软件不会出现:
不断的增加内存直到崩溃。这是有内存泄漏了。aardio编写的软件基本不会出现这种问题。

软件运行的越久........这个是指的多久呢,如果是一万年就不好说了。


回复

使用道具 举报

188

主题

2545

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14131
发表于 2017-10-12 09:02:19 | 显示全部楼层
你要是写这样的代码:
var tab = {}
while(true){
    table.push(tab,
" ")
}

那只要几秒钟就会内存不足:
---------------------------
aardio:内存错误
---------------------------
not enough memory
---------------------------
OK   
---------------------------

但基本上不可能有人真的去写这样的代码。

如果代码写的有问题,再怎么赋值为null也是没有用的。
如果代码没有问题,根本不需要去赋值为null清空变量。

电脑的资源总是有限的,如果写程序习惯滥用资源,例如别人最多几十个多线程,有的人动不动就创建几百个线程,上千个线程,这种代码靠赋值为null没有用,再怎么释放都会资源不足。不要把自己的电脑当超级计算机就行。

回复

使用道具 举报

2

主题

39

帖子

367

积分

二级会员

Rank: 3Rank: 3

积分
367
发表于 2017-10-12 10:08:15 | 显示全部楼层
这些理论好迷糊的
回复

使用道具 举报

188

主题

2545

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14131
发表于 2017-10-12 10:55:09 | 显示全部楼层
Danboy 发表于 2017-10-12 10:08
这些理论好迷糊的
简单的事不要想复杂了。
不再使用的变量aardio会自动回收,不用特别去处理,不用去纠结,不用去思考任何理论,就可以了。

这种事属于不必要的自寻烦恼。
回复

使用道具 举报

188

主题

2545

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14131
发表于 2017-10-12 11:10:01 | 显示全部楼层
举个例子:
namespace ns1{

    test =
function(){
   
        
var abc = {};
        
var abc2 = {};
        
        
/*
        aardio一看,abc这个变量没人引用了,于是把他销毁掉。
        abc2这个变量还有人在引用,好吧继续留着。
        */

        
return function(){
            
return abc2;
        }
        
    }
   
    {
        
//执行代码
        var func = test();
        
    }
   
   
/*
   
        退出上面的语句块,func 变量也没人使用了,好吧,aardio把他干掉,
        即然 func被干掉了,func 里的变量abc2也就没有人使用了,于是也把他干掉
    */

}


如果在上面的代码里加上 abc = null 有意义吗?!
没有任何意义,赋值为null只是告诉垃圾回收你不再使用这个变量了,可是这件事他已经知道了。

只要你不再使用变量,他就会自动变成null。

反过来,不希望 abc变量被变回收要怎么做?!
简单,随便跟任何其他有更长生命 周期的变量拉上关系发生引用,例如跟名字空间进行连接, 加上:
self.abc = abc;

回复

使用道具 举报

27

主题

116

帖子

787

积分

三级会员

Rank: 4

积分
787
 楼主| 发表于 2017-10-13 19:36:23 | 显示全部楼层
Jacen.He 发表于 2017-10-12 09:02
你要是写这样的代码:
那只要几秒钟就会内存不足:

好的谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2020-10-20 02:04 , Processed in 0.093750 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表