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