处理“ java.lang.OutOfMemoryError:PermGen空间”错误


1222

最近,我在Web应用程序中遇到此错误:

java.lang.OutOfMemoryError:PermGen空间

这是在Tomcat 6和JDK 1.6上运行的典型Hibernate / JPA + IceFaces / JSF应用程序。显然,这可能是在重新部署应用程序几次之后发生的。

是什么原因引起的,可以采取什么措施避免它发生?我该如何解决该问题?


我已经为此战斗了几个小时,但我没有好消息。请参阅我的相关问题:stackoverflow.com/questions/1996088/…您可能仍然存在内存泄漏,例如,未对WebAppClassLoader进行垃圾回收(因为未清除其外部引用),因此未对垃圾回收类。增加PermGen只会延迟OutOfMemoryError,并且允许类垃圾回收是前提条件,但是如果它们的类加载器仍然引用它,则不会垃圾回收类。
伊兰·麦丹

添加display taglib时出现此错误。这样删除也解决了错误。为什么这样?
masT

您是怎么碰到它的?
托尔比约恩Ravn的安德森

13
使用JDK 1.8:þ欢迎使用MetaSpace
Rytek 2014年

如果使用Windows,请按照以下说明操作,而不要尝试在配置文件中手动设置标志。这将正确设置注册表中的值,以便在运行时由Tomcat调用。 stackoverflow.com/questions/21104340/…–
MacGyver

Answers:


563

解决方案是在启动Tomcat时将这些标志添加到JVM命令行:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

您可以通过关闭tomcat服务,然后进入Tomcat / bin目录并运行tomcat6w.exe来实现。在“ Java”选项卡下,将参数添加到“ Java选项”框中。单击“确定”,然后重新启动服务。

如果出现错误,则指定的服务不存在为已安装的服务,应运行:

tomcat6w //ES//servicename

其中servicename是在services.msc中查看的服务器的名称

资料来源:orx对Eric的《敏捷答案》的评论。


39
下面的文章还建议-XX:+ UseConcMarkSweepGC和-XX:MaxPermSize = 128m。 my.opera.com/karmazilla/blog/2007/03/13/…–
泰勒·

30
-XX:+ CMSPermGenSweepingEnabled此选项降低性能。它使每个请求所花的时间比我们系统上的时间多三倍。小心使用。
Eldelshell

10
为我工作-谢谢-我正在Ubuntu10.10上使用Tomcat6进行此操作-我创建了一个新文件:/usr/share/tomcat6/bin/setenv.sh并在其中添加了以下行:JAVA_OPTS =“-Xms256m -Xmx512m- XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled“-使用以下命令重新启动了Tomcat:sudo /etc/init.d/tomcat6 start
sami 2010年

24
在tomcat 6.0.29启动时,从我的catalina.out日志文件中:“请将来使用CMSClassUnloadingEnabled代替CMSPermGenSweepingEnabled”
knb

222
首先,很好地解释这些标志的实际作用。仅仅说:“做到这一点并享受”还不够恕我直言。
Nikem

251

您最好尝试-XX:MaxPermSize=128M而不是-XX:MaxPermGen=128M

我无法告诉您该内存池的确切用途,但它与装入JVM的类数有关。(因此,为tomcat启用类卸载可以解决此问题。)如果您的应用程序在运行时生成和编译类,则很有可能需要比默认更大的内存池。


9
实际上,这只会推迟OOMError。请参阅下面的答案,该答案由anon开头,带有两个指向frankkieviet博客的链接。
Rade_303

:这些选项进行了说明oracle.com/technetwork/java/javase/tech/...
阿莫斯

153

多次部署后发生的应用服务器PermGen错误很可能是由容器对旧应用的类加载器中的引用所引起的。例如,使用自定义日志级别类将导致引用由应用服务器的类加载器保留。您可以使用现代(JDK6 +)JVM分析工具(例如jmap和jhat)来检测这些类加载器之间的泄漏,以查看哪些类继续保留在您的应用程序中,然后重新设计或取消使用它们。通常的可疑对象是数据库,记录器和其他基础框架级别的库。

