Вот мой вариант использования. Мы пытаемся сузить потенциальную утечку памяти в приложении, и мы используем инструмент анализа памяти, чтобы сделать снимок кучи, чтобы мы могли искать экземпляры объектов и ссылки. (Если это поможет, мы используем YourKit.)
В этом приложении широко используются динамические прокси и прокси-серверы CGLIB, которые в конечном итоге хранят тонны ссылок на классы и загрузчики классов в WeakHashMaps.
После запуска нашего тестового примера мы ожидаем, что все жесткие ссылки на объект X и его загрузчик классов исчезнут, но, поскольку в конце тестового примера было задействовано много прокси, у нас осталось много слабых / мягких ссылок. (Я могу найти только ссылки WeakHashMap, но YourKit объединяет слабые и мягкие ссылки в одну позицию в сводке, поэтому я не могу быть уверен, что где-то не пропущена мягкая ссылка.)
Это верно даже после запроса полного GC от JVM. (Использование JDK sun 1.6.0_23 в режиме сервера.)
Это кажется , как будто JVM допускает, что есть только слабые / мягкие ссылки на эти объекты, но я не могу заставить это GC эти вещи быть на 100% уверенными. (Итак, я хочу, чтобы это полностью исчезло из кучи и использование permgen загрузчиком классов также исчезло.)
Кто-нибудь знает способ настроить и / или заставить JVM распоряжаться объектами, имеющими только мягкие / слабые ссылки?