一位同事在Eclipse / Tomcat运行参数中有以下设置,并且一直抱怨堆内存不足:
-XX:PermSize=512M
-XX:MaxPermSize=1024M
-Xmx1024m
如果我理解正确,max PermGen
和max Heap
都是1 GB。由于PermGen
是堆的特殊部分,因此相当于将所有堆分配给PermGen
。这是对的吗?
按Perm Space vs Heap Space,我可能是对的。这会导致这个问题吗?
答案 0 :(得分:3)
使用任何Sun / Oracle JVM附带的JVisualVM连接到正在运行的eclipse进程并检查实际情况
答案 1 :(得分:2)
启用GC日志记录,一旦Eclipse再次崩溃,您将看到问题的原因,日志将显示PermGen的大小。
GC日志记录:-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
考虑到PermGen是否是Heap的一部分,这实际上取决于您正在运行的Hotspot的版本。 GC算法控制PermGen的大小,所以即使你设置MAX = 1GB,它也可能永远不会那么大,你还可以因为其他问题而得到OOM。