OutOfMemory в MuPdf

Здравствуйте, я использую библиотеку MuPdf в своем проекте для просмотра документов. Проблема в том, что при открытии 3-7 документов в активности 11 дюймов на планшете у меня происходит переполнение памяти. При загрузке нового документа все ссылки на предыдущий документ уничтожаются, но образ документа из памяти не удаляется. объекты создаются в памяти образа 10-12 мегабайт. на планшете размером 7 дюймов такой проблемы не возникает.

Может кто сталкивался с этой проблемой?


person alezhka    schedule 24.04.2012    source источник
comment
Я тоже ищу решение. Я получил ошибку нехватки памяти, когда я открываю и закрываю на другой странице действие pdf. Если mupdf рендерит в низком качестве, проблем нет, но когда он рендерится в HQ (в основном, в портретном режиме на полноэкранной странице в планшете 10.1), он переполняется.   -  person markov00    schedule 14.05.2012
comment
mupdf попробуй обновить из репозитория, у меня проблема исчезла.   -  person alezhka    schedule 14.05.2012


Ответы (4)


Эта проблема решается путем вызова recycle() для растрового изображения в методе relaeseBitmaps() PageView.java.

public void releaseBitmaps() {
        reinit();
        mEntireBm.recycle();
        mPatchBm.recycle();
        mEntireBm = null;
        mPatchBm = null;
    }
person Amulya Maheshwari    schedule 28.02.2014
comment
Это решило ошибку OutOfMemoryError, которую я получал после открытия примерно 10 PDF-файлов. Спасибо за это! - person prageeth; 07.07.2014

Я добавил следующий код, чтобы заставить сборщик мусора в PageView.java, и пока он работает нормально.

if (mEntireBm == null || mEntireBm.getWidth() != newSize.x
                              || mEntireBm.getHeight() != newSize.y) {
            mEntireBm = Bitmap.createBitmap(mSize.x, mSize.y, Bitmap.Config.ARGB_8888);
            System.gc();//Added
            Runtime.getRuntime().gc();//Added
        }

Отредактировано: вылетает после открытия файла несколько раз

person GoalGinger    schedule 31.07.2012

Внутри mupdf.c найдите

"/* 128 МБ для устройств с малым объемом памяти. При необходимости настройте. */" и

поменяй лимит памяти и попробуй

Я пробовал с 512, рендеринг быстрее, чем раньше

person Sunny Kumar Aditya    schedule 05.06.2012
comment
Вы не можете исправить утечку памяти таким образом! - person prageeth; 07.07.2014

  1. Изменить mupdf.c

Изменение: /* 128 МБ хранения для устройств с малым объемом памяти. Подправьте по мере необходимости. */ glo->ctx = ctx = fz_new_context(NULL, NULL, 128 ‹‹ 20); to /* 128 МБ для устройств с малым объемом памяти. Подправьте по мере необходимости. */ glo->ctx = ctx = fz_new_context(NULL, NULL, 32 ‹‹ 20);

Вот и все. Максимальный объем памяти кучи ~50Mb.

person 3draven    schedule 07.08.2013
comment
Вы не можете исправить утечку памяти таким образом. - person prageeth; 07.07.2014