JVM内存溢出
内存不足(溢出):由于 java 堆或本地内存中的内存耗尽,应用程序显示“内存不足”错误。
内存泄漏:java 堆或本地内存的持续内存增长,最终将导致内存不足状态。
内存溢出与内存泄露的相同点和不同点:
相同点:都会报OOM的错误。
不同点:内存不足是由于设置的内存不够引起的,适当调大即可解决,而内存溢出是由于代码编写不规范而引起的,调大内存只能缓解,不能彻底解决问题,需要根据报错信息,分析DUMP文件来定位错误,再与开发人员沟通对代码进行优化。
现象:
Heap区:后台报java.lang.OutOfMenoryError:Java heap space错误。
Perm区:后台报java.lang.OutOfMenoryError:PermGen space 错误。
分析:
Heap区:查看GC日志,如果gc正常可适当调大对应区的内存,若不正常,每次执行full gc回收的内存少,则是应用程序的问题,需对生成的DUMP文件进行分析来定位出错的位置,再与开发人员沟通对代码进行优化。
Perm区:装载Class信息等基础数据,发生泄露是由于应用加载的类很多,需要加大其设置-XX:MaxPermSize=,再进一步监视。