odas as variáveis finais são capturadas por classes anônima

Pensei que sabia a resposta para isso, mas não consigo encontrar nenhuma confirmação depois de uma hora de pesquis

Neste código:

public class Outer {

    // other code

    private void method1() {
        final SomeObject obj1 = new SomeObject(...);
        final SomeObject obj2 = new SomeObject(...);
        someManager.registerCallback(new SomeCallbackClass() {
            @Override
            public void onEvent() {
                 System.out.println(obj1.getName());
            }
        });
    }
}

Assuma issoregisterCallback salva seu parâmetro em algum lugar, para que o objeto da subclasse anônima permaneça por um tempo. Obviamente, esse objeto deve manter uma referência aobj1 de modo aonEvent funcionará se for chamado.

Mas dado que o objeto não usaobj2, ainda mantém uma referência aobj2, de modo aobj2 não pode ser coletado como lixo enquanto o objeto vive? Fiquei com a impressão de quetodo visívelfinals variáveis e parâmetros locais (ou efetivamente finais) foram capturados e, portanto, não puderam ser colocados em GC enquanto o objeto estivesse vivo, mas não consigo encontrar nada que diga de uma maneira ou de outr

Depende da implementação?

Existe uma seção no JLS que responde a isso? Não consegui encontrar a resposta lá.

questionAnswers(4)

yourAnswerToTheQuestion