- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我刚刚阅读了这个问题和接受的答案:What is JavaScript garbage collection?
在答案中,Noldorin引用了 Apple 的一些指南。这是我关心的部分:
Use delete statements. Whenever you create an object using a new statement, pair it with a delete statement. This ensures that all of the memory associated with the object, including its property name, is available for garbage collection.
我总是花时间跟上最佳实践,尤其是如果我可以减少脚本的内存占用。所以我去测试一些东西。如果我理解正确的话,下面是一个对象在调用方法后自行删除的例子。
var thing = function () {
var a_method, and_another;
a_method = function() { /* do stuff */ };
and_another = function() { /* do some other stuff*/ };
this.init = function() { a_method(); and_another(); };
};
delete new thing().init();
通常我会将所有内容包装在一个自调用函数中,并像上面一样传入我的全局变量。一切都和我通常做的一样,唯一的区别是我在 new
之前添加了 delete
。
代码可以以任何方式工作。
所以问题是:我在这里做什么吗?删除对仅存在于函数范围内的对象的引用是否有某种好处?还是我只是让事情看起来很困惑?
最佳答案
首先声明 delete new scoped_object().init();
并没有真正做任何事情,您最好注意哪些变量保留在闭包中,或者您是否有循环引用,哪些是 memory leaks 的最常见来源.
delete
运算符旨在用于删除对象属性,它真的被误解了,您引用@Noldorin 的答案引用 Apple JavaScript "Best Practices" 的一些文本,但是他们对 delete
的工作原理一无所知!!。
他们甚至建议在变量引用上使用 delete
,这是不可能的——只有在 Eval Code 中声明的变量才有可能——因为 var
语句将变量声明为不可删除(ECMAScript 3 中的 {DontDelete}
或 ECMAScript 5 中的 [[Configurable]] = false
)变量对象的属性 -构成范围链的对象-。
此外,尝试删除
对绑定(bind)到环境记录的标识符的引用 - 使用 VariableDeclaration
、FunctionDeclaration
声明的标识符或从函数的 FormalParameterList
-,导致新的 ECMAScript 5th Edition 上出现 SyntaxError
异常在 Strict Mode 下.
我建议您阅读以下有关 delete
的文章:
关于javascript - 垃圾收集和 JavaScript "delete": Is this overkill/obfuscation, 还是一个好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3788805/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我有一个使用 Entity Developer 生成的域。这将创建我所有的实体和我的数据库表。我使用 NHibernate 来填充通过存储库公开的我的实体。然后我有一个服务层,它将存储库聚合成有用的服
看完后how gzip compression works它让我思考。如果源和代理服务器 (CDN) 都支持 gzip,则添加 Vary: Accept-Encoding头需要吗? 最佳答案 Vary
我们在生产中有多个版本的 Web 服务(包括 REST 和 SOAP),并且每个版本的数量都在不断增加。 在版本之间,请求和响应可能会有细微的变化(通常是添加新字段)。 如果我们要淘汰旧版本,我们如何
我有一个主要设计为 POCO 类的类,有各种线程和任务可以读取它的值,只有其他人只是偶尔更新这些值。这似乎是 ReaderWriterLockSlim 的理想方案。 问题是,在类中,如果需要线程安全的
我对 MVVM 的感觉很复杂。看来我需要编写很多代码才能使最有效的方法发挥作用。我想念事件(命令是如此痛苦),绑定(bind)所有东西会导致调试噩梦,我想念对 View 的引用! 我只是想知道您对 M
我刚刚阅读了这个问题和接受的答案:What is JavaScript garbage collection? 在答案中,Noldorin引用了 Apple 的一些指南。这是我关心的部分: Use d
我正在使用以下代码在 JSON 中显示未经授权的消息: def render_unauthorized # Displays the Unauthorized message since the
我正在构建一个简单的自上而下的基于图 block 的 2D 游戏,并且我正在尝试解析 Tiled Map Editor(.tmx 文件)的输出。对于那些不熟悉的人来说,TMX 文件是 XML 文件,它
我有一个相当简单的 iPhone 应用程序,由许多 View 组成,其中包含一个分组的表格 View 。这些 View 在导航 Controller 中保持在一起,这些导航 Controller 在标
那你觉得怎么样? 我的 Java 讲师说属性应该始终声明为私有(private),并且没有理由应该以任何其他方式完成。我立即开始思考继承,它会对此产生什么影响。 最佳答案 您的意思是声明字段为私有(p
我是一名优秀的程序员,十分优秀!