执行 jstat -gctuil 每个1秒打印gc结果有较长一段时间 (大约20分钟) s0 s1 占用0%, eden 占用 100% PSOld 占用 100 此时fullgc频繁执行,fullgc后又是 eden 会回收些 70% 有时回收不了 还是100% 整个过程 s0 s1 都是0%jmap -heap 查看堆使用情况如图 jvm参数:
-Xms2046m -Xmx5096m -XX:PermSize=256m -XX:MaxPermSize=512mjdk版本:java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)GC
-Xms2046m -Xmx5096m -XX:PermSize=256m -XX:MaxPermSize=512mjdk版本:java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)GC
young GC控制的是前3列的内存回收。690这一列才是full GC,奇怪的是在你红色区域虚拟机应该做一次full GC,可是没见到690变成691。但是old区从100%降低到了70%多。另外估计和楼主的内存这是的太大了也有关系,
-Xms2046m -Xmx5096m -XX:PermSize=256m -XX:MaxPermSize=512m
这个参数太不合理了吧?为什么你的程序要分配这么多的内存?32位操作系统最多能用4G内存吧。
如果你的程序有内存泄露,这个值分配的再多也没用。
jstat -gc可能会看的清楚一点。