2

API 2.3.3의 tar.xz로 tar 압축하려고합니다.XZ 압축시 안드로이드 dlavikvm-heap 메모리 할당 해제

는 상관없이 내가이 오류 얻을 무엇을 : 여기

06-09 20:56:32.230: V/CameraDemo(23418): filesPath -- > /mnt/sdcard/myimages 
06-09 20:56:32.336: D/dalvikvm(23418): GC_FOR_ALLOC freed 75K, 2% free 9193K/9347K, paused 14ms 
06-09 20:56:32.363: I/dalvikvm-heap(23418): Grow heap (frag case) to 21.304MB for 12853537-byte allocation 
06-09 20:56:32.390: D/dalvikvm(23418): GC_CONCURRENT freed 1K, 1% free 21744K/21959K, paused 1ms+2ms 
06-09 20:56:32.410: D/dalvikvm(23418): GC_FOR_ALLOC freed 1K, 2% free 22005K/22279K, paused 17ms 
06-09 20:56:32.476: I/dalvikvm-heap(23418): Grow heap (frag case) to 37.558MB for 16777232-byte allocation 
06-09 20:56:32.480: W/dalvikvm(23418): 67108888 byte allocation exceeds the 50331648 byte maximum heap size 
06-09 20:56:32.480: I/dalvikvm-heap(23418): Forcing collection of SoftReferences for 67108888-byte allocation 
06-09 20:56:32.508: D/dalvikvm(23418): GC_BEFORE_OOM freed 9K, 1% free 38380K/38727K, paused 25ms 
06-09 20:56:32.508: E/dalvikvm-heap(23418): Out of memory on a 67108888-byte allocation. 
06-09 20:56:32.508: I/dalvikvm(23418): "main" prio=5 tid=1 RUNNABLE 
06-09 20:56:32.508: I/dalvikvm(23418): | group="main" sCount=0 dsCount=0 obj=0x40a53460 self=0xa14828 
06-09 20:56:32.508: I/dalvikvm(23418): | sysTid=23418 nice=0 sched=0/0 cgrp=default handle=1074758792 
06-09 20:56:32.508: I/dalvikvm(23418): | schedstat=(0 0 0) utm=17 stm=8 core=0 
06-09 20:56:32.508: I/dalvikvm(23418): at org.tukaani.xz.lz.BT4.<init>((null):~-1) 
06-09 20:56:32.508: I/dalvikvm(23418): at org.tukaani.xz.lz.LZEncoder.getInstance((null):-1) 
06-09 20:56:32.508: I/dalvikvm(23418): at org.tukaani.xz.lzma.LZMAEncoderNormal.<init>((null):-1) 
06-09 20:56:32.511: I/dalvikvm(23418): at org.tukaani.xz.lzma.LZMAEncoder.getInstance((null):-1) 
06-09 20:56:32.511: I/dalvikvm(23418): at org.tukaani.xz.LZMA2OutputStream.<init>((null):-1) 
06-09 20:56:32.511: I/dalvikvm(23418): at org.tukaani.xz.LZMA2Options.getOutputStream((null):-1) 
06-09 20:56:32.511: I/dalvikvm(23418): at org.tukaani.xz.LZMA2Encoder.getOutputStream((null):-1) 
06-09 20:56:32.511: I/dalvikvm(23418): at org.tukaani.xz.BlockOutputStream.<init>((null):-1) 
06-09 20:56:32.511: I/dalvikvm(23418): at org.tukaani.xz.XZOutputStream.write((null):-1) 
06-09 20:56:32.511: I/dalvikvm(23418): at org.apache.commons.compress.compressors.xz.XZCompressorOutputStream.write(XZCompressorOutputStream.java:71) 
06-09 20:56:32.511: I/dalvikvm(23418): at utilities.CompressTar.compXZ(CompressTar.java:127) 
06-09 20:56:32.511: I/dalvikvm(23418): at utilities.CompressTar.<init>(CompressTar.java:52) 
06-09 20:56:32.511: I/dalvikvm(23418): at com.jadeye.CameraActivity$4.onClick(CameraActivity.java:101) 
06-09 20:56:32.519: I/dalvikvm(23418): at android.view.View.performClick(View.java:3511) 
06-09 20:56:32.523: I/dalvikvm(23418): at android.view.View$PerformClick.run(View.java:14105) 
06-09 20:56:32.523: I/dalvikvm(23418): at android.os.Handler.handleCallback(Handler.java:605) 
06-09 20:56:32.523: I/dalvikvm(23418): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-09 20:56:32.523: I/dalvikvm(23418): at android.os.Looper.loop(Looper.java:137) 
06-09 20:56:32.523: I/dalvikvm(23418): at android.app.ActivityThread.main(ActivityThread.java:4424) 
06-09 20:56:32.523: I/dalvikvm(23418): at java.lang.reflect.Method.invokeNative(Native Method) 
06-09 20:56:32.523: I/dalvikvm(23418): at java.lang.reflect.Method.invoke(Method.java:511) 
06-09 20:56:32.523: I/dalvikvm(23418): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-09 20:56:32.523: I/dalvikvm(23418): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-09 20:56:32.523: I/dalvikvm(23418): at dalvik.system.NativeStart.main(Native Method) 
06-09 20:56:32.527: D/AndroidRuntime(23418): Shutting down VM 
06-09 20:56:32.527: W/dalvikvm(23418): threadid=1: thread exiting with uncaught exception (group=0x40a521f8) 
06-09 20:56:32.539: E/AndroidRuntime(23418): FATAL EXCEPTION: main 
06-09 20:56:32.539: E/AndroidRuntime(23418): java.lang.OutOfMemoryError 
06-09 20:56:32.539: E/AndroidRuntime(23418): at org.tukaani.xz.lz.BT4.<init>(Unknown Source) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at org.tukaani.xz.lz.LZEncoder.getInstance(Unknown Source) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at org.tukaani.xz.lzma.LZMAEncoderNormal.<init>(Unknown Source) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at org.tukaani.xz.lzma.LZMAEncoder.getInstance(Unknown Source) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at org.tukaani.xz.LZMA2OutputStream.<init>(Unknown Source) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at org.tukaani.xz.LZMA2Options.getOutputStream(Unknown Source) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at org.tukaani.xz.LZMA2Encoder.getOutputStream(Unknown Source) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at org.tukaani.xz.BlockOutputStream.<init>(Unknown Source) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at org.tukaani.xz.XZOutputStream.write(Unknown Source) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at org.apache.commons.compress.compressors.xz.XZCompressorOutputStream.write(XZCompressorOutputStream.java:71) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at utilities.CompressTar.compXZ(CompressTar.java:127) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at utilities.CompressTar.<init>(CompressTar.java:52) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at com.jadeye.CameraActivity$4.onClick(CameraActivity.java:101) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at android.view.View.performClick(View.java:3511) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at android.view.View$PerformClick.run(View.java:14105) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at android.os.Handler.handleCallback(Handler.java:605) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at android.os.Looper.loop(Looper.java:137) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at android.app.ActivityThread.main(ActivityThread.java:4424) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at java.lang.reflect.Method.invokeNative(Native Method) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at java.lang.reflect.Method.invoke(Method.java:511) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-09 20:56:32.539: E/AndroidRuntime(23418): at dalvik.system.NativeStart.main(Native Method) 

