分析Java堆:内存溢出的原因 | 您所在的位置:网站首页 › java堆空间的错误怎么解决 › 分析Java堆:内存溢出的原因 |
1、堆溢出
一般来说,绝大部分Java的内存溢出都属于堆溢出。原因是因为大量对象占据了堆空间,这些对象都持有强引用导致无法回收,当对象大小之和大于Xmx参数指定的堆空间时就会发生堆溢出; 解决办法 使用Xmx参数指定一个更大的堆空间;由于堆空间不可能无限增长,分析找到大量占用对空间的对象,在应用程序上做出优化; 2、直接内存溢出在Java的NIO中,支持直接内存的使用,通过Java代码获得一块堆外的内存空间。直接内存的申请速度一般比堆内存慢,但是访问速度快于堆内存。 对于那些可复用的,并且会被经常访问的空间使用直接内存可以提高系统性能。直接内存没有被JVM完全托管若使用不当容易触发直接内存溢出导致宕机; public class DirectBufferOOM { public static void main(String[] args) { for (int i = 0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |