JavaScript没有析构函数和不能即时销毁对象是一个巨大的缺陷

pgmsoul 2013-01-28 12:07:01
加精
即时销毁, 也就是变量不再使用的时候, 会立即别销毁, 是一个非常重要的需求. JavaScript内置的自动清理几乎成为JavaScript语言的传统, 但是, 我们还是有很多需求, 就是希望大量的内存被即时的释放.

for(var i=0;i<0x1000000;i++){
var obj = new SomeThing();
obj.doSomeThing();
}

这种情况下, 大量的对象被创建, 但是直到达到临界点, 垃圾收集器才会清理一下内存, 但是实际上, 在C++语言中, 销毁obj对象不需要任何的额外开销, 因为obj在栈上, 它压根就不需要销毁, 实际上只有一个obj对象.

而JavaScript不断的创建大量新对象的确是非常的"愚蠢", 甚至引擎优化上也没有采用什么机制, 能够把大量无用的obj高效的销毁.

而另一个脚本语言, PHP就有销毁机制, 如果一个局部变量没有被返回给其它外部代码, 它立刻就被销毁了. 这是一种非常高效而方便的机制.
...全文
21533 112 打赏 收藏 转发到动态 举报
写回复
用AI写文章
112 条回复
切换为时间正序
请发表友善的回复…
发表回复
浮生若梦 2014-08-13
  • 打赏
  • 举报
回复
引用 107 楼 tmxkdldw 的回复:
Node.js 和 jQuery 虽然都是用js语言写的。但是本质上是不同的。一个是服务器端v8解释。一个是前端各种浏览器解释。只是基本语言语法相似其实差的很远哦。。。。。
Node.js难道不是C++写的么?
taoxinyulov8 2014-07-30
  • 打赏
  • 举报
回复
楼主,建议你看看经济学类书,有个术语叫机会成本。凡事略懂一点,生活多彩一点。。
tuoxiansp 2014-02-12
  • 打赏
  • 举报
回复
引用 45 楼 yangjjfan 的回复:
很想告诉你,nodejs不用看,因为绝对是一个js框架而已,你所看到的这些所谓的很炫的功能,就是封装的一些脚本,做了3年的web开发你连这点都没弄懂,真心觉得有点可惜 [quote=引用 41 楼 personball 的回复:] 引用 40 楼 yangjjfan 的回复: 首先,我不是楼主。。。 至于上面争论的东西,我已无力吐槽。。。你好歹nodejs入个门再来和我理论。。
[/quote] 实在忍不住吐槽了。。请你把nodejs当成php,rails这样的东西。你跟另一个自以为是的人一样,理解太肤浅了。。。
yangkaiyun 2013-03-04
  • 打赏
  • 举报
回复
飘过
tmxkdldw 2013-02-18
  • 打赏
  • 举报
回复
Node.js 和 jQuery 虽然都是用js语言写的。但是本质上是不同的。一个是服务器端v8解释。一个是前端各种浏览器解释。只是基本语言语法相似其实差的很远哦。。。。。
qq414011 2013-02-18
  • 打赏
  • 举报
回复
学习啦,好东西
howtodown 2013-02-17
  • 打赏
  • 举报
回复
引用 16 楼 pgmsoul 的回复:
引用 15 楼 fzfei2 的回复:avaScript当然有局部变量的,有作用域 ,生存的上下文环境 JavaScript没有作用域, JavaScript的变量作用域是语法硬性规定的, 函数内部的var变量, 你一样可以返回给外部, 本质上说, 所有JavaScript变量都是一样的. C++分栈变量和堆变量, 栈这个特性高级语言很少涉及到, 栈之所以统治编程语……
同意
aaaa1aaaa23456 2013-02-17
  • 打赏
  • 举报
回复
果然还是很强大的啊
danjiewu 2013-02-17
  • 打赏
  • 举报
回复
以前不知道Node.js只知道服务器端javascript,了解了一下之后觉得,这只是一个有着javascript语法的另一个Java或者C#语言,有什么优势吗?
  • 打赏
  • 举报
回复
你怎么证明 js 中 一个内部变量 在出来范围后 没有 被释放?
hugsnow 2013-02-16
  • 打赏
  • 举报
回复
楼主白说了…… 某些回复的认为Javascript就是用于网页中,而Node.js就是一个和jQuery类似的框架。不想对楼主说那个贬义的词汇,不过起码说明你发帖的地方不对。
woaini2000211 2013-02-15
  • 打赏
  • 举报
回复
引用 18 楼 wzs_xyz 的回复:
javascript为网页前端动态效果而生,而网页前端并不用太考虑效率,要知道web程序一旦页面刷新或跳转,所有资源都会被释放,所以一般情况下,连内存泄露这种天大的问题都不用在意,何况只是资源释放的及时性。所以js的机制是完全适合在web环境生存的,你把这个说成一个巨大缺陷,实在不能赞同 你脱离了语言的应用环境单独去审视它的内存效率问题,感觉没有什么意义;如果像你这……
不一定 现在由于ajax的应用 页面无刷新 js代码的效率以及内存泄露等问题越来越重要
ihaveadream_gd 2013-02-15
  • 打赏
  • 举报
回复
很好很强大呀呀呀
数码玩艺 2013-02-13
  • 打赏
  • 举报
回复
xiao6h 2013-02-11
  • 打赏
  • 举报
回复
不错 ,支持了
shiqinxue5 2013-02-10
  • 打赏
  • 举报
回复
邮件标题:超多Java\ASP.NET\PHP\oracle\android\iphone\VC++项目实战视频教程分享 内容:各位IT朋友们,推荐超多Java\ASP.NET\PHP\Oracle项目实战视频教程 java项目实战视频:http://www.ibeifeng.com/category.php?id=1 ASP.NET项目实战视频:http://www.ibeifeng.com/category.php?id=3 android项目实战视频:http://www.ibeifeng.com/3g_android.php ios项目实战视频:http://www.ibeifeng.com/ios.php PHP项目实战视频:http://www.ibeifeng.com/category.php?id=14 VC++项目实战视频:http://www.ibeifeng.com/category.php?id=15 更多项目视频教程请上北风网:http://www.ibeifeng.com
shangdaming 2013-02-08
  • 打赏
  • 举报
回复
引用 85 楼 pg830616 的回复:
一个是客户端执行的一个是服务器端执行的 没有这样比法的吧。。。 服务器端执行的如果没有垃圾回收,后果可想而知 而客户端的大不了耗内存CPU多些呗 况且现在的硬件已经非常好了
有些神经病就特别讲究这个啊,各种变态操作内存占20%以上就咆哮,有木有!
shangdaming 2013-02-07
  • 打赏
  • 举报
回复
v8我也看了,貌似很扯淡,有那个时间学它的用法不如自己注意回避JavaScript的bug,还有,v8并不比c++快,各位不要抱幻想了
nb7480301 2013-02-07
  • 打赏
  • 举报
回复
打开一直在加载...没法运行
pg830616 2013-02-07
  • 打赏
  • 举报
回复
一个是客户端执行的一个是服务器端执行的 没有这样比法的吧。。。 服务器端执行的如果没有垃圾回收,后果可想而知 而客户端的大不了耗内存CPU多些呗 况且现在的硬件已经非常好了
加载更多回复(78)

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