2013-10-10 4 views
0

Я получаю следующее исключение при попытке установить Apache Stanbol в качестве локального экземпляра:OutOfMemory исключения даже после увеличения памяти (Maven)

ERROR] Java heap space -> [Help 1] 
java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Arrays.java:2786) 
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94) 
    at aQute.lib.osgi.EmbeddedResource.copy(EmbeddedResource.java:62) 
    at aQute.lib.osgi.EmbeddedResource.collect(EmbeddedResource.java:51) 
    at aQute.lib.osgi.EmbeddedResource.build(EmbeddedResource.java:33) 
    at aQute.lib.osgi.EmbeddedResource.build(EmbeddedResource.java:71) 
    at aQute.lib.osgi.Verifier.getBundleClassPath(Verifier.java:255) 
    at aQute.lib.osgi.Verifier.<init>(Verifier.java:204) 
    at aQute.lib.osgi.Builder.doVerify(Builder.java:434) 
    at aQute.lib.osgi.Builder.build(Builder.java:104) 
    at org.apache.felix.bundleplugin.BundlePlugin.buildOSGiBundle(BundlePlugin.java:547) 
    at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:347) 
    at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:264) 
    at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:255) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/OutOfMemoryError 

я увеличил память виртуальной машины Java с помощью следующей команды, но все-таки я Получается такая же ошибка. ОЗУ составляет 4 ГБ.

экспорт MAVEN_OPTS = "- Xmx3000m -XX: MaxPermSize = 512m"

Как устранить и исправить эту проблему?

Спасибо,

Jay

+0

Какая у вас версия Java? Вы не можете выделить более 1,5 ГБ в 32-битной системе для Java. В то же время я не видел такого огромного приложения, которое нуждается в более чем 1 ГБ. – Reddy

+0

Похоже на вашу? Багги?плагин требует гораздо большего. Либо вы получите больше памяти, либо запишите ошибку, чтобы исправить плагин. BTW 4 ГБ в наши дни не так уж и много, но плагин maven не должен нуждаться в такой близости. –

ответ

-1

Увеличение памяти не является решением ошибки OOM. Это может быть временное облегчение, но не постоянное решение. Вам необходимо исправить код, вызывающий утечку памяти.

Из-за исключения кажется, что есть некоторый код, который копирует массивы и делает это рекурсивно, вызывая переполнение памяти кучи.

How to find a Java Memory Leak

0

Переменная среды, чтобы установить это MAVEN_OPTS, например MAVEN_OPTS = -Xmx1024m. Конфигурация maxmem в pom применяется только тогда, когда вы устанавливаете плагин компилятора в fork javac в новую JVM. В противном случае плагин запускается внутри той же виртуальной машины, что и Maven, и, таким образом, в памяти, переданной в командной строке через MAVEN_OPTS.

Чтобы установить MAVEN_OPTS под Windows 7:

  1. правой кнопкой мыши на Мой компьютер и выберите Свойства
  2. Нажмите на ссылку Дополнительные параметры системы, расположенной в левой навигационной панели Свойства системы, чтобы отобразить Advanced System Properties
  3. Перейдите на вкладку «Дополнительно» и нажмите кнопку «Переменные среды», расположенную в нижней части окна конфигурации «Дополнительные параметры системы»
  4. Создайте новую пользовательскую переменную, установите имя переменной в MAVEN_OPTS и установите параметр Vari (или больше)

Открыть новое командное окно и запустить mvn.

0

Это происходит в среде OSGI, когда у вас много фильтрации ресурсов во время процесса сборки и недостаточно пространства кучи, выделенного для Maven.

Если вы зададите свои ресурсы и фильтры, как это должно исправить эту проблему ...

<resources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <excludes> 
      <exclude>**/*.xml</exclude> 
     </excludes> 
     <filtering>false</filtering> 
    </resource> 
    <resource> 
     <directory>src/main/filtered-resources</directory> 
     <includes> 
      <include>**/*.xml</include> 
     </includes> 
     <filtering>true</filtering> 
    </resource> 
</resources> 

<filters> 
    <filter>src/main/etc/org.yourcompany.yourproject.cfg</filter> 
</filters> 

Примечание: Файл фильтра задается (файл, заканчивающийся в .cfg) Без этого вы получите ошибка OutOfMemory при попытке разрешить токены ресурсов. Следовательно, копирование массива Embedded Resource.

Смежные вопросы