0

OSGI フレームワークを起動し、Android でいくつかのバンドルを開始しようとしています。これらのバンドルの 1 つは、18.5 MB の jar である android API バンドルです。Androidでバンドルを開始するには、すべてのバンドルを最初にdex化する必要があることを読みました。

そこで、次のコマンドを使用して、この「android-4.1.1_r1.jar」を dexify しようとしました。

dx --dex --output=classes.dex C:\Users\student\Documents\eclipse\myPlugins\plugins\android-4.1.1_r1.jar 

しかし、コマンドラインで次のエラーが発生しました:

java.lang.OutOfMemoryError: Java heap space

最初: 本当にこのファイルを dexify する必要がありますか? 2番目:それをdexifyする必要がある場合、どうすれば上記のエラーを取り除くことができますか?

ヒープサイズを増やすには、

私は試しました: java -Xmx4g、しかし、私は得ました

Invalid maximum heap size: -Xmx4g
The specified size exceeds the maximum representable size.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

それから私は試しjava -Xmx2gましたが、私は得ました

Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

だから私は試してみましjava -Xmx1gた、java -Xmx1100gそして私は得ました:

Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)
where options include:
    -d32          use a 32-bit data model if available
    -d64          use a 64-bit data model if available
    -client       to select the "client" VM
    -server       to select the "server" VM
    -hotspot      is a synonym for the "client" VM  [deprecated]
                  The default VM is client.

    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A ; separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose[:class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -version:<value>
                  require the specified version to run
    -showversion  print product version and continue
    -jre-restrict-search | -no-jre-restrict-search
                  include/exclude user private JREs in the version search
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions with specified granularity
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  disable assertions with specified granularity
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
    -agentlib:<libname>[=<options>]
                  load native agent library <libname>, e.g. -agentlib:hprof
                  see also, -agentlib:jdwp=help and -agentlib:hprof=help
    -agentpath:<pathname>[=<options>]
                  load native agent library by full pathname
    -javaagent:<jarpath>[=<options>]
                  load Java programming language agent, see java.lang.instrument

    -splash:<imagepath>
                  show splash screen with specified image
See http://www.oracle.com/technetwork/java/javase/documentation/index.html for m
ore details.

いずれの場合も、バンドル ファイルを dexify しようとすると、同じエラーが発生します。私は何をすべきか?4.00 GB がインストールされた Windows 32 ビットを使用しています (2.96 GB 使用可能)。

4

1 に答える 1

1

最大ヒープ サイズは、次のようなさまざまな要素によって決まります。

  • 32 ビットと 64 ビットのどちらの JVM を実行しているか。
  • 32 ビットまたは 64 ビット OS で実行しているかどうか。
  • 使用している OS / バージョン。
  • 物理メモリの量。
  • システムにページング用に十分なディスク容量が割り当てられているかどうか。
  • Java アプリケーションが必要とする非ヒープ メモリの量。

最新の 32 ビット Windows (PAE なし) では、要求できる最大値は 1.4Gb から 1.6Gb になる可能性があります (参照)。だから-Xmx1gうまくいくはずです...同時に多くのことを実行していない限り。


それで、私が上に示したことがうまくいったと言っていますか?

いいえ。

私はそれがうまくいったはずだと言っています。「使用法」メッセージを受け取ったという事実は不可解です。コマンドラインに何か問題があることを意味していると思います。java(実行するクラスを指定するのを忘れましたか?)

私が言ったことから当然の帰結として、他のさまざまなアプリケーション (IDE、Web ブラウザー、電子メール クライアントなど) をシャットダウンして、メモリやページング ファイルのスペースを解放すると、うまくいく可能性があります。(ページファイルがひどく断片化されている場合は、再起動も役立つ場合があります。)

それでも問題が解決しない場合:

  • JAR ファイルを小さな JAR ファイルに分割してみてください。
  • より大きなマシンでデクシングを行うことができます。
  • Linux をインストールすると、同じハードウェア上で非常に大きな Java ヒープを作成できるようになります。
于 2013-08-14T12:24:37.467 に答える