JVM内存溢出和内存泄露

港控/mmm° 2022-05-22 03:00 378阅读 0赞

定义

  • 内存溢出out of memory:指程序运行过程中无法申请到足够的内存而导致的一种错误;
  • 内存泄露memory leak:指程序中动态分配内存给一些临时对象,但是对象不会被GC所回收始终占用内存;即被分配的对象可达但已无用

内存溢出:

  1. 堆内存溢出(outOfMemoryError:java heap space)
  2. 方法区内存溢出(outOfMemoryError:permgem space)
  3. 线程栈溢出(java.lang.StackOverflowError)

内存泄漏可以分为4类:

  1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
  2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
  3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
  4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏

java可能出现的内存溢出

1、在循环体内New大量的对象;
2、存在对象的引用,使用完后没有清除,导致JAVA虚拟机不能回收;
3、在内存中加载了大量的数据或缓存了过多的数据;

发表评论

表情:
评论列表 (有 0 条评论,378人围观)

还没有评论,来说两句吧...

相关阅读

    相关 内存溢出内存泄露

    内存溢出(OOM) 内存溢出相对于内存泄漏来说,尽管更容易被理解,但是同样的,内存溢出也是引发程序崩溃的罪魁祸首之一。 由于GC一直在发展,所有一般情况下,除

    相关 内存溢出内存泄露

    内存溢出就是分配的内存不足以放下数据项序列。如在一个域中输入的数据超过了它的要求就会引发数据溢出问题,多余的数据就可以作为指令在计算机上运行。 内存泄漏是指在堆上分配的内存没