2
08-30 14:24:14.281: D/dalvikvm(2777): GC_FOR_ALLOC freed 6319K, 41% free 9950K/16724K, paused 12ms, total 12ms
08-30 14:24:14.281: I/dalvikvm-heap(2777): Grow heap (frag case) to 13.750MB for 4194320-byte allocation
08-30 14:24:14.291: D/dalvikvm(2777): GC_FOR_ALLOC freed <1K, 17% free 14045K/16724K, paused 13ms, total 13ms
08-30 14:24:14.381: D/dalvikvm(2777): GC_FOR_ALLOC freed 5122K, 30% free 9955K/14152K, paused 12ms, total 12ms
08-30 14:24:14.381: I/dalvikvm-heap(2777): Grow heap (frag case) to 13.755MB for 4194320-byte allocation
08-30 14:24:14.391: D/dalvikvm(2777): GC_FOR_ALLOC freed <1K, 1% free 14051K/14152K, paused 13ms, total 13ms
08-30 14:24:14.451: D/dalvikvm(2777): GC_FOR_ALLOC freed 5122K, 2% free 8933K/9032K, paused 14ms, total 14ms
08-30 14:24:14.461: I/dalvikvm-heap(2777): Grow heap (frag case) to 12.273MB for 3686416-byte allocation
08-30 14:24:14.471: D/dalvikvm(2777): GC_FOR_ALLOC freed <1K, 1% free 12533K/12636K, paused 12ms, total 12ms
08-30 14:24:14.731: D/dalvikvm(2777): GC_FOR_ALLOC freed <1K, 1% free 12533K/12636K, paused 12ms, total 12ms
08-30 14:24:14.761: I/dalvikvm-heap(2777): Grow heap (frag case) to 26.335MB for 14745616-byte allocation
08-30 14:24:14.781: D/dalvikvm(2777): GC_FOR_ALLOC freed 0K, 1% free 26933K/27040K, paused 14ms, total 14ms
08-30 14:24:27.525: A/libc(2777): Fatal signal 11 (SIGSEGV) at 0x43337b60 (code=2), thread 2797 (Thread-202)

当创建 ByeBuffers 来存储 openGL 纹理的顶点数组时会发生这种情况。我该如何处理?它发生在我的两个设备上。

4

2 回答 2

6

您可以从最后一次垃圾收集调用中看到垃圾收集器未能释放任何内存并且您没有可用内存。你的缓冲区有多大?他们需要多少额外的头部空间?

android:largeHeap="true"一种可能的解决方案是通过在应用程序清单中进行设置来调查使用更大的堆大小,记录在开发人员网站上

于 2013-08-30T11:40:29.183 回答
1

答案是缓冲区不够大。然后openGL API(在我的例子中)访问了一个无效的偏移量(在低级别)并导致了一个分段错误,就像在C中访问无效内存一样。这发生在java之外,因为字节缓冲区是由内核管理的允许硬件和低级代码使用您的内存。

于 2013-12-03T23:29:40.407 回答