При удалении 18,5 МБ "android-4.1.1_r1.jar" выдается " java.lang.OutOfMemoryError: пространство кучи Java"

Я пытаюсь запустить OSGI Framework и запустить несколько пакетов на Android. Одним из таких пакетов является пакет Android API, который составляет 18,5 МБ. Я читал, что для того, чтобы запустить пакеты на Android, все пакеты должны быть сначала dexified.

Поэтому я попытался определить это "android-4.1.1_r1.jar" с помощью следующих команд:

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

но я получил эту ошибку в моей командной строке:

java.lang.OutOfMemoryError: Java heap space

Первый: действительно ли мне нужно дексифицировать этот файл? Второе: если мне нужно это сделать, то как я могу избавиться от вышеуказанной ошибки?

увеличить размер моей кучи,

Я старался: 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.

Во всех случаях я все еще получаю ту же ошибку, когда пытаюсь дексифицировать файл комплекта. Что я должен делать? Я использую Windows 32 бит с 4,00 ГБ (2,96 ГБ).

1 ответ

Максимальный размер кучи определяется рядом вещей, в том числе:

  • Используете ли вы 32 или 64-битную JVM.
  • Работаете ли вы на 32 или 64-битной ОС.
  • Какую ОС / версию вы используете.
  • Сколько у тебя физической памяти.
  • Достаточно ли в вашей системе дискового пространства, выделенного для подкачки.
  • Сколько не кучи памяти требуется вашему Java-приложению.

В современных 32-битных окнах (без PAE) максимум, который вы, вероятно, сможете запросить, может составлять от 1,4 ГБ до 1,6 ГБ ( ссылка). Так -Xmx1g должен работать... если у вас не работает много других вещей одновременно.


Так вы говорите, что то, что я показал выше, сработало?

Нет.

Я говорю, что это должно было сработать. Тот факт, что вы получили сообщение об использовании, вызывает недоумение. Я думаю, что это означает, что с командной строкой что-то не так. (Вы забыли сказать java какой класс бегать?)

Следствие из того, что я сказал, заключается в том, что это может сработать, если вы закроете различные другие приложения (например, IDE, веб-браузер, почтовый клиент), чтобы освободить память и / или пространство подкачки. (Перезагрузка может также помочь... если ваш файл подкачки сильно фрагментирован.)

Если это не поможет, тогда:

  • Вы можете попробовать разбить JAR-файл на более мелкие JAR-файлы.
  • Вы могли бы сделать dexing на большей машине.
  • Вы можете установить Linux ..., который позволит вам создать значительно большую кучу Java на том же оборудовании.
Другие вопросы по тегам