请参阅Classloader泄漏:可怕的“ java.lang.OutOfMemoryError:PermGen空间”异常,尤其是其后续文章


3
这只是对问题的真正解决方案,在某些情况下难以实施。
Rade_303

另一个非常好的来源是people.apache.org/~markt/presentations/…(来自Tomcat版本管理器!)。
Givenkoa 2012年

22
虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
Joachim Sauer

68

人们常犯的错误是认为堆空间和permgen空间是相同的,这是完全不正确的。您可能在堆中剩余很多空间,但仍可能在permgen中用完内存。

PermGen中OutofMemory的常见原因是ClassLoader。每当将类加载到JVM中时,所有其元数据以及Classloader都将保留在PermGen区域上,并且在将它们加载到的Classloader准备好进行垃圾收集时将对它们进行垃圾收集。在Case Case发生内存泄漏的情况下,一旦重复几次,它加载的所有类将保留在内存中并导致permGen内存不足。经典示例是Tomcat中的Java.lang.OutOfMemoryError:PermGen Space

现在有两种方法可以解决此问题:
1.查找内存泄漏的原因或是否有内存泄漏。
2.通过使用JVM param -XX:MaxPermSize和增加PermGen Space的大小-XX:PermSize

您也可以在Java中查看2 Java.lang.OutOfMemoryError的解决方案以获取更多详细信息。


3
如何传递参数-XX:MaxPermSize and -XX:PermSize?我找不到catalina.bat。我的tomcat版本是5.5.26
Deckard

如何找到类加载器的内存泄漏?您是否推荐任何工具?
2014年

@amit提供工具建议,请参阅社区Wiki关于此问题的答案。
巴雷特

@Deckard进入Tomcat / bin目录并运行tomcat6w.exe。在“ Java”选项卡下,将参数添加到“ Java选项”框中。单击“确定”
Zeb

43

-XX:MaxPermSize=128m对Sun JVM 使用命令行参数(显然,用128代替所需的大小)。


9
唯一的问题是,您只是在延迟不可避免的事情,在某些时候,您的可用空间也会耗尽。这是一个非常实用的解决方案,但并不能永久解决。
Tim Howland

在Eclipse中,只要您有大量的动态类加载,就会发生同样的事情。类加载器没有被丢弃,并永远存在于永久的一代中
Matt

1
在执行特别大的Hudson工作时,我快用完PermGen了……这对我来说很固定。
HDave 2011年

10
@TimHowland,如果根本原因不是类加载器泄漏,Web应用程序中的类/静态数据太多,则可以永久修复。
彼得Török

从源代码构建jenkins / hudson时遇到了与HDave相同的问题。
louisgab 2014年

38

尝试-XX:MaxPermSize=256m,如果仍然存在,请尝试-XX:MaxPermSize=512m


56
如果仍然存在,请尝试XX:MaxPermSize=1024m:)
igo

38
如果仍然存在,请尝试XX:MaxPermSize = 2048m :)
Thomas

16
如果仍然存在,请重新考虑您的应用程序!!或尝试XX:MaxPermSize = 4096m :)
Jonathan Airey

17
您也可以尝试8192m,但这有点过大了
Jacek Pietal 2014年

12
确实过大了-640KB对任何人都应该足够了!
乔尔·普拉

28

我在使用eclipse ide时向VM参数添加了 -XX: MaxPermSize = 128m(可以尝试最有效的方法)。在大多数JVM中,默认的PermSize约为64MB,如果项目中有太多的类或太多的String,则会耗尽内存。

对于日食,也可以在answer上进行描述。

步骤1:在“ 服务器”选项卡上双击tomcat服务器

在此处输入图片说明

步骤2打开Conf会议,并添加-XX: MaxPermSize = 128m到现有VM争论的结尾

在此处输入图片说明


