为什么对java对内存溢出?
Java堆是用来储存对象实例的,当只要不断的创建对象,并保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限制之后就会产生内存溢出异常
- -Xms和-Xmx设置一样可以避免对自动扩容
- 通过参数-XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在出现内存溢出时Dump出当前内存堆转存快照进行分析。
- -XX:MaxDirectMemorySize 指定DirectMemorySize内存,如果不指定则默认和-Xmx一样。特点:由于DirectMemory导致的内存溢出,一个明显的特征是在Heap Dump文件中是看不到明显的异常的。
- 通过-XX:PermSize和-XX:MaxPermSize来限制方法区的大小,从而间接限制其中常量池的容量。运用时常量池报错回出现“PermGen space”提示