我已经多次看到这样的代码,开发人员在范围内创建范围。
我能想到的原因很少:
1.隐藏封装范围的变量,隔离它们。 (也允许声明具有相同名称的变量)
2.允许在范围1中分配的内存在关闭时进行垃圾回收。
但是我不认为任何这些都足以做到这一点......
这样做有什么意义?
答案 0 :(得分:1)
作为Java Language Specification州
声明的范围是程序的范围 声明声明的实体可以使用a来引用 简单名称,只要它是可见的(§6.4.1)。
换句话说,范围仅限制源代码中名称的使用。它对运行时行为没有影响,因此对垃圾收集没有影响。
您的第一个建议或多或少是使用block的唯一原因。但有时候它太麻烦了。就个人而言,我可能会在我编写的代码中使用过一两次。
垃圾收集部分由finalization of class instances定义。该章讨论可达性
reachable
对象是任何可以访问的对象 从任何实时线程继续计算。
JVM无法收集此类对象。
JLS还提到了
可以设计优化程序的转换以减少 可达的对象数量小于那些对象的数量 天真地被视为可达。例如,Java编译器或 代码生成器可以选择设置一个不会的变量或参数 更长时间用于null以使这样的对象存储 可能会更快回收。
这也在
的答案中讨论过