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