最全的Eclipse 启动优化、内存优化 -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 后调 整 堆的大 小 。 非堆内存分配 JVM使用-XX:PermSize设置非堆内存初始值 ,默认是物 理内存的1/64;由XX:MaxPermSize设置最大 非堆内存的大 小 ,默认是物 理内存的1/4。 JVM内存限 制(最大 值 ) 首先JVM内存限 制于 实际 的最大 物 理内存(废 话 ! 呵 呵 ),假 设物 理内存无限 大 的话 ,JVM内 存 的 最 大 值 跟 操 作 系 统 有 很 大 的 关 系 。简 单 的 说 就 32位 处 理 器 虽 然 可 控 内 存 空 间 有 4GB,但 是 具 体 的 操 作 系 统 会 给 一 个 限 制 , 这 个 限 制 一 般 是 2GB-3GB( 一 般 来 说 Windows系 统 下 为1.5G- 2G, Linux系 统 下 为 2G-3G) , 而 64bit以 上 的 ...