Как я могу найти объекты, которые больше не используются? - PullRequest
3 голосов
/ 20 января 2010

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

Так что мой вопрос в том, есть ли какие-нибудь хорошие инструменты, которые могут показать мне, какие объекты не были затронуты, поскольку конкретный момент времени продолжал не затрагиваться до конца программы. Я использовал yourkit для проверки всех объектов, но часто неясно, нужно ли их сохранять или нет. Если бы у меня было что-то, что объединяло бы вычисления / отчеты о вашей памяти с каким-то инструментом покрытия, я был бы счастлив.

Ответы [ 2 ]

3 голосов
/ 20 января 2010

Слабая ссылка используется для определения, когда на объект больше не ссылаются.

  // Create the weak reference. 
     ReferenceQueue rq = new ReferenceQueue(); 
     WeakReference wr = new WeakReference(object, rq); 
  // Wait for all the references to the object. 
  try { 
         while (true) 
        {  
              Reference r = rq.remove(); 
              if (r == wr) 
               { // Object is no longer referenced. } 
         } 
     } 
     catch (InterruptedException e) { } 
2 голосов
/ 20 января 2010

Вы можете использовать VisualVM для проверки кучи и для мониторинга сборки мусора. Вы должны иметь возможность установить точку останова в своей программе, а затем посмотреть на вещи, которые, как вы подозреваете, не должны храниться, и выяснить, что на них ссылается.

Раньше я использовал коммерческий инструмент под названием (JProbe?), Который делал именно то, что вы хотите, но это было 8-9 лет назад, я не знаю, доступен ли он еще, или как он может называться, если он есть. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...