1
感谢您提供最佳详细答案(注意:单击“打开启动配置”以打开“编辑配置”窗口...但是我使用了以下参数:“ -XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled”
克里斯·辛

23

在部署和取消部署复杂的Web应用程序时,我一直对这个问题不屑一顾,并认为我会添加一个解释和解决方案。

当我在Apache Tomcat上部署应用程序时,将为该应用程序创建一个新的ClassLoader。然后,使用ClassLoader加载应用程序的所有类,并且在取消部署后,一切都应该消失了。但是,实际上并不是那么简单。

在Web应用程序生命周期中创建的一个或多个类拥有一个静态引用,该静态引用沿行的某个地方引用了ClassLoader。由于该引用最初是静态的,因此没有大量垃圾收集可以清理该引用-ClassLoader及其所有已加载的类都将保留在这里。

经过几次重新部署后,我们遇到了OutOfMemoryError。

现在,这已成为一个相当严重的问题。我可以确保在每次重新部署后都重新启动Tomcat,但这会关闭整个服务器,而不仅仅是关闭正在重新部署的应用程序,这通常是不可行的。

因此,我改为使用代码编写了一个解决方案,该解决方案可在Apache Tomcat 6.0上运行。我尚未在任何其他应用程序服务器上进行测试,并且必须强调,如果不对任何其他应用程序服务器进行修改这很可能无法正常工作

我还想说一句我个人讨厌此代码,并且如果可以将现有代码更改为使用适当的关闭和清除方法,则没有人应该将此作为“快速修复”。唯一应该使用的方法是,如果有一个外部库,您的代码所依赖的外部库(在我的情况下,它是RADIUS客户端)没有提供清除其自身静态引用的方法。

无论如何,在代码上。应该在应用程序未部署的位置调用此方法,例如Servlet的destroy方法或ServletContextListener的contextDestroyed方法(更好的方法)。

//Get a list of all classes loaded by the current webapp classloader
WebappClassLoader classLoader = (WebappClassLoader) getClass().getClassLoader();
Field classLoaderClassesField = null;
Class clazz = WebappClassLoader.class;
while (classLoaderClassesField == null && clazz != null) {
    try {
        classLoaderClassesField = clazz.getDeclaredField("classes");
    } catch (Exception exception) {
        //do nothing
    }
    clazz = clazz.getSuperclass();
}
classLoaderClassesField.setAccessible(true);

List classes = new ArrayList((Vector)classLoaderClassesField.get(classLoader));

for (Object o : classes) {
    Class c = (Class)o;
    //Make sure you identify only the packages that are holding references to the classloader.
    //Allowing this code to clear all static references will result in all sorts
    //of horrible things (like java segfaulting).
    if (c.getName().startsWith("com.whatever")) {
        //Kill any static references within all these classes.
        for (Field f : c.getDeclaredFields()) {
            if (Modifier.isStatic(f.getModifiers())
                    && !Modifier.isFinal(f.getModifiers())
                    && !f.getType().isPrimitive()) {
                try {
                    f.setAccessible(true);
                    f.set(null, null);
                } catch (Exception exception) {
                    //Log the exception
                }
            }
        }
    }
}

classes.clear();

我知道我写这本书已经有8年了,但是从那时到现在,我找到了更深层次的根本原因和解决方案。这是因为,虽然webapp中的所有类都由上下文类加载器拥有,但是调用启动和关闭回调的线程却由父类加载器拥有。这意味着,如果关闭代码初始化线程局部变量,这将导致父类加载器最终持有对上下文类加载器的引用,从而阻止了良好的清除。
爱德华·托贝特

幸运的是,有一个非常简单的修复程序-将shutdown方法中当前的所有代码移到新Thread对象的run方法中。然后在关闭方法中,启动此线程并等待其完成。清除代码将以相同的方式执行,但是任何线程局部变量将保持绑定到上下文类加载器,而不会泄漏。
Edward Torbett

20

java.lang.OutOfMemoryError: PermGen空间信息表明持久代的内存区域被耗尽。

允许任何Java应用程序使用有限数量的内存。在应用程序启动期间,将指定特定应用程序可以使用的确切内存量。

Java内存分为不同的区域,如下图所示:

在此处输入图片说明

元空间:新的内存空间诞生了

现在,JDK 8 HotSpot JVM使用本机内存来表示类元数据,这称为元空间。与Oracle JRockit和IBM JVM类似。

好消息是,这意味着不再有java.lang.OutOfMemoryError: PermGen空间问题,也不再需要使用Java_8_Download或更高版本来调整和监视此内存空间。


17

1)增加PermGen内存大小

