JSF: Mojarra против OmniFaces @ViewScoped: @PreDestroy, но bean не может быть собранным мусором

Этот вопрос специфичен для OmniFaces @ViewScoped bean (однако интерес к более широкому обсуждению об утечке памяти и утилизации ресурсов с помощью JSF @ViewScoped). Он основан на результатах этого тестового веб-приложения NetBeans8.1, доступного на GitHub:

Исследование нежелательного хранения ссылок на различные формы JSF @ViewScoped beans по типу навигации

https://github.com/webelcomau/JSFviewScopedNav

В этом тестовом веб-приложении есть полный README с полными инструкциями, а также аннотированные тестовые веб-страницы, сравнивающие устаревший стиль JSF2.0 @ManagedBean @ViewScoped, JIF2.2-стиль CDI-friendly @Named @ViewScoped и OmniFaces @Named @ViewScoped beans.

Результаты, полученные с помощью JVisualVM для диагностики, суммируются в загружаемой электронной таблице (см. также снимок экрана ниже) и указывают, что, хотя OmniFaces-2.5.1 @ViewScoped bean вызывает методы @PreDestroy в случаях навигации на основе GET при выходе представление (дающее возможность освободить большинство ресурсов), похоже, не позволяет сборку мусора фактического bean (по крайней мере, не с настройками текущего контекстного параметра).

В web.xml приложение настроено на использование:

com.sun.faces.numberOfViewsInSession 4

com.sun.faces.numberOfLogicalViews 4

По умолчанию этот параметр, специфичный для OmniFaces, закомментирован:

org.omnifaces.VIEW_SCOPE_MANAGER_MAX_ACTIVE_VIEW_SCOPES

По умолчанию для javax.faces.STATE_SAVING_METHOD используется "сервер".


Основной вопрос:

Q1: Правильно ли, что эти OmniFaces @ViewScoped beans не могут быть спроектированы как сборщик мусора, собранный "вживую" (что означает, например, провокацию с использованием действия сборки мусора Profiler, не дожидаясь окончания сеанса)?

Q2: Если это так, как может (должен) высвободить один из них при переходе от страниц (особенно в навигационных системах GET)?

Q3: Если это не так (если мои результаты неверны из-за каких-то других настроек), почему я не вижу, что вызвал их сбор мусора, и что я могу сделать, чтобы они действительно были автоматически выпущены?

Поскольку тестовое веб-приложение доступно для загрузки, хорошо документировано и, надеюсь, само собой разумеется, я не буду здесь давать код, а просто сравнительные результаты до сих пор, а также скриншоты страниц тестового веб-приложения в действии:

скриншоты сравнительных результатов

скриншот домашней страницы, приводящей к ошибкам типа  bean

снимок экрана в стиле JSF2.0

снимок экрана типа JSF2.2

скриншот случая OmniFaces

sreenshot целевой страницы после навигации

Ответы