2012-01-23 2 views
0

나는 안드로이드 플랫폼에서 itext를 사용하여 pdf를 읽고 있는데, 큰 코드를 열려고하면 다음 code.but를 사용합니다. 첫 번째 줄에 메모리 오류가 발생했습니다. 즉 reader = 새로운 PdfReader (fileName);. 또한 큰 파일을 클릭 할 때 생성되는 satck 추적이 아래에 있습니다.큰 pdfs에서 tex를 추출 할 수 없습니다

 reader = new PdfReader(fileName);   
    numberOfPages = reader.getNumberOfPages(); 
    System.out.println("This document contains:" + numberOfPages); 
    extractor = new PdfTextExtractor(reader); 

    01-23 18:04:50.607: INFO/System.out(428): @@@@!!!/sdcard/Moby_Dick_NT.pdf 

external 899K/1038K, paused 202ms 
    01-23 18:05:31.298: INFO/dalvikvm(428): Jit: resizing JitTable from 1024 to 2048 
    01-23 18:05:32.947: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 1678K, 31% free 10361K/14855K, external 899K/1038K, paused 218ms 
    01-23 18:05:35.657: DEBUG/dalvikvm(428): GC_CONCURRENT freed 2038K, 31% free 10403K/15047K, external 899K/1038K, paused 5ms+10ms 

    01-23 18:06:00.537: DEBUG/dalvikvm(428): GC_CONCURRENT freed 1845K, 30% free 10625K/15111K, external 899K/1038K, paused 9ms+8ms 
    01-23 18:06:02.397: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 1995K, 32% free 10546K/15303K, external 899K/1038K, paused 259ms 
    01-23 18:06:04.518: DEBUG/dalvikvm(428): GC_CONCURRENT freed 1993K, 32% free 10545K/15303K, external 899K/1038K, paused 9ms+5ms 
    01-23 18:06:06.468: DEBUG/dalvikvm(428): GC_CONCURRENT freed 1917K, 31% free 10583K/15303K, external 899K/1038K, paused 9ms+5ms 
    01-23 18:06:08.008: INFO/dalvikvm-heap(428): Clamp target GC heap from 16.145MB to 16.000MB 
    01-23 18:06:08.008: DEBUG/dalvikvm(428): GC_CONCURRENT freed 1542K, 29% free 10981K/15303K, external 899K/1038K, paused 9ms+5ms 
    browse.com/.PDFView} 
    01-23 18:06:09.338: INFO/dalvikvm-heap(428): Clamp target GC heap from 16.498MB to 16.000MB 
    01-23 18:06:09.338: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 1370K, 27% free 11342K/15495K, external 899K/1038K, paused 243ms 
    01-23 18:06:10.437: INFO/dalvikvm-heap(428): Clamp target GC heap from 16.776MB to 16.000MB 
    01-23 18:06:10.437: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 1079K, 25% free 11627K/15495K, external 899K/1038K, paused 228ms 
    01-23 18:06:10.857: INFO/dalvikvm-heap(428): Clamp target GC heap from 16.841MB to 16.000MB 
    01-23 18:06:10.857: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 256K, 25% free 11694K/15495K, external 899K/1038K, paused 215ms 
    01-23 18:06:10.867: INFO/dalvikvm-heap(428): Forcing collection of SoftReferences for 4100-byte allocation 
    01-23 18:06:11.137: INFO/dalvikvm-heap(428): Clamp target GC heap from 16.827MB to 16.000MB 
    01-23 18:06:11.137: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 15K, 25% free 11679K/15495K, external 899K/1038K, paused 272ms 
    01-23 18:06:11.137: ERROR/dalvikvm-heap(428): Out of memory on a 4100-byte allocation. 
    01-23 18:06:11.147: INFO/dalvikvm(428): "main" prio=5 tid=1 RUNNABLE 
    01-23 18:06:11.147: INFO/dalvikvm(428): | group="main" sCount=0 dsCount=0 obj=0x4001f1a8 self=0xce48 

답변

1

가 다른 스레드의 메모리 할당에 대한 관련 논의는 SO에 여기에 있습니다 :

Android memory allocation

그것을 자신을 시도하지 않은 그러나이 옵션

android:largeHeap="true" 
을 시도하는 가치가있을 수도 있습니다

은 16MB 상위 경계에 도달 한 이후로 나타납니다.

+0

그러나 16MB의 힙 크기를 지원하는 전화는 어떻게됩니까? – Rookie

+1

16MB 만 지원한다면? 까다로운 경우, 파일을 순차적으로 읽어야하고, 16MB 경계를 넘지 않도록 메모리의 일부분을 메모리에 유지해야합니다. 그 방법을 잘 모르겠다. – Scalarr

관련 문제