Java - Android致命信号11 SIGSEGV

时间:2013-08-30 11:30:23

标签: java android opengl-es crash sigsegv

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纹理的顶点数组时会发生这种情况。 我该如何处理?它发生在我的两台设备上。

2 个答案:

答案 0 :(得分:6)

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

一种可能的解决方案是通过在应用程序清单中设置android:largeHeap="true"来调查使用更大的堆大小,并记录在developer site

答案 1 :(得分:1)

答案是缓冲区不够大。然后访问openGL API(在我的例子中) 一个无效的偏移(在低级别)并导致分段错误,就像人们会得到的那样 用于访问C中的无效内存。这发生在java之外,因为bytebuffers 由内核管理,以允许硬件和低级代码与您的内存一起工作。