0

我正在尝试启动 OSGI 框架并在 Android 上启动一些捆绑包。其中一个包是 18.5 MB jar 的 android API 包。我读到,为了在 android 上启动 bundle,所有的 bundle 都应该首先被 dexified。

所以我尝试使用以下命令对这个“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这个文件吗?第二:如果我必须对它进行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 -Xmx1gjava -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(可用 2.96 GB)的 Windows 32 位。

4

1 回答 1

1

最大堆大小由许多因素决定,包括:

  • 无论您运行的是 32 位还是 64 位 JVM。
  • 无论您是在 32 位还是 64 位操作系统上运行。
  • 您正在使用什么操作系统/版本。
  • 你有多少物理内存。
  • 您的系统是否有足够的磁盘空间分配给分页。
  • Java 应用程序需要多少非堆内存。

在现代 32 位 Windows(没有 PAE)上,您可能请求的最大值可能是 1.4Gb 到 1.6Gb(参考)。所以-Xmx1g应该工作......除非你有很多其他的东西同时运行。


所以你是说我上面展示的有效吗?

不。

我是说它应该有效。您收到“使用”消息的事实令人费解。我认为这意味着命令行还有其他问题。(你忘了告诉你要上java什么课吗?)

我所说的一个推论是,如果您关闭各种其他应用程序(例如您的 IDE、您的 Web 浏览器、您的电子邮件客户端)以释放内存和/或分页文件空间,它可能会起作用。(重新启动也可能有帮助……如果您的页面文件严重碎片化。)

如果这没有帮助,那么:

  • 您可以尝试将 JAR 文件拆分为更小的 JAR 文件。
  • 您可以在更大的机器上进行 dexing。
  • 您可以安装 Linux ...这将允许您在相同的硬件上创建更大的 Java 堆。
于 2013-08-14T12:24:37.467 回答