ИМХО, это все еще не по теме.

ал, что знаю ответ на этот вопрос, но я не могу найти никакого подтверждения после часа или около того поиска.

В этом коде:

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());
            }
        });
    }
}

Предположить, чтоregisterCallback где-то сохраняет свой параметр, так что объект анонимного подкласса будет жить некоторое время. Очевидно, что этот объект должен поддерживать ссылку наobj1 так чтоonEvent будет работать, если это называется.

Но, учитывая, что объект не используетobj2это все еще поддерживает ссылку наobj2, так чтоobj2 нельзя собрать мусор, пока объект живет? У меня сложилось впечатление, чтовсе видимыйfinal (или фактически окончательные) локальные переменные и параметры были захвачены и, таким образом, не могли быть GC'ы, пока объект был жив, но я не могу найти ничего, что говорит так или иначе.

Это зависит от реализации?

Есть ли раздел в JLS, который отвечает на это? Я не смог найти ответ там.