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