我正试图找出两者之间的区别,因为我的日食有时会遇到“内存不足”的错误。我有很多记忆可供我使用,所以我想弄清楚要增加或减少哪些以及他们如何使其正常工作。以下是文件的内容:
-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
答案 0 :(得分:3)
当您收到错误时,您需要仔细阅读,因为每个字都很重要。例如,当您获得OOME时,您会看到一些单词作为消息。这很重要,因为有很多理由可以获得OOME,其中有两个是最常见的原因;
-Xmx
-XX:MaxPermSpace=
注意:Java 8没有" Perm Gen"它有一个" Metaspace"它做同样的事情,但工作方式有所不同,我怀疑他们将其重命名以避免混淆。
此错误还有其他原因,例如使用过多的直接内存或无法创建新线程,但这些相对较少。
如果你拿走一分,这个答案是阅读整个信息,而不仅仅是错误本身,如果你不知道这意味着什么,谷歌通常会这样做;)
我之所以这么说,是因为经常会在StackOverflow上发布一个关于"错误发生的问题"并且第一个评论是"发生了什么错误"因为一旦发布,问题就很明显(对于知道这意味着什么的人)大多数情况下问题是什么。因此,当您阅读错误消息时,您需要假设它试图告诉您某些内容,但您不知道它意味着什么,是的,我看到了新的错误消息,我不知道它们是什么意思经常
答案 1 :(得分:1)
-XX:MaxPermSize=64m
不再存在>= 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。*