可以做的第一件事是增大永久代堆空间的大小。这不能通过通常的–Xms(设置初始堆大小)和–Xmx(设置最大堆大小)JVM参数来完成,因为如上所述,永久生成堆空间与常规Java Heap空间完全分开,并且设置了这些参数此常规Java堆空间的空间。但是,可以使用类似的参数(至少与Sun / OpenJDK jvms一起使用)来增大永久代堆的大小:

 -XX:MaxPermSize=128m

默认值为64m。

2)启用扫描

永久解决此问题的另一种方法是允许卸载类,以便您的PermGen永远不会用完:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

这样的东西过去对我来说是神奇的。但有一件事,在使用这些性能时需要进行重大的性能折衷,因为permgen扫描将为您提出的每个请求或类似的请求额外产生2个请求。您需要权衡利弊。

您可以找到此错误的详细信息。

http://faisalbhagat.blogspot.com/2014/09/java-outofmemoryerror-permgen.html



选项2很棒,但是请注意不要在生产环境中使用它。通常最好只将其保留在开发环境中。但是,PermGen已从Java 8 openjdk.java.net/jeps/122开始删除
hdost 2015年


14

我遇到了我们在这里谈论的问题,我的场景是eclipse-helios + tomcat + jsf,而您正在做的就是将一个简单的应用程序部署到tomcat。我在这里显示了同样的问题,如下解决。

在eclipse中,转到server选项卡,在我的案例tomcat 7.0中双击已注册的服务器,它会打开我的文件服务器的常规注册信息。在“常规信息”部分上,单击链接“打开启动配置”,这将打开在这两个条目末尾添加的VM参数中“参数”选项卡中服务器选项的执行。

-XX: MaxPermSize = 512m
-XX: PermSize = 512m

准备好了


14

这些天最简单的答案是使用Java 8。

它不再专门为PermGen空间保留内存,从而允许PermGen内存与常规内存池混合。

请记住,-XXPermGen...=...如果您不希望Java 8抱怨它们没有执行任何操作,则必须删除所有非标准JVM启动参数。


您好,这个答案已经给出:stackoverflow.com/a/22897121/505893。为了清楚起见,请删除您的答案。如果需要,您可以改善我提到的答案。谢谢;)
蓝蓝的

6
@bluish谢谢你指出这一点;但是,在讨论OutOfMemoryExceptions和泄漏元数据时,该答案全都横穿了。它也没有提到删除PermGen选项的非常重要的一点。简而言之,我不确定我会改善答案,而是重写它。如果只是快速润色,我会毫不犹豫,但看起来它不仅仅是快速润色,而且我不想冒犯原始作者。尽管如此,这个答案列表还是一团糟的狗宴,也许最好还是杀掉我的帖子。
Edwin Buck

8
  1. 从Tomcat的bin目录中打开tomcat7w,或在开始菜单中键入Monitor Tomcat(打开的选项卡式窗口,其中包含各种服务信息)。
  2. 在“ Java选项”文本区域中,添加以下行:

    -XX:MaxPermSize=128m
  3. 将“初始内存池”设置为1024(可选)。
  4. 将“最大内存池”设置为1024(可选)。
  5. 单击确定。
  6. 重新启动Tomcat服务。

6

由于使用大空间而不是jvm提供的空间来执行代码,因此会发生Perm gen空间错误。

在UNIX操作系统中,此问题的最佳解决方案是更改bash文件上的某些配置。以下步骤解决了该问题。

gedit .bashrc在终端上运行命令。

创建JAVA_OTPS具有以下值的变量:

export JAVA_OPTS="-XX:PermSize=256m -XX:MaxPermSize=512m"

保存bash文件。在终端上运行命令exec bash。重新启动服务器。

我希望这种方法可以解决您的问题。如果您使用的Java版本低于8,则有时会发生此问题。但是,如果您使用Java 8,则永远不会发生此问题。


5

如果您确实有内存泄漏,则增加永久代大小或调整GC参数将无济于事。如果您的应用程序或它使用的某些第三方库,则泄漏类加载器唯一真正的永久解决方案是找到此泄漏并进行修复。有很多工具可以为您提供帮助,最近的一个是Plumbr,它刚刚发布了具有所需功能的新版本。


5

另外,如果您在Web应用程序中使用log4j,请参阅log4j 文档中的本段。

似乎,如果使用PropertyConfigurator.configureAndWatch("log4j.properties"),则在取消部署Web应用程序时会导致内存泄漏。


4

我将Hibernate + Eclipse RCP组合在一起,尝试使用-XX:MaxPermSize=512m-XX:PermSize=512m,它似乎对我有用。


4

设置-XX:PermSize=64m -XX:MaxPermSize=128m。以后您也可以尝试增加MaxPermSize。希望它能工作。同样对我有用。设置MaxPermSize对我没有用。


4

我尝试了几个答案,最后唯一要做的就是对pom中的编译器插件进行以下配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <fork>true</fork>
        <meminitial>128m</meminitial>
        <maxmem>512m</maxmem>
        <source>1.6</source>
        <target>1.6</target>
        <!-- prevent PermGen space out of memory exception -->
        <!-- <argLine>-Xmx512m -XX:MaxPermSize=512m</argLine> -->
    </configuration>
</plugin>

希望这对您有所帮助。


maven-compiler-plugin 2.4无法识别“ argLine”。它仅支持“ compilerArgument”,从而产生错误:<compilerArgument> -XX:MaxPermSize = 256m </ compilerArgument> [错误]执行Javac失败,但无法解析错误:javac:无效标志:-XX:MaxPermSize = 256m :javac <选项> <源文件>
Alex

如果您的编译阶段用完了permgen,请在maven-compiler-plugin上设置<compilerArgument>。如果单元测试用完了maven-surefire-plugin中的permgen set <argLine>
qwerty,

4

也为我解决了这个问题;但是,我注意到Servlet的重新启动时间要差得多,因此虽然在生产中性能更好,但是这在开发中却是一种拖累。


3

内存的配置取决于应用程序的性质。

你在做什么?

进行多少笔交易?

您正在加载多少数据?

等等

等等

等等

可能您可以分析应用程序并开始清除应用程序中的某些模块。

显然,这可能是在重新部署应用程序几次之后发生的

Tomcat具有热部署,但占用内存。尝试不时重新启动容器。另外,您将需要知道在生产模式下运行所需的内存量,这对于该研究而言似乎是个好时机。



3

我遇到了完全相同的问题,但是不幸的是,没有一个建议的解决方案真正对我有用。在部署期间没有发生此问题,我也没有进行任何热部署。

以我为例,该问题在我的Web应用程序执行期间的同一时间每次都发生,同时(通过休眠)连接到数据库。

此链接(前面也提到过)确实提供了足够的内部解决问题的方法。将jdbc-(mysql)-驱动程序移出WEB-INF并移至jre / lib / ext /文件夹似乎已经解决了该问题。这不是理想的解决方案,因为升级到较新的JRE将需要您重新安装驱动程序。另一个可能引起类似问题的候选对象是log4j,因此您可能也希望将其移动


如果您不想在jre / lib / ext中包含驱动程序,则可以通过在容器启动类路径中包含驱动程序来获得相同的结果。java -cp /path/to/jdbc-mysql-driver.jar:/path/to/container/bootstrap.jar容器。开始
苏格兰

3

在这种情况下,第一步是检查是否允许GC从PermGen卸载类。在这方面,标准的JVM相当保守-类是天生的。因此,一旦加载,即使没有代码在使用它们,类也会保留在内存中。当应用程序动态创建许多类并且长时间不需要生成的类时,这可能会成为问题。在这种情况下,允许JVM卸载类定义可能会有所帮助。这可以通过在启动脚本中仅添加一个配置参数来实现:

-XX:+CMSClassUnloadingEnabled

默认情况下,此选项设置为false,因此要启用此功能,您需要在Java选项中显式设置以下选项。如果启用CMSClassUnloadingEnabled,GC也会清除PermGen并删除不再使用的类。请记住,只有同时使用以下选项启用UseConcMarkSweepGC时,此选项才起作用。因此,在运行ParallelGC或上帝禁止使用串行GC时,请确保通过指定以下内容将GC设置为CMS:

-XX:+UseConcMarkSweepGC

3

为Tomcat分配更多的内存不是正确的解决方案。

正确的解决方案是在销毁并重新创建上下文(热部署)之后进行清理。解决方案是阻止内存泄漏。

如果您的Tomcat / Webapp服务器告诉您注销驱动程序(JDBC)失败,请注销它们。这将阻止内存泄漏。

您可以创建一个ServletContextListener并在web.xml中对其进行配置。这是一个示例ServletContextListener:

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;

import com.mysql.jdbc.AbandonedConnectionCleanupThread;

/**
 * 
 * @author alejandro.tkachuk / calculistik.com
 *
 */
public class AppContextListener implements ServletContextListener {

    private static final Logger logger = Logger.getLogger(AppContextListener.class);

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        logger.info("AppContextListener started");
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        logger.info("AppContextListener destroyed");

        // manually unregister the JDBC drivers
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        while (drivers.hasMoreElements()) {
            Driver driver = drivers.nextElement();
            try {
                DriverManager.deregisterDriver(driver);
                logger.info(String.format("Unregistering jdbc driver: %s", driver));
            } catch (SQLException e) {
                logger.info(String.format("Error unregistering driver %s", driver), e);
            }

        }

        // manually shutdown clean up threads
        try {
            AbandonedConnectionCleanupThread.shutdown();
            logger.info("Shutting down AbandonedConnectionCleanupThread");
        } catch (InterruptedException e) {
            logger.warn("SEVERE problem shutting down AbandonedConnectionCleanupThread: ", e);
            e.printStackTrace();
        }        
    }
}

在这里,您可以在web.xml中对其进行配置:

<listener>
    <listener-class>
        com.calculistik.mediweb.context.AppContextListener 
    </listener-class>
</listener>  

2

“它们”是错误的,因为我正在运行6.0.29,即使在设置所有选项后也遇到相同的问题。正如蒂姆·霍兰德(Tim Howland)上文所述,这些选择只会推迟不可避免的事情。它们使我在遇到错误之前重新部署了3次,而不是每次重新部署。


2

如果您在eclipse IDE中得到了此消息,即使在设置了参数 --launcher.XXMaxPermSize-XX:MaxPermSize等之后,仍然遇到相同的错误,则很可能是eclipse使用的是错误版本的JRE,该版本已由某些人安装第三方应用程序并设置为默认。这些错误的版本不会使用PermSize参数,因此,无论您进行什么设置,您仍然会不断遇到这些内存错误。因此,在您的eclipse.ini中添加以下参数:

-vm <path to the right JRE directory>/<name of javaw executable>

另外,还要确保在Eclipse的首选项中将默认JRE设置为Java的正确版本。


2

对我有用的唯一方法是使用JRockit JVM。我有MyEclipse 8.6。

JVM的堆存储正在运行的Java程序生成的所有对象。Java使用new运算符创建对象,并在运行时在堆上分配用于新对象的内存。垃圾回收是一种自动释放程序不再引用的对象所包含的内存的机制。


2

我有类似的问题。我的是JDK 7 + Maven 3.0.2 + Struts 2.0 + Google GUICE依赖注入项目。

每当我尝试运行mvn clean package命令时,它都会显示以下错误,并且发生“ BUILD FAILURE”

org.apache.maven.surefire.util.SurefireReflectionException:java.lang.reflect.InvocationTargetException; 嵌套的异常是java.lang.reflect.InvocationTargetException:空java.lang.reflect.InvocationTargetException原因:java.lang.OutOfMemoryError:PermGen空间

我尝试了上述所有有用的提示和技巧,但不幸的是没有一个对我有用。下面逐步介绍了对我有用的方法:=>

  1. 转到您的pom.xml
  2. 搜索 <artifactId>maven-surefire-plugin</artifactId>
  3. 添加一个新<configuration>元素,然后添加<argLine>通过其中的子元素,-Xmx512m -XX:MaxPermSize=256m如下所示=>

<configuration> <argLine>-Xmx512m -XX:MaxPermSize=256m</argLine> </configuration>

希望对您有所帮助,编程愉快:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.