A действительно предотвратит сборку мусора в B, когда вы используете стандартные ссылки для хранения ваших слушателей. В качестве альтернативы, когда вы поддерживаете списки слушателей вместо определения
новый ArrayList ();
Вы могли бы сделать что-то вроде
новый ArrayList > ();
Оборачивая свой объект в слабую ссылку, вы можете удержать его от продления жизни объекта.
Конечно, это работает, только если вы пишете класс, который содержит слушателей