android 4.2 OutOfMemoryError

来源:互联网 发布:mac下制作win7安装u盘 编辑:程序博客网 时间:2024/05/18 03:29

在Ubuntu 12.04编译Android 4.2时,出现如下错误:


preparing update.zip

packaging...
signing...
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2786)
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
    at java.util.zip.DeflaterOutputStream.deflate(DeflaterOutputStream.java:155)
    at java.util.zip.DeflaterOutputStream.write(DeflaterOutputStream.java:112)
    at java.util.zip.ZipOutputStream.write(ZipOutputStream.java:272)
    at com.android.signapk.SignApk.copyFiles(SignApk.java:496)
    at com.android.signapk.SignApk.main(SignApk.java:557)
signing done


在网上查,大都说是因为JVM虚拟机的Heap大小不足有关,摘录如下:

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。
如果Heap Size设置偏小,除了这些异常信息外,还会发现程序的响应速度变慢,GC占用了更多的时间,而应用分配到的执行时间较少。
Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。Heap size的 -Xms -Xmn 设置不要超出物理内存的大小。

建议修改build/core/definitions.mk文件,修改变量 :transform-classes.jar-to-dex中的-JXms16M -JXmx2048M值,如果机器总内存是4G的,可以将-JXms16M -JXmx2048M修改为-JXms1024M -JXmx2048M。


我按照上面的描述去做,仍然会有上述错误。后来想想,自己之前往data/目录下放了两个wav文件,加起来得有100多MB,估计在打包时太大了,就把wav文件删去试一试,果然就好了。


0 0