그것의 원인이되는 코드입니다 :이 여러 가지 버전을 만들었습니다

public void compXZ (String saveAs, String infile) throws IOException { 

    FileInputStream fin = new FileInputStream(infile); 
    BufferedInputStream in = new BufferedInputStream(fin); 
    FileOutputStream out = new FileOutputStream(saveAs); 
    XZCompressorOutputStream xzOut = new XZCompressorOutputStream(out); 
    final byte[] buffer = new byte[BUFFER]; 
    int n = 0; 
    while (-1 != (n = in.read(buffer))) { 
     xzOut.write(buffer, 0, n); 
    } 

    xzOut.finish(); 
    xzOut.close(); 
    fin.close(); 
} 

하지만 그들은 모두를 얻을 수 같은 오류. 내 응용 프로그램에서로드하는 이미지 갤러리가 있지만 갤러리를로드하지 않고 압축을 시도했지만 동일하게 나타납니다.

any1은 문제가 무엇인지 알고 있습니까? 해결책은 무엇입니까? 또는 타르를 tar.xz로 압축하는 코드일까요?

도움 주셔서 감사합니다.

Jadeye.

+0

private static final int BUFFER = 8192; – Jadeye

답변

0

사용중인 XZ 압축에서 67MB의 메모리를 할당하려고합니다. 대부분의 휴대 기기에서는 너무 많습니다.

저는 XZ 압축과 XZ utils 구현에 대해 많이 알지 못합니다. 그러나이 압축 알고리즘은 많은 메모리를 필요로하며 오늘날의 모바일 장치에서 사용하기에는 적합하지 않은 것으로 보입니다.

+0

예 C 무슨 말씀 이세요? :-( 고압축 라이브러리에 대해 알고 있습니까? 고맙습니다. BTW 이것은 apache-commons-compress-1.4.1입니다. – Jadeye