-
Notifications
You must be signed in to change notification settings - Fork 9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于WeakMap的一个问题 #362
Comments
我举的这个例子不好。原意是销毁一个对象,导致它自动在 我一时想不出来其他销毁对象的例子,欢迎你帮忙一起想。 |
这个示例确实糟糕。。。 实际上 weakmap 就是允许你关联一个对象但不影响 gc 。可以写一个小对象关联一坨数据的例子,使用 weakmap 就允许小对象一旦被删,关联的一坨数据也会被释放掉(否则占用的内存无法回收)。 |
貌似wm的机制就是无法检查是否已经释放掉,因为一旦检查就需要引用待检查值,而这个引用必然是有效的。。。因此值肯定不会销毁。
曾经尝试过检测……但终于想通了。。。
… 在 2017年3月30日,下午7:38,Ruan YiFeng ***@***.***> 写道:
我举的这个例子不好。原意是销毁一个对象,导致它自动在wm之中消失,但是实际上造成了wm.get(null)的效果。
我一时想不出来其他销毁对象的例子,欢迎你帮忙一起想。
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub <#362 (comment)>, or mute the thread <https://github.com/notifications/unsubscribe-auth/ACrwV-4WrMVqYZqBTE7VGWr_GzzDGeATks5rq5QagaJpZM4MtyTL>.
|
在 node 里可以使用 process.memoryUsage() 来变相测试是否释放(需要占用足够大的内存以便观测)。 |
之前我一直用chrome的开发者工具测试,虽然那个里面有一个collect garbage的按钮,但是不管用。。
|
这个例子比我原先那个好多了,我要把它更新到书里。 太感谢大家了。:) |
阮老师,你好!发现在 http://es6.ruanyifeng.com/#docs/set-map 链接里的vtxf例子代码里有个笔误,const b = new Object(); 应为 var b = new Object(); 不然后边无法执行 b = null;谢谢 |
@foxdyor 谢谢指出,已经改成 |
js manually GC |
@ruanyf 阮老师,你好! 关于vtxf例子我有个疑惑,为什么GC之后,vm.get(b)还是能获取到数组 (我本来理解是对应的内存空间被销毁了那么相应地也获取不到数据了) |
你所展示的代码只进行了回收,没有进行清除引用 |
阮老师,你好!
打扰,问您一个问题。
Set 和 Map 数据结构一节讲到的 WeakMap 有这样一段代码:
这个里面的这两句:
是否可以理解为 wm.get(null),这样的话,貌似就和element没有关系了吧?
我是觉得wm.get(element)并没有办法来检测wm中是否存在没有赋值为null之前的element元素。不知是否有误?
我在chrome控制台上做了如下测试:
即使有另外一个变量alias引用了element,最后的结果也还是undefined。
The text was updated successfully, but these errors were encountered: