MuPdf中的OutOfMemory问题

3

大家好,我在我的项目中使用MuPdf库来查看文档。问题是,在平板电脑的11英寸屏幕上打开3-7个文档时,会出现内存溢出的情况。当您加载新文档时,所有对先前文档的引用都会被销毁,但文档的图像不会从内存中删除。内存中的图像对象大小为10-12兆字节。在7英寸平板电脑上不会出现这个问题。

也许有人遇到过这个问题?


我也在寻找解决方案。当我在不同页面打开和关闭pdf活动时,我收到了一个内存溢出错误。如果mupdf以低质量渲染,则没有问题,但是当它以HQ(主要是在10.1英寸平板电脑上以纵向模式全屏显示页面时)渲染时,会发生溢出。 - markov00
尝试从代码库更新mupdf后,我的问题消失了。 - alezhka
4个回答

3
这个问题可以通过在PageView.java的relaeseBitmaps()方法中调用bitmap的recycle()方法来解决。
public void releaseBitmaps() {
        reinit();
        mEntireBm.recycle();
        mPatchBm.recycle();
        mEntireBm = null;
        mPatchBm = null;
    }

这解决了我在打开约10个PDF后遇到的OutOfMemoryError问题。感谢您! - retromuz

0
在mupdf.c文件中找到"/* 128 MB store for low memory devices. Tweak as necessary. */",然后更改内存限制并尝试。我尝试了512,渲染速度比以前快了。

你不能用这种方式修复内存泄漏! - retromuz

0
我在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
        }

编辑:打开文件几次后它会崩溃。


-1
  1. 编辑mupdf.c文件

更改: /* 为低内存设备提供128MB的存储空间。根据需要进行调整。 */ glo->ctx = ctx = fz_new_context(NULL, NULL, 128 << 20); 为 /* 为低内存设备提供32MB的存储空间。根据需要进行调整。 */ glo->ctx = ctx = fz_new_context(NULL, NULL, 32 << 20);

就这样。 最大堆内存量约为50MB。


你不能用这种方式修复内存泄漏。 - retromuz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接