当前位置: 首页 > 知识库问答 >
问题:

maven默认堆空间和Permgen大小

朱伯寅
2023-03-14

据此:

在系统中安装了Maven之后,下一步就是对其进行微调以获得最佳性能。默认情况下,最大堆分配为256-512 MB(-XMS256M到-XMX512M)。在构建大型复杂Java项目时,此默认限制不起作用,建议您至少拥有1024 MB的最大堆。

现在,我认为堆空间和permgen空间的max和min值是由JVM设置的。Maven只能通过我们设置的MAVEN_OPTS env变量来设置它们。那么,maven在哪里将这些值设置为默认值呢?

如果这是真的,那么maven为自己设置的permgen大小的默认max、min是多少?

我正在学习Java7和Maven3。

共有1个答案

戴化
2023-03-14

首先,堆空间等由您正确提到的JVM设置。

此外,您可以通过.mvn/jvm.config或前面提到的通过maven_opts为Maven设置它们。

还可以通过.mavenrc定义maven_opts和其他东西(例如JAVA_HOME),$home/.mavenrc(Linux/MAC)或%userprofile%\mavenrc_pre.bat%userprofile%\mavenrc_pre.cmd(Windows)中的.mavenrc:

因此.mavenrc文件可以包含:

export JAVA_HOME=.../jdk-11.0.1.jdk
export MAVEN_OPTS="-Djava.awt.headless=true -Xmx2g"

或者另一种选择是使用jvm.config(位于项目的.mvn目录中)文件,该文件可以包含:

-Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true

Maven没有定义默认值。缺省值是由JVM定义的值。

对于Java7,我建议不要更改PermGen,因为如果部署到servlet容器(如Tomcat或实际应用服务器等)中,通常需要更改PermGen,但这当然取决于情况。

此外,引用书中的话,我只想说。从默认值开始。如果我们谈论的是性能,你真的应该检查一下问题是否真的是我通常怀疑的记忆力。当然,如果我们谈论的是一个多模块构建中包含100+个模块的构建,那么就会有一个影响。

 类似资料:
  • 问题内容: 限制Java JVM上Permgen空间大小的目的是什么?为什么不总是将其设置为等于最大堆大小?Java为什么默认为这么少的64MB?他们是否正在试图通过这种方式迫使人们注意代码中的Permgen问题? 如果我的应用使用85MB的permgen,那么将其设置为96MB可能是安全的,但是如果它只是主堆的一部分,为什么还要设置得如此之小呢?允许JVM使用堆允许的PermGen效率不高吗?

  • 我需要使用默认命名空间创建/读取xml文件: 但我得到: 我知道包级元数据,但这在复杂的包结构中不起作用: 我已经定义了模型类,如Address: 客户: 公共字段的父类: 然后是保存具体xml XmlBoo的数据/结构的特定类: XmlFoo: package-info.java包括在两个提到的包example.xml.boo: 和example.xml.foo: 最后是主要方法: 我在这里尝试

  • 问题内容: 我试图以编程方式找出用于调用我的程序的JVM的最大permgen和最大堆大小,而不是它们当前可用的大小。 有没有办法做到这一点? 我熟悉Java Runtime对象中的方法,但不清楚它们真正提供了什么。 或者,是否有办法询问Eclipse为这两个分配了多少? 问题答案: 试试这个: 但是它们仅提供快照数据,而不提供累积值。

  • 问题内容: 在oracle文档中,我发现: -Xmxsize以字节为单位指定内存分配池的最大大小(以字节为单位)…默认值是在运行时根据系统配置选择的。 这是什么 系统配置 是什么意思? 问题答案: 它取决于实现和版本,但通常取决于所使用的VM(例如,客户端或服务器,see 和参数)以及您的系统内存。 默认值通常是物理内存的1/4或1GB(以较小者为准)。 Java配置选项(命令行参数)也可以“外包

  • 我试图在我的Mac上构建完整的Hadoop源代码。当我尝试构建时,我经常遇到错误:“Java.lang.OutOfMemoryError:Java堆空间”。我尝试使用命令export maven_opts=“-xms256m-xmx1024m”和export maven_opts=“-xmx2g-xx:maxpermsize=512m-xx:reservedcodecachesize=512m”设

  • 问题内容: 如果我从Java命令行中省略了该选项,那么将使用默认值。根据Java文档 “根据系统配置在运行时选择默认值” 哪些系统配置设置会影响默认值? 问题答案: 在Windows上,你可以使用以下命令查找运行应用程序的系统上的默认设置。 堆大小 寻找的选项(对),并为。 在系统上,你可以 我相信结果输出以字节为单位。