18
看看下面的例子:Java最终局部变量存储在哪里?
public void init() {
final Environment env = new Environment();
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
env.close();
}
});
}
首先,在那里被存储env
?是:
- 由编译器复制到内部类的隐藏成员变量引用它
- 复制到,并参考上,堆
- 留在堆栈上并以某种方式引用的有
- 别的
我猜测是第一个选项。
其次,做这样做会产生任何性能问题(而不是简单地创建env
作为类的成员变量并引用它),特别是如果您要创建大量引用最终本地的此类内部类结构变量。
那么我可以假设这样做没有性能问题? – Joel 2009-12-22 11:08:42
我的私人宠物在这方面是,对外部实例(用于访问字段,而不是变量,被复制)的引用可能是一个问题,如果他们不需要:http://stackoverflow.com/questions/ 758570/is-it-it-possible-make-anonymous-inner-classes-in-java-static – Thilo 2009-12-22 11:15:30
相比于将它引用为成员变量。如果它被复制,那么,我的假设是没有性能影响。 – Joel 2009-12-22 11:17:00