1.初始参数
-Xms256m
-Xmx1024m
2.在eclipse.ini中加入,注意一点的是D:/soft/eclipse-jee,这个目录必须存在,启动时并不会自动目录
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:D:/soft/eclipse-jee/gc.log
3.分析日志
2017-02-24T22:28:40.366+0800: 1.432: [GC [PSYoungGen: 65600K->10872K(76480K)] 65600K->22224K(251264K), 0.0280555 secs] [Times: user=0.13 sys=0.00, real=0.03 secs]
这个代表进行了GC,
解析:
a、1.432,表示jvm启动到垃圾收集的实际
b、GC:是一个minor gc(新生代gc)
c 、[PSYoungGen: 65600K->10872K(76480K):表示新生代使用了多线程垃圾收集器parallel Scavenge,65600K表示新生代垃圾收集前占用的空间,10872K表示新生代垃圾收集之后的空间,新生代分为两个区,一个eden区和两个survivon区,minor gc后,eden区为空,10872K为survivon区大小,76480K为整个新生代大小。
d、65600K->22224K(251264K):
251264K是整个堆区的大小,65600K收集前堆区的大小,22224K收集后堆区的大小。
4.修改参数为:
-Xms1024m 最小堆大小
-Xmx1024m 最大堆大小
-XX:NewSize=768m 新生代大小
-XX:MaxNewSize=768m 新生代最大值
-XX:PermSize=200m 持久代大小
-XX:MaxPermSize=200m 持有代大小
5.java 堆内存分布
a。年轻代 所有新生成的对象都在新生代,一个eden区,两个survivor区,当eden区满时,把存活对象复制到一个survivor区,当一个survivor区满时,就把存活对象复制到另外一个survivor区,当另个一个survivor区也满了的时候,从前一个survivor区复制过来还存活的对象,就被复制到old区
b。年老代 在经历了N次垃圾回收还存活的对象,会放到年老代
c。持久代 java类信息 ,用于存放静态对象。