1.参数的含义
vmargs -Xms 128M -Xmx 512M -XX:PermSize=64M -XX:MaxPermSize=128M
-vmargs 代表后面是设置jvm的参数
-Xms 128M JVM设置最小分配的堆内存
-Xmx 512M JVM允许最大分配的堆内存,按需分配
-XX:PermSize=64M JVM设置分配最小的非堆内存
-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配
2.堆与非堆内存
堆内存(Heap):运行时数据区域,所有类实例与数组的内存均从此处分配。堆是在java虚拟机启动时创建的。堆内存留给开发人员使用。
非堆内存(no-Heap):除堆以外的内存就是非堆内存,非堆内存是留给jvm自己用的。比如方法区、jvm内部优化所需内存、每个类结构、方法以及构造方法的代码都在非堆内存中。
堆内存的分配
-Xms为最小分配的堆内存,默认为物理内存的1/64 ; -Xmx为最大分配的堆内存,默认为物理内存的1/4。当默认空余堆内存小于40%,JVM堆内存就会增加至-Xmx;当默认空余堆内存大于70%,JVM 堆内存就会减小至-Xms。因此服务器每次设置-Xms与-Xmx的大小相等,避免每次GC后调整堆的大小。
说明:如果-Xmx不指定或者指定偏小,可能会导致java.lang.OutOfMemory错误。
非堆内存的分配
-XX:PermSize为最小分配非堆内存,默认为物理内存的1/64; -XX:MaxPermSize为最大分配的非堆内存,默认为1/4。
说明:如果 -XX:MaxPermSize设置过小,可能会导致java.lang.OutOfMemoryError: PermGen space 就是内存溢出。
内存溢出产生的原因:
1)这一部分用来存放class或者meta信息,Class在被加载的时候直接存放在PermGen Space区域,它与Instance存放的Heap区域不同。
2)PermGen Space区域在主程序运行的过程中不会GC,因此当程序load太多的class的时候就会发生内存溢出。
3:调整JVM的参数
1)在eclipse根目录eclipse.ini中配置JVM参数
2)修改jdk使用内存
Window->preferences->java-Installed JRE->edit->Default VM Arguments
3)修改Run Configurations
Run As->Run Configurations->Arguments,在VM arguments中填入即可
参考博客:http://www.cnblogs.com/mingforyou/archive/2012/03/03/2378143.html