2024-10-26  阅读(15)
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/9105893255

回答

一、内存溢出

内存溢出是指 JVM 在运行时无法分配足够的内存给新建的对象,致程序抛出OutOfMemoryError异常。

导致内存溢出的原因有很多,大致有如下几个:

  • 堆内存溢出:这是最常见的 OOM 了。产生堆内存溢出的原因有蛮多,比如创建大量的大对象、应用程序中使用了大量的缓存且没有及时释放等等。
  • 栈内存溢出:栈内存溢出一般都是发生在递归调用过深或者创建了大量的线程。
  • 元空间溢出:元空间溢出一般都是发生在我们应用程序通过动态代理(如CGLibJavassist)生成大量类时。
  • 直接内存溢出:堆外内存溢出,比如我们在应用程序中大量使用 DirectByteBuffer,超过了 -XX:MaxDirectMemorySize 设置的限制。

二、内存泄漏

内存泄漏是指应用程序中不再使用的对象仍然被引用,导致它们无法被垃圾回收器回收,从而导致内存溢出。


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。