eclipse.ini中“XXMaxPermSize”和“xmx”有什么区别?

时间:2014-08-13 22:09:04

标签: java eclipse memory jvm jvm-arguments

我正试图找出两者之间的区别,因为我的日食有时会遇到“内存不足”的错误。我有很多记忆可供我使用,所以我想弄清楚要增加或减少哪些以及他们如何使其正常工作。以下是文件的内容:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20130807-1835
-clean
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
1024m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Xms256m
-Xmx2000m

3 个答案:

答案 0 :(得分:3)

当您收到错误时,您需要仔细阅读,因为每个字都很重要。例如,当您获得OOME时,您会看到一些单词作为消息。这很重要,因为有很多理由可以获得OOME,其中有两个是最常见的原因;

  • 缺少由-Xmx
  • 控制的堆空间(对象实例)
  • 缺少由-XX:MaxPermSpace=
  • 控制的perm gen(代码)

注意:Java 8没有" Perm Gen"它有一个" Metaspace"它做同样的事情,但工作方式有所不同,我怀疑他们将其重命名以避免混淆。

此错误还有其他原因,例如使用过多的直接内存或无法创建新线程,但这些相对较少。

如果你拿走一分,这个答案是阅读整个信息,而不仅仅是错误本身,如果你不知道这意味着什么,谷歌通常会这样做;)

我之所以这么说,是因为经常会在StackOverflow上发布一个关于"错误发生的问题"并且第一个评论是"发生了什么错误"因为一旦发布,问题就很明显(对于知道这意味着什么的人)大多数情况下问题是什么。因此,当您阅读错误消息时,您需要假设它试图告诉您某些内容,但您不知道它意味着什么,是的,我看到了新的错误消息,我不知道它们是什么意思经常

答案 1 :(得分:1)

-XX:MaxPermSize=64m 
  

Size of the Permanent Generation. [5.0 and newer: 64 bit VMs are scaled 30% larger; 1.4 amd64: 96m; 1.3.1 -client: 32m.]

不再存在>= 8版本

-Xmxn
  

指定内存分配池的最大大小(以字节为单位)。此值必须是1024的倍数大于2MB。附加字母k或K表示千字节,或m或M表示兆字节。默认值为64MB。 Solaris 7 and Solaris 8 SPARC platforms and 2000m on Solaris 2.6 and x86 platforms, minus overhead amounts.

上的此值的上限约为4000米

答案 2 :(得分:0)

尝试查看this页面以进一步阅读,但Jigar Joshi对permgen空间和堆空间之间差异的回答是正确的。

此页面的引文是:

假设将一个JVM参数设置为

-Xms3072M -Xmx3072M -XX:+ AggressiveHeap -XX:MaxPermSize = 1024M

怀疑是:当我们说MaxPermSize = 1024M这意味着它取自 我为Xms / Xmx设置的3072M?

答案为否,PermSize是用户在JVM选项上设置的-Xmx值的附加值。但MaxPermSize允许JVM能够将PermSize增加到指定的数量。最初加载VM时,MaxPermSize仍然是默认值(-client为32mb,-server为64mb),但在需要之前实际上不会占用该值。另一方面,如果您将BOTH PermSize和MaxPermSize设置为256mb,您会注意到-Xmx设置的整体堆增加了256mb。*