Возьмем следующий пример:
public void init() {
final Environment env = new Environment();
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
env.close();
}
});
}
Во-первых, где хранится env
? Это:
- скопированный компилятором в скрытую переменную-член внутреннего класса, который ссылается на нее
- скопирован в кучу
- осталось в стеке и как-то ссылается там
- что-то еще
Мое предположение - это первый вариант.
Во-вторых, делайте какие-либо проблемы с производительностью, возникающие в результате этого (вместо того, чтобы просто создавать env
как переменную-член класса и ссылаться на нее как таковой), особенно если вы создаете большое количество таких внутренних конструкций класса, которые ссылаются на final локальные переменные.