LINUX.ORG.RU

[android] Heap Space

 


0

2

Столкнулся в своем приложение с тем что постоянно забит heap space.
Найти место где я накосячил не удалось, по этому я решил создать пустое android приложение и посмотреть сколько оно занимает памяти: результат
Получается что пустое приложение то же заняло весь heap space
И мне не понятно почему так получается и что с этим делать?


Ответ на: комментарий от Kosyak

Нет, не помогает.
К тому же GC сам по себе вызывается когда не хватает памяти, я так и обнаружил проблему, у меня в реальной программе после нескольких минут работы все начинает дико тормозить потому что GC начинает вызываться каждую секунду.
Меня напрягает вот это:
1-byte array(byte[], boolean[]) занимаемый 4 мегабайта.
P.S. Скриншот в первом посте с пустого проекта который генерится эклипсом, т.е. я накосячить не мог.

n4ela
() автор топика
Ответ на: комментарий от DELIRIUM

Код могу выложить только вечером.
Это стандартный еклипсовский шаблон получаем по New Android Project

n4ela
() автор топика
Ответ на: комментарий от n4ela

Меня напрягает вот это:
1-byte array(byte[], boolean[]) занимаемый 4 мегабайта.

Это какие-то блобы, чего тут напрягаться.

const86 ★★★★★
()
Ответ на: комментарий от const86

В том, что эти блобы занимают 50% доступной памяти.

Код в студию.

package test.android;

import android.app.Activity;
import android.os.Bundle;

public class AndroidTestProjectActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
n4ela
() автор топика
Ответ на: комментарий от Kosyak

Проверил на реальном устройстве (до этого тестировал на эмуляторе), ситуация не изменилась, при старте приложения с одним activity в котором нету ни какой логике, свободно остается 2-3 процента heap space.

n4ela
() автор топика
Ответ на: комментарий от pozitiffcat

Разобрался со своей проблемой.
То что изначально выделяется 1-byte array(byte[], boolean[]) 4 мегабайта оказалось нормально.
Меня смутило то что изначально занято примерно 5.5 из 6 доступных.
Проверил на тестовом приложение если по нажатию на кнопку начать заполнять память(например разные строки класть в map) то со временем эти 6-ть мегабайт будут расширяться.
У меня же в реальном приложение расширение не происходило, происходило это из-за того что я пытался сохранить файл из интернета побайтовым считыванием т.е. делал

while ((b = is.read()) != -1) {
...
}
В результате GC успевал вызываться внутри цикла while и тормозить приложение, а память не расширялась потому что GC каждый раз удавалось освободить минимальное количество памяти

n4ela
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.