8

コマンドラインAntを使用して、非常に大きなマルチプロジェクトAndroidプロジェクトをコンパイルしようとしています。私はもともと Ant 1.8.3 を使用していましたが、その後 1.8.4 にアップグレードしました (結局無駄でした)。私は Eclipse をインストールしていますが (Indigo、本日更新)、このプロジェクトの性質上、Eclipse 内から Ant を使用することはできません。

コードは問題なく生成されるように見えますが、操作の「dex」フェーズに到達すると、my に応じてANT_OPTS「GC Overhead Limit Exceeded」または「Java Heap Space」のいずれかのエラーが発生します。

私はグーグルでスタックをチェックしました。さまざまなリンクを見つけた後 (こちらこちらこの Stack question、およびthis stack question も参照)、Ant オプションを変更しました。(多くのリンクは、これが Java コードの実行時に何が起こるかをカバーしています。私の問題は、実際にはアップロード用の Android APK を作成する Ant プロセスにあります)。

私のANT_OPTS環境変数は現在:

-Xms4g -Xmx4g -Xmn256m -XX:PermSize=256m -XX:MaxPermSize=1024m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=8

を使用して GC オーバーヘッド制限を完全にオフにしようとしました-XX:-UseGCOverheadLimit が、GC オーバーヘッド制限エラーではなく、Java ヒープ領域エラーが発生するだけです。これについて同僚に尋ねましたが、彼らもアイデアがありません。

ああ、もう 1 つの「詳細」: Eclipse を使用してプロジェクトをコンパイルおよびロードできますが、それは「問題なく」動作しているようです。ただし、この「メタ プロジェクト」に必要な膨大な数のプロジェクトを考えると、Ant スクリプトを機能させようとする必要があります。

システム情報:

  • OS:Windows7 64ビット
  • Java: Sun、1.6、64 ビット
  • 物理メモリ: 8Gb
  • Android: SDK ツール: R20; プラットフォーム ツール: R12 (本日更新、6 月 28 日)

他にできることはありますか?検索する別のキーワードは?他に見るべき場所はありますか?

4

4 に答える 4

4

これに対する部分的な答え。これを追跡するのを手伝ってくれた現在の回答者に感謝します。

どうやら、エラーが発生した正確な場所に応じて、Java VM opts を変更する必要がある場所が2 つ(場合によっては 3 つ?) あるようです。この場合、 はANT_OPTSDexに渡されません。

DX バッチ ファイルを編集して次のように変更することで、エラーを解決できました。

set defaultXmx=-Xmx1024M

set defaultXmx=-Xmx4096M

ただし、dx バッチ ファイルを変更する必要はありません。AntによってDexに渡されるJavaオプションを変更する「正しい」方法を知っている人はいますか?

于 2012-06-29T14:19:57.713 に答える
2

これは、アプリケーションがゆっくりとヒープ領域を使い果たしたときに起こることのように思えます。GC オーバーヘッド制限が設定されている場合、JVM はすぐに停止します。そうしないと、アプリケーションはもう少し長く処理を続け、より多くの時間を GC に費やすことになり、最終的に停止します。

これがあなたのアプリケーションである場合は、ストレージ リークをチェックする必要があります。しかし、これはよく知られており、(おそらく) 十分にテストされたサード パーティ製アプリケーションであるため、最も簡単な方法は、ヒープ サイズを増やすことです。

他に試すことは、CMS をオフにすることです。バッチ コンパイルに CMS を使用する理由はありません。GC の一時停止は関係ありません。スループット コレクターを使用するだけです。(これはおそらくヒープ サイズの問題を解決しませんが、ビルドの実行速度が向上するはずです。)

于 2012-06-28T22:21:06.420 に答える
0

あなたが探しているのは次のとおりだと思います:

-XX:-UseGCOverheadLimit
于 2012-06-28T21:46:51.460 に答える