|
|
1
31
有一份旧的Sun文档, Java Platform Performance (遗憾的是,现在链接断了,我还没有找到新的链接),它描述了一种情况,即取消掉了范围的局部变量实际上会对GC产生影响。 然而,本文提到了一个非常古老的java版本。如中所述 this question |
|
|
2
18
JavaGC应该是“健全的”,但不一定立即“完成”。换句话说,它的设计永远不会消除至少一条路径仍然可以访问的对象(从而导致悬空引用)。它不一定是立即完成的,因为它可能需要时间才能删除所有可以删除的内容。 我认为大多数GC神话都来自对这个概念的误解。 很多人养太多了 实例变量 活着,这会引起问题,但这当然不是问题所在。 其他人将局部变量放入实例变量中(例如,通过将其传递给函数),然后认为以某种方式取消局部变量会消除该变量,这当然是不正确的。 最后,有些人过度依赖GC,认为它会为他们关闭功能(例如,当变量被移除时关闭连接),但事实并非如此。我认为这句话的来源是“我真的已经完成了,但我不确定如何确保这一点”。 所以是的,你是对的,这是不必要的。 |
|
|
3
9
|
|
|
4
8
gc知道它在做什么。将var置零不会伤害任何东西,但也不会真正帮助任何东西。杰夫有一个 pretty funny post 就在前几天。 |
|
5
7
据我所知,
是
确实有帮助的案例。例如,什么时候
另一种情况是,如果函数分配了大量临时内存来初始化某些数据以供进一步处理,并且可以在开始处理之前丢弃对临时内存的所有引用,则即使使用局部变量也可能有所帮助:
|
|
|
6
5
在某些边缘情况下,将局部变量置零确实有帮助。这不适用于原始问题中的情况,但无论如何是教育性的。。。让我们来考虑一下这个项目:
如果
没有关于局部变量范围的信息。因此,从JVM的角度来看,上述程序相当于:
(由JAD反编译器生成)
这是受到了来自中国的评论的启发 Zdenek Tronicek on java-cz mailing list (抱歉,用捷克语) |
|
|
7
3
Effective Java 2nd Edition ,作者建议不要对局部变量进行不必要的置零。请参阅有效Java,第二版,第6项:消除过时的对象引用,了解完整的编写过程。 你也可以在文章中看到这一点 Creating and Destroying Java Objects 整篇文章 找到约书亚·布洛赫同意你的地方。 当局部变量不在范围内时,它与对它的引用为null完全相同。 编辑:在Sun网站上添加有效Java第二版的链接 |
|
|
8
2
回到JDK1.3,我确实有一个非常大的对象图的例子,它在图中也包含很多循环引用。清除一些引用确实显著地提高了GC时间。 我不确定这是否适用于现代虚拟机。垃圾收集器变得越来越聪明。 |
|
|
9
1
之前 方法的结尾。这将允许GC在方法完成之前收集该对象,这可能很有用。
|
|
|
10
1
只有两种情况下,我发现将变量设置为null很有用:
|
|
|
11
0
我不知道技术细节,但据我记忆所及,变量只不过是来自当前堆栈帧的引用,在删除此引用之前,无法对对象进行垃圾收集。现在,但是显式地将其设置为null,您已经确保引用已消失。如果你不这样做,你基本上让VM决定何时清除这个引用,这可能是或者可能不是在离开范围时(与C++不同,如果对象位于堆栈上,必须被销毁)。可能是在堆栈帧被下一个帧覆盖时。我不确定是否真的有这样一个虚拟机。 虽然答案很短,但这是不必要的,最终会被标记和扫描。这至多是个时间问题。 |
|
|
12
0
在某些情况下,空变量(通常是实例或类变量)可能很有用。但是取消一个 地方的 方法结束前的变量绝对不起任何作用。
|
|
|
13
0
这几乎从来都不是问题,大多数情况下,为对象设置空值是没有用的。 当您想到对象分配和释放时,请注意“系统”处理的事情:活动线程、未被dispose()d处理的窗口,以及一到两件我现在不记得的事情。 系统中的每个对象都“挂起”在一棵倒立的巨树上的这些挂载点上。如果你从这些“根”上割下任何一根树枝,整个树枝就会掉到地上,并被垃圾收集的割草机收集起来。
(顺便说一句,这些trim非常有效,甚至比C++的free更有效,因为它们不需要在释放对象时触摸每个对象) |
|
|
14
0
如果您不再需要本地范围中的大型对象,那么可以给JVM一个提示并将引用设置为NULL。
|
|
|
15
0
对于GC来说,这样的局部变量的空值不仅没有意义,而且可能会导致不必要地将变量加载到寄存器中以将其空值,这会使情况变得更糟。想象一下,如果在最后一次读取或写入myLocalVar之间有1000行代码,然后引用它只是为了消除引用。该值早已从寄存器中消失,但您必须将其加载回内存才能使用它。 |
|
|
Legofan431 · Lua:本地功能范围 8 年前 |
|
MJ007 · 使用Headless JS[关闭]响应本地通知 8 年前 |
|
|
Kevin · 从公用文件夹中获取本地JSON文件 8 年前 |
|
|
user7820948 · 安装WAMP会删除您当前的本地数据库吗? 8 年前 |
|
|
Blocko · HTML从本地SQL文件加载数据 9 年前 |
|
|
Shane Ang · 封闭局部范围内的变量与全局范围内的变数-Python 10 年前 |