Я пытаюсь проследить утечку памяти в своем игровом приложении. Программа выполняется нормально один раз, но если она запускается и закрывается повторно, то в конечном итоге она будет запущена в виде некоторой ошибки памяти. После долгих попыток установить и понять анализатор памяти eclipse я, наконец, привел данные, приведенные ниже в screengrab.Интерпретация вывода анализатора памяти eclipse
Мое приложение основано на одном приложении под названием SD_globals как так:
public class SD_Globals extends Application
{
int example_global_data = 99;
// stuff
}
и пять отдельных видов деятельности, каждый из которых имеет доступ к целому ряду глобальных данных, заявленных в SD_Globals. Одним из видов деятельности, например, является SD_gameplay так:
public class SD_GamePlay extends Activity implements View.OnClickListener
{
SD_Globals gs; // gs stands for global state
gs = ((SD_Globals)getApplicationContext());
// now I can access global variable using code like this:
int x = gs.example_global_data;
}
Глядя на данные в Screengrab, повторяющиеся экземпляры GamePlay выглядит странно. Я предполагаю, что, возможно, каким-то образом новые действия создаются заново каждый раз, когда деятельность выполняется без сбора мусора (я прав?) ... И если да, то что это может сделать?
EDIT: Если я полностью покинуть трек о моей интерпретации, есть ли что-то еще что выглядит подозрительно на картинке?
Вы смотрели этот Google IO видео раньше? http://www.youtube.com/watch?v=_CruQY55HOk Я считаю, что он подробно объясняет, как использовать инструмент анализатора памяти. Я не помню, где именно щелкнуть, но я считаю, что есть какой-то способ для каждого объекта, чтобы увидеть, какой объект держит ссылку на него, не позволяя ему собираться. Должно быть подробно описано в видео. – Tim