Есть ли способ FORCE слабых и/или мягких ссылок на объекты, чтобы быть GC'd на Java?

Вот мой сценарий использования. Мы пытаемся сузить потенциальную утечку памяти в приложении и используем инструмент анализа памяти для снимка кучи, чтобы найти экземпляры объектов и ссылки. (В случае если это поможет, мы используем YourKit.)

Это приложение широко использует динамические и CGLIB прокси, которые в конечном итоге хранят тонны ссылок на классы и загрузчики классов в WeakHashMaps.

После прогона нашего тестового кейса мы ожидаем, что все жесткие ссылки на объект X и его класс-загрузчик исчезнут, но так как в конечном итоге в тестовом кейсе было задействовано много прокси-серверов, у нас осталось много слабых/мягких ссылок на него. (Я могу найти только ссылки на WeakHashMap, но YourKit обертывает и слабые, и мягкие ссылки в один строчный элемент в резюме, так что я не могу быть уверен, что где-то не пропустил мягкую ссылку)

Это верно даже после запроса полной ГК из JVM. (Использование JDK 1.6.0_23 от Солнца в режиме сервера.)

Это кажется как будто JVM признает, что есть только слабые/мягкие ссылки на эти объекты, но я не могу заставить GC эти вещи быть 100% уверенным. (Итак, я хочу, чтобы это полностью исчезло из кучи и чтобы его класс-загрузчик также использовал permgen)

Кто-нибудь знает способ настроить и/или заставить JVM избавляться от объектов, на которые есть только мягкие/слабенькие ссылки?

12
задан Paul Bellora 6 August 2011 в 17:59
поделиться