内存泄漏指的是程序中分配的内存在不再需要时没有被正确释放或回收的情况。这会导致程序持续占用内存,随着时间的推移,可用内存逐渐减少,最终可能导致程序性能下降或崩溃。
内存泄漏通常发生在程序中的对象或数据结构被创建后,但没有适时地释放对它们的引用,从而阻止垃圾回收器将它们清理出内存。
常见的内存泄漏情况包括未关闭的文件或数据库连接、未释放的资源对象(如打开的文件句柄或网络连接)、长时间被引用的集合类(List、Map)等。
内存溢出指的是程序试图分配超过其可用内存的内存空间的情况。这通常会直接导致Java程序崩溃。
常见的内存溢出情况包括栈溢出和堆溢出。我们常说的内存溢出如果没有特别说明都是指堆溢出,即OutOfMemory
在Java中,当程序动态分配内存(例如使用new操作符在堆中创建对象)时,没有足够的可用内存时,就会发生OOM,即OutOfMemoryError。
一般来说,内存泄漏是会导致内存溢出的,因为内存泄漏会导致部分内存一直无法被回收,久而久之就会没有内存可以分配,就会导致内存溢出。