2009-10-13 1 views
2

Мне нужно знать, сколько объектов какого-либо типа существует в моей системе в любое время. Стандартный метод со статической переменной и приращением/декрементом в конструкторе/distructor не работает, потому что пропустил метод Object.finalize.Как я могу подсчитать объекты какого-либо типа в J2me

+0

Просто интересно, почему это необходимо ... для оптимизации целей? – Fostah

+0

На мобильной платформе, которую я использую GarbageCollector, работает очень нестабильно, и я подозреваю, что утечка системных объектов (SocketConnection) – Pirks

ответ

1

В качестве ответа на брутфорс вы можете создавать все свои объекты с помощью специальной фабрики Singleton, где вы можете увеличивать счет, когда создается новый объект , и удалите их с помощью этой фабрики до:

Object newOne = ObjectsFactory.getInstance().getNewObject(); // in this method count++ 
... 
... 
// we don`t need newOne anyMore 
ObjectsFactory.getInstance().releaseObject(newOne); // here count-- 
newOne = null; // let gc do its work. 

Этот подход не дает вам точно результатов, но что-то округлое.

0

В стандартной Java вы можете использовать WeakReference, но это невозможно в J2ME. Кроме того, нет стандартного API для перечисления всех объектов. «Самый простой» способ сделать это на Java - это написать сборщик мусора.

Итак, ваш единственный выбор - запустить код в Java IDE, который может выполнять профилирование во время выполнения или вручную уничтожать ваши объекты, поэтому вы можете их подсчитать.

0

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

2

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

Единственная ставка будет заключаться в том, чтобы включить профилировщик под WTK/bin/prefs. там есть монитор памяти.

+0

Профайлер Не работает в Samsung SDK – Pirks

+0

Есть ли причина, по которой вам нужно использовать SDK Samsung? Вы можете профилировать свое приложение через стандартный WTK, вы должны получить аналогичные результаты. Очевидно, что не на 100% совместим с точными данными времени/обработки, но я бы не стал доверять эмулятору никоим образом. – drubin

Смежные вопросы