Joe*_*oel 19 java performance final local-variables
请看以下示例:
public void init() {
final Environment env = new Environment();
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
env.close();
}
});
}
Run Code Online (Sandbox Code Playgroud)
首先,env存储在哪里?是吗:
我的猜测是第一个选择.
其次,执行这样做会产生任何性能问题(而不是简单地创建env类的成员变量并引用它),特别是如果要创建大量引用最终局部变量的内部类构造.
Thi*_*ilo 19
是的,它们被复制,这就是你必须将变量声明为final的原因.这样,保证在复制完成后不会更改它们.
这对于实例字段是不同的,即使不是最终字段也是可访问的.在这种情况下,内部类获取对它用于此目的的外部实例的引用.
private Environment env; // a field does not have to be final
public void init() {
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
env.close();
}
});
}
Run Code Online (Sandbox Code Playgroud)
其次,执行此操作会产生任何性能问题吗?
相比什么?你需要为你的内部类提供字段或变量才能工作,副本是一种非常有效的方法.它只是一个"浅"的副本:只复制(在你的例子中)环境的引用,而不是环境本身.
| 归档时间: |
|
| 查看次数: |
5328 次 |
| 最近记录: |