Я использую автоматически сгенерированный класс Java для выполнения специального метода. Из-за этого я должен вызывать метод путем отражения.
Это выполнение запускается потоком Swing, поскольку метод (вызывается из «неизвестного» класса) обновляет элемент пользовательского интерфейса. Каждое выполнение нового потока ищет метод в классе, вызывая
Class {
...
public Method[] getMethods() throws SecurityException
...
}
Логика getMethods, кэширует элемент, но я не знаю почему. Профилировщик показывает мне, что объекты метода плавают в памяти.
Я могу отключить кэширование методов Java, установив системное свойство «sun.reflect.noCaches», но мое приложение стало невероятно медленным после того, как я изменил это свойство.
Вопрос:
Я мог бы реализовать свой собственный алгоритм кэширования, прежде чем пытаться получить метод из класса. Но проект, над которым я работаю, очень большой, и у нас есть несколько вызовов для рефлексии.
Что может решить эту проблему?
Какие обстоятельства могут вызвать утечку памяти (неправильный загрузчик классов, ...)?
Проект работает под Linux с использованием Java 1.5