Здравствуйте, Аноним, Вы писали:
А>Здравствуйте,
А>Столкнулся с интересной проблемой:
А>Проект Swing + J2SE, множество классов, инстансов, поэтому имеет место дефицит памяти.
А>Я обнуляю ссылки, но почему-то GC не запускается т.е. память не освобождается и так может продолжаться часами. Но как только я делаю minimize и maximize главному окну программы, то все сразу освобождается и все хорошо.
А>Может происходит какой-нибудь event для GC?
А>Буду очень благодарен за любую помощь.
А>Спасибо
Есть забавный подход — код, который может кинуть OoE, обрамлять в try-catch(OoE) и в catch-блоке делать попытки сбора мусора. И соот-но, после успешной (как определить успешность? А хрен знает. Можно разницу между freeMem-было и freeMem-стало смотреть) сборки пробовать вызывать тот код, который может кинуть OoE
Причем "попытки сбора мусора" — это не просто один вызов System.gc(), а несколько (раз пять), причем с промежутками (Thread.sleep()) между вызовами по 0.1..0.2 сек — так чтобы примерно до секунды общего простоя набиралось.