Java 即使在增加内存后,OutOfMemory异常(Maven)

Java 即使在增加内存后,OutOfMemory异常(Maven),java,maven,Java,Maven,当我尝试将Apache Stanbol安装为本地实例时,出现以下异常: 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 aQ

当我尝试将Apache Stanbol安装为本地实例时,出现以下异常:

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
我已经使用下面的命令增加了JVM内存,但是仍然得到了相同的错误。我的内存是4GB

导出MAVEN_OPTS=-Xmx3000m-XX:MaxPermSize=512m

如何排除故障并修复此问题

谢谢,


Jay

增加内存并不是OOM错误的解决方案。它可以是暂时的缓解,但不是永久的解决办法。您需要修复导致内存泄漏的代码

从异常情况来看,似乎有一些代码复制数组并递归地执行,从而导致堆内存溢出


要设置的环境变量是MAVEN_OPTS,例如MAVEN_OPTS=-Xmx1024m。pom中的maxmem配置仅在将编译器插件设置为将javac分叉到新JVM中时适用。否则,插件将在与Maven相同的VM中运行,从而在通过Maven_OPTS在命令行上传递的内存中运行

要在Windows 7下设置MAVEN_选项:

右键单击我的计算机并选择属性 单击系统属性左侧导航中的“高级系统设置”链接以显示高级系统属性 转到“高级”选项卡,然后单击位于“高级系统属性配置”窗口底部的“环境变量”按钮 创建一个新的用户变量,将变量名设置为MAVEN_OPTS,并将变量值设置为-Xmx1024m或更高
打开一个新的命令窗口并运行mvn。

在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错误。因此,嵌入式资源数组复制


你的Java版本是什么?在32位system for Java中,不能分配超过1.5Gb的内存。同时,我还没有看到任何如此庞大的应用程序需要超过1Gb。看来你的?buggy?插件需要的远不止这些。要么获得更多内存,要么记录一个bug来修复插件。顺便说一句,现在4GB并没有那么多,但是maven插件应该不需要这么多。