0

我知道我的问题太模糊了,但问题就在这里。我解析了一个非常大的文件,创建了我的对象的链接列表(顺便说一句,它们与位图无关)。有时我会遇到臭名昭著的“OutOfMemoryError”。在那之前,我看到了我自己的:

available 478.0M, 47.5%, low=false
message in logcat that I create with:
        ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
        ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
        activityManager.getMemoryInfo(mi);
        double availableMegs = mi.availMem / 0x100000L;
        double percentAvail = mi.availMem / (double)mi.totalMem * 100.0;

注意大量的可用内存。

之后我看到一堆 GC 消息,最后一条是:

I/art: Forcing collection of SoftReferences for 184B allocation
I/art: Clamp target GC heap from 256MB to 256MB
I/art: Alloc concurrent mark sweep GC freed 3(96B) AllocSpace objects, 0(0B) LOS objects, 1% free, 252MB/256MB, paused 539us total 41.854ms
I/System.out: java.lang.OutOfMemoryError: Failed to allocate a 184 byte allocation with 3403124 free bytes and 3MB until OOM; failed due to fragmentation (required continguous free 16384 bytes for a new buffer where largest contiguous free 4096 bytes)

显然我发现了这个错误,即使我永远无法断点它。GC 和 ActivityManager 之间的差异也是惊人的。问题是在那之后我无法继续,因为 GUI 无法为其数据分配内存。换句话说,发现这个错误为时已晚。所以我需要一些建议如何确定何时停止,以便程序仍然可以继续。请注意,我不需要如何优化我的数据的建议,因为无论它有多好,我总是可以用更大的文件使程序崩溃。

4

0 回答 0