3
我看到下面的东西在我的亚行logcat窗口:为什么这些内存分配数不加起来?
01-24 14:40:56.916: E/dalvikvm-heap(24727): 1957200-byte external allocation too large for this process.
01-24 14:40:56.966: E/GraphicsJNI(24727): VM won't let us allocate 1957200 bytes
01-24 14:40:56.976: E/dalvikvm(24727): OutOfMemory: max: 50331648(49152 K), total: 39985120(39047 K), alloc: 33659240(32870 K), extAlloc: 8993870(8783 K)
我不明白的是为什么这些数字对不上(或者我只是不明白这是如何工作)。我看到OutOfMemory:基本上最大为48MB - 我认为这是最大的堆大小。不确定这个上下文中的“total”是什么意思,但它看起来像大约39MB。它在2MB分配上失败了,我不明白为什么它失败了,应该有9MB可用...我在这里误解了什么?
所以必须有一种方法来重新配置碎片内存。 System.gc()是否可以做到这一点? – user645402
GC可以减少某些碎片,但并非所有内存分配都可以移动。当前正用于调用操作系统的缓冲区不能移动。 – twk
所以后来的另一件事是,这个东西应该支持48MB的堆(至少根据Runtime.maxMemory(),那么为什么没有自动增大堆的大小,以适应新的分配? – user645402