2012-04-02 3 views
3

Я пытаюсь проследить утечку памяти в своем игровом приложении. Программа выполняется нормально один раз, но если она запускается и закрывается повторно, то в конечном итоге она будет запущена в виде некоторой ошибки памяти. После долгих попыток установить и понять анализатор памяти 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: Если я полностью покинуть трек о моей интерпретации, есть ли что-то еще что выглядит подозрительно на картинке?

enter image description here

+1

Вы смотрели этот Google IO видео раньше? http://www.youtube.com/watch?v=_CruQY55HOk Я считаю, что он подробно объясняет, как использовать инструмент анализатора памяти. Я не помню, где именно щелкнуть, но я считаю, что есть какой-то способ для каждого объекта, чтобы увидеть, какой объект держит ссылку на него, не позволяя ему собираться. Должно быть подробно описано в видео. – Tim

ответ

1

SD_GamePlay$1, SD_GamePlay$2 и другие не являются экземплярами SD_GamePlay класса. Это просто анонимные внутренние классы в классе SD_GamePlay. SD_GamePlay$MicksPanelThing и SD_GamePlay$MicksThreadThing являются неанонимными внутренними классами в классе SD_GamePlay.

Объяснение $ в имени: https://stackoverflow.com/a/7484241/436938

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