2013-01-26 2 views
0

5M 크기의 3D OBJ 모델을로드 할 때 메모리가 부족합니다. debug는 dalvik이 에뮬레이터 또는 장치에서 50M 메모리 제한을 가지고 있음을 보여줍니다. 왜 이런지 모르겠다.android dalvik memory limit? 메모리 부족 예외

mIndicesInt = ByteBuffer.allocateDirect(indices.length * INT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asIntBuffer(); 
mIndicesInt.put(indices).position(0); 

심지어 AVD RAM을 2048M으로 늘리고 1,024M까지 힙을 썼는데 도움이되지 않습니다. 항상 같은 번호로 중지 :

D/setIndices (2270) : 메모리 PSS에 = 67.88 MB, 개인 = 66.09 MB, 공유 = 13.30 MB D/setIndices (2270) : MAXMEM = 50331648 D를/setIndices (2270)는 totalMem = 50,208,736 D/setIndices (2,270) = freeMem OBJ 모델은 20 개 이상의 객체가 포함 1,963,736

. 여러 개체를 제거한 후 메모리 부족 문제가 사라지므로이 프로세스 당 메모리 하드 제한 문제가 있습니까?

처리에 대한 제안이 있으십니까? 또한 RAM 및 힙 크기를 늘리는 AVD 옵션은 효과가 없습니다. 이유가 무엇입니까?

+0

http://stackoverflow.com/questions/3078301/dalvik-memory-allocation-how-to-change-the-default-limits와 유사하게 보입니다. 실제로 중복 된 것은 아닙니다. 거기에서 좋은 정보를 얻을 수도 있습니다. 한 가지는 메모리 제한이 "하드 코딩 된"것으로 보이며 전화기를 응원하지 않으면 변경할 수 없습니다. –

+0

그것을 지적 해 주셔서 감사합니다. 나는 메모리 부족으로 검색을했지만 그 스레드를 때리지 않았다. –

+0

JNI/네이티브 코드로 할당을 시도하고 자바 코드에 대한 참조를 보냈습니까? 내가 아는 한, 원시 힙은 매우 커질 수 있습니다. 또 다른 옵션은 파일을 메모리 맵핑하는 것입니다. https://groups.google.com/forum/?fromgroups=#!topic/android-ndk/lcnwzszrESo, MMapp IO link : http : //developer.android.com/reference/java/nio/channels/FileChannel.html 구체적으로 map (...) 메소드를 살펴 보겠습니다. 파일을 열 때 (예 : fileInputStream) 메소드 .getChannel()을 사용하여 .map (...)에 필요한 FileChannel에 대한 참조를 가져옵니다. – paulczak

답변

0

5M의 정점 데이터는 모바일 환경에서 상당히 많이 발생합니다. 텍스처를로드하는 경우에는 압축 된 텍스처 만로드하는 것이 좋습니다. 또한 GPU 드라이버로 이동 한 후 일부 리소스를 비울 수 있습니다. 꼭지점 데이터를 오프라인으로 준비하고 런타임 중에 필요한 데이터 만로드합니다. 또 다른 옵션은 데이터의 일부를 계산하거나 정점/프래그먼트 셰이더에서 직접 확장하는 것입니다 (예 : GPU 측에서 비트를 생성).

+0

이 주제에 대한 전문가로 판단됩니다. 나는 어떤 비트가 사용되는지를 모른다. 또한 압축 된 텍스처를로드하고 사용하는 방법에 대한 미리보기를 표시 할 수 있습니까? 내 텍스처 꽤 큰. –

+0

비트겐트에 대해 잘 모르는 경우 걱정하지 마십시오. 고급 주제입니다. 압축 된 텍스처를로드하는 방법에 대한 자세한 내용은 여기를 참조하십시오. http://stackoverflow.com/questions/9148795/android-opengl-texture-compression – Trax