E:eclipseeclipse.exe -clean -vmargs -Xms128M -Xmx512M -XX:PermSize=64M
-X:MaxPermSize=128M
如果没有进行设置的话,在使用 MyEclipse 的经常出现如下图所示内存不足的提
示。
提示中说的很明白:“MyEclipse has detected that less than 5% of the
64MB of Perm Gen (Non-heap memory) space remains.”意思是说当前只有小
于 5%的非堆内存是空闲的。所以我们只要将这个值设置大一些就可以了。
提示中给出了设置的参数:
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
这里有几个问题:
1. 各个参数的含义什么?
2. 为什么有的机器我将-Xmx 和-XX:MaxPermSize 都设置为 512M 之后
Eclipse 可以启动,而有些机器无法启动?
3. 为何将上面的参数写入到 eclipse.ini 文件 Eclipse 没有执行对应的设
置?下面我们一一进行回答
1. 各个参数的含义什么?
参数中-vmargs 的意思是设置 JVM 参数,所以后面的其实都是 JVM 的参数了,
我们首先了解一下 JVM 内存管理的机制,然后再解释每个参数代表的含义。
堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有
类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在
JVM 中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出 JVM 主要管
理两种类型的内存:堆和非堆。简单来说堆就是 Java 代码可及的内存,是留给
开发人员使用的;非堆就是 JVM 留给 自己用的,所以方法区、JVM 内部处理或优
化所需的内存(如 JIT 编译后的代码缓存)、每个类结构(如运行时常数池、字段
和方法数据)以及方法和构造方法 的代码都在非堆内存中。
堆内存分配
JVM 初始分配的内存由-Xms 指定,默认是物理内存的 1/64;JVM 最大分配的
内存由-Xmx 指定,默认是物理内存的 1/4。默认空余堆内 存小于 40%时,JVM
就会增大堆直到-Xmx 的最大限制;空余堆内存大于 70%时,JVM 会减少堆直到-Xms
的最小限制。因此服务器一般设置- Xms、-Xmx 相等以避免在每次 GC 后调整堆