2013-08-30 3 views
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 텍스처 용 버텍스 배열을 저장하기 위해 생성 될 때 발생합니다. 어떻게 처리합니까? 내 장치 중 두 대에서 발생합니다.자바 - 안드로이드 치명적인 신호 11 SIGSEGV

+1

이것은 메모리와 관련된 문제입니다. 문제 –

+0

에뮬레이터의 가상 메모리를 늘려이 문제를 증명하려고 시도하지만, 메모리에로드하는 방법과 관련이 있습니다. 코드를 사용할 수 있습니까? – g00dy

+1

ByteBuffers가 성공적으로 할당되었고 바운드 액세스를하지 않았는지 확인하십시오 (어쩌면 여러분이나 OpenGL의 크기에 대한 오해가있을 수 있습니다). – Leonidos

답변

6

마지막 가비지 수집 호출에서 가비지 수집기가 메모리를 확보하지 못했고 사용 가능한 메모리가 없다는 것을 알 수 있습니다. 버퍼가 얼마나 큽니까? 얼마나 많은 추가 헤드 룸이 필요합니까?

한 가지 가능한 솔루션은 developer site

1

대답에 문서화 된 애플리케이션 매니페스트에 android:largeHeap="true"을 설정하여 더 큰 힙 크기를 버퍼가 충분히 큰 아니라고했다 이용하여 조사하는 것입니다. 그런 다음 opengl API (내 경우) 잘못된 오프셋 (낮은 수준)에 액세스 한 및 divater 에 의해 관리되기 때문에 사람이 C에서 잘못된 메모리에 액세스하기위한 얻을 것 같은 세분화 오류가 발생했습니다. 커널은 하드웨어와 저수준 코드가 메모리와 함께 작동하도록 허용합니다.

관련 문제