`

【转载】关于android编译出现“GC overhead limit exceeded”的解决办法。

阅读更多

用了下面找到的这个办法,不过貌似没有彻底解决我的问题,仍然在某处jack build的时候会出现java GC溢出的问题。根据错误的提示,在android目录下寻找关键字-Xmx3500 (默认,但是会溢出的GC heap大小),找到如下几个文件分别进行修改。

  • build/core/config.mk:
    • JILL :=java -Xmx3500m -jar $(JILL_JAR)
    • APICHECK_COMMAND := $(APICHECK) -JXmx1024m -J"classpath $(APICHECK_CLASSPATH)"
  • external/guava/guava-gwt/pom.xml: <extraJvmArgs>-Xms3500m -Xmx3500m -Xss1024k</extraJvmArgs>

从log看,应该是修改第一行JILL这里就好了,不过为了省心,干脆所有Xmx的地方一起改掉成6144m。

 

================更新线===================

 

玛德在一台10G内存的机器上无限次碰到jack编译时候GC溢出的问题,搜了一下,找到一个靠谱的解决方案。

转自: http://blog.csdn.net/brightming/article/details/49763515

 

================转载的分割线=================

参考:

 

https://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/

 

 

 

1、下载

 

参考了以下的下载失败重下载脚本:

 

[zzz@localhost android-src]$ cat myrepo.sh 
#!/bin/sh
repo sync
while [ $? -ne 0 ] 
do 
    echo "try repo sync again"
    repo sync
done
[zzz@localhost android-src]$ 

 

 

 

下班前开始跑,第二天就有了。

 

 

 

2、编译第一次直接进入下载的源代码目录,运行make,过了3个多小时后,报错:

 

[ 31% 9980/31772] host Java: bouncycastle-host (out/host/common/obj/JAVA_LIBRARIES/bouncycastle-host_intermediates/classes)
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
[ 31% 9983/31772] host Java: bouncycastle-bcpkix-host (out/host/common/obj/JAVA_LIBRARIES/bouncycastle-bcpkix-host_intermediates/classes)
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
[ 31% 9987/31772] Build: out/host/linux-x86/obj/EXECUTABLES/jack_intermediates/jack
Writing client settings in /home/gumh/.jack-settings
Installing jack server in "/home/gumh/.jack-server"
Launching Jack server java -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /home/gumh/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher
[ 31% 10007/31772] host C++: zipalign <= build/tools/zipalign/ZipEntry.cpp
build/tools/zipalign/ZipEntry.cpp:145:52: warning: unused parameter 'pZipFile' [-Wunused-parameter]
status_t ZipEntry::initFromExternal(const ZipFile* pZipFile,
                                                   ^
build/tools/zipalign/ZipEntry.cpp:151:12: warning: destination for this 'memcpy' call is a pointer to dynamic class 'CentralDirEntry'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]
    memcpy(&mCDE, &pEntry->mCDE, sizeof(mCDE));
    ~~~~~~ ^
build/tools/zipalign/ZipEntry.cpp:151:12: note: explicitly cast the pointer to silence this warning
    memcpy(&mCDE, &pEntry->mCDE, sizeof(mCDE));
           ^
           (void*)
2 warnings generated.
[ 31% 10012/31772] host C: libzopfli <= external/zopfli/src/zopfli/lz77.c
external/zopfli/src/zopfli/lz77.c:95:60: warning: unused parameter 'datasize' [-Wunused-parameter]
void ZopfliVerifyLenDist(const unsigned char* data, size_t datasize, size_t pos,
                                                           ^
1 warning generated.
[ 31% 10040/31772] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
GC overhead limit exceeded
Try increasing heap size with java option '-Xmx<size>'
Warning: This may have produced partial or corrupted output.
ninja: build stopped: subcommand failed.

make: *** [ninja_wrapper] Error 1
[zzz@localhost android-src]$ 

 

 

 

 

 

//---2015-11-13--//

 

 

 

make之前还运行了下面的指令:

 

#source ./build/envsetup.sh

 

这个命令选择你的编译环境的硬件体系

 

#lunch

 

下面这个命令就开始编译了

 

#make

 

通过跟踪顶层makefile,找到有关jack的目录:prebuilts/sdk/tools,其中看到有个jack-admin,正是启动jack所在的shell。里面有个设置:

 

#
# Settings
#
JACK_HOME="${JACK_HOME:=$HOME/.jack-server}"
CLIENT_SETTING="${CLIENT_SETTING:=$HOME/.jack-settings}"
TMPDIR=${TMPDIR:=/tmp}
JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation}"

 

 

 

修改一下,增加-Xmx2048M:

 

#
# Settings
#
JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx:2048M}"

 

再次make,好像没起作用:

 

[  1% 296/20841] Build: out/host/linux...bj/EXECUTABLES/jack_intermediates/jack
Jack server already installed in "/home/gumh/.jack-server"
Launching Jack server java -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /home/gumh/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher

 

 

 

找到jack-admin中的start-server语句,直接在里面增加:

 

 start-server)
    isServerRunning
    RUNNING=$?
    if [ "$RUNNING" = 0 ]; then
      echo "Server is already running"
    else
      echo "before to start-server,JACK_SERVER_VM_ARGUMENTS=" $JACK_SERVER_VM_ARGUMENTS
      JACK_SERVER_COMMAND="java -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS
-Xmx2048M -cp $LAUNCHER_JAR $LAUNCHER_NAME"
      echo "Launching Jack server" $JACK_SERVER_COMMAND
      (

 

 

 

再次执行make指令,这次ok了。

 

这里有一个问题没弄清楚:有时候执行make的时候,会自动启动jackserver,有时候又不会,会报错说server未启动,请用jack-admin start-server来启动的提示。

 

 

 

经过了4个多小时,终于完成了。

 

external/gtest/include/gtest/gtest_pred_impl.h:77:52: note: expanded from macro 'GTEST_ASSERT_'
  if (const ::testing::AssertionResult gtest_ar = (expression)) \
                                                   ^
1 warning generated.
[100% 20544/20544] host Executable: ne...t_test_osi_intermediates/net_test_osi)

 

查看一下:

 

[zzz@localhost android-src]$ ll out/target/product/generic/
total 1594800
-rw-rw-r--.  1 zzz zzz          7 Nov 14 11:27 android-info.txt
-rw-rw-r--.  1 zzz zzz         63 Nov 14 11:25 build_fingerprint.txt
drwxrwxr-x.  2 zzz zzz       4096 Nov 14 14:37 cache
-rw-r--r--.  1 zzz zzz   69206016 Nov 14 14:37 cache.img
-rw-rw-r--.  1 zzz zzz      72964 Nov 10 15:40 clean_steps.mk
drwxrwxr-x.  4 zzz zzz       4096 Nov 14 11:27 data
drwxrwxr-x.  3 zzz zzz       4096 Nov 14 12:02 dex_bootjars
drwxrwxr-x.  5 zzz zzz       4096 Nov 14 13:58 gen
-rw-rw-r--.  1 zzz zzz      72739 Nov 14 14:37 installed-files.txt
drwxrwxr-x. 12 zzz zzz       4096 Nov 14 14:36 obj
-rw-rw-r--.  1 zzz zzz        788 Nov 14 11:25 previous_build_config.mk
-rw-rw-r--.  1 zzz zzz    1244829 Nov 14 14:37 ramdisk.img
drwxrwxr-x.  3 zzz zzz       4096 Nov 14 11:27 recovery
drwxrwxr-x. 15 zzz zzz       4096 Nov 14 11:28 root
drwxrwxr-x.  6 zzz zzz       4096 Nov 10 17:57 symbols
drwxrwxr-x. 14 zzz zzz       4096 Nov 14 14:36 system
-rw-r--r--.  1 zzz zzz 1610612736 Nov 14 14:37 system.img
-rw-r--r--.  1 zzz zzz  576716800 Nov 14 14:37 userdata.img
[zzz@localhost android-src]$ 

 

 

这些应该如何测试呢?下面再补。

分享到:
评论

相关推荐

    poi大量数据读取gc内存溢出解决方案

    poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...

    Eclipse下使用ANT编译提示OutOfMemory的解决方法

    由于需要使用ANT编译的代码比较多,特别是在第一次变异的时候,会出现OutOfMemory错误。并提示更改ANT_OPTS设定。

    myeclipse 解决内存的问题

    如果发现myeclipse慢了,则可以使用

    xmemcached-1.2.6.2

    xmemcached-1.2.6.2

    R语言导入导出数据方法介绍

    讲述如何在R语言中导入导出数据的PPT,一共28张

    hive on spark mr 数据开发常见问题解决

    hive工作常见问题解决收集...GC overhead limit exceeded Unknown primitive type VOID Output column number expected to be 0 when isRepeating from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask 空文件 等等

    OutOfMemoryError Handbook

    OutOfMemoryError的8种经典案例,Java heap space、GC overhead limit exceeded、Permgen space、Metaspace、Unable to create new native thread、Out of swap space?、Requested array size exceeds VM limit、...

    系统稳定性——OutOfMemoryError常见原因及解决方法1

    1. Java heap space 2. GC overhead limit exceeded 3. Permgen space 5. Unable to c

    Java堆内存又溢出了!教你一招必杀技(推荐)

    主要介绍了Java内存溢出问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    SmaliInjector20170719

    若在 jar 转加 dex 的过程中出现 java.lang.OutOfMemoryError: GC overhead limit exceeded 的错误,请调大 main.bat 中的 -Xmx 和 -Xss 其它: ============================================================...

    关于java堆内存溢出的几种情况

    【情况一】  java.lang.OutOfMemoryError: Java heap space:这种是...  java.lang.OutOfMemoryError: GC overhead limit exceeded  【解释】:JDK6新增错误类型,当GC为释放很小空间占用大量时间时抛出;一般是

    sliding-block-puzzle:使用搜索算法解决滑块难题

    有两个证据可以证明这一点: 对于随机生成的15个难题,DFS总是会出现以下错误: java.lang.OutOfMemoryError: GC overhead limit exceeded如果我通过改组最终状态难题来创建15个拼图,那么随着改组次数的增加,DFS...

    FTB-Presents-Stoneblock-2

    如果您的游戏在启动时崩溃,并且崩溃日志中的行类似于Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded或Caused by: java.lang.OutOfMemoryError: Java heap space ,这是因为游戏的RAM不足了。...

    Elasticsearch集群中JVM问题的应对之策

    Elasticsearch集群中JVM问题的应对之策,PDF文档,欢迎下载,11111

    java8源码-jvm-study:jvm-study

    overhead limit exceeded: gc占用98%的资源回收效率不足2%的(-Xms30m -Xmx30m) Metaspace:方法区异常----(XX:MetaspaceSize=10M -XX:MaxMetaspaceSize=10M) 常量池(方法区) class常量池 class的方法 字面量...

    poi处理大数据量excel文件不溢出

    从http://download.csdn.net/detail/whatismvc/3696185 ...加上自己整合的 eventusermodel模式采用事件模型,对文件边读取边处理,内存消耗较低,效率高,因为不用等待文件全部装入内存。但使用较复杂。

    WinAircrackPack

    破解无线网 我们今天就和大家一起谈谈WEP加密模式是如何被破解的,我们的出发点是如何保护好我们的网络,所谓知己知彼,百战不殆。

    Overhead

    Overhead

    androidquery和androidquery框架的结合使用

    1 androidquery是一个操纵android UI 元素和处理异步任务的库 它的目的是使android的编程更简洁 更轻便 更有趣 哈哈 这是官方地址http://code.google.com/p/android-query/ 里面有详细的开发文档 2 OEMlite ...

    微信小程序用户信息解密失败导致的内存泄漏问题

    java.lang.OutOfMemoryError: GC overhead limit exceeded   at javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:426) at javax.crypto.JarVerifier.verifyJars(JarVerifier.java:322) at javax.crypto...

Global site tag (gtag.js) - Google Analytics