一 基本说明
在JVM中,总体上分2块内存区,默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。
1)堆内存(Heap memory):堆是运行时数据区域,所有类实例和数组的内存均从此处分配,是Java代码可及的内存,是留给开发人员使用的.
2)非堆内存(Non-heap memory):在JVM中堆之外的内存,非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中.
JVM有4个常用参数,在使用javaxxx命令中,添加下面的参数,既可改变应用的内存.否则在内存不足的情况下,会抛出outOfMemoryError异常.
-Xms512M //最小堆内存,默认是物理内存的1/64
-Xmx512M //最大堆内存,默认是物理内存的1/4
-XX:PermSize=64M //最小非堆内存,默认是物理内存的1/64
-XX:MaxPermSize=128M //最大非堆内存,默认是物理内存的1/4
二 eclipse中,内存设置
方法1:修改eclipse.ini
-vmargs
-Xms512M
-Xmx512M
-XX:PermSize=64M
-XX:MaxPermSize=128M
方法2:对应在Eclipse中的设置为:window->preferences->JAVA->installed JREs,在Default VM Arguments中增加:-Xmx512M (也可以添加其他参数如-Xms512M -XX:PermSize=64M -XX:MaxPermSize=128M)
三 生产环境解决方案
1)服务器一般设置-Xms、-Xmx相等以避免在每次GC后调整堆的大小
2)-Xmx和-XX:MaxPermSize的总和,不能大于服务器物理内存大小,而且有些内存被硬件使用,所以总和要在可分配内存范围内.
3)实际运行的结果可以通过Eclipse中help->Installation Details->Configuration里面查看Eclipse运行情况
4)visualvm
一款很好用的jvm分析工具
下载地址:https://visualvm.dev.java.net/
5)以jdk环境运行eclipse
1、在eclipse.ini中添加VM启动参数,制定eclipse启动使用的vm,修改后的文件内容如下
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vm
D:\Program Files (x86)\Java\jdk1.6.0_21\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms512m
-Xmx1024m
-XX:PermSize=256M
-XX:MaxPermSize=256M
顺序一定要对
2、创建一快捷方式,起始目标为:"D:\***\eclipse.exe" -vm "D:\Program Files (x86)\Java\jdk1.6.0_21\bin\javaw.exe".