JAVA - 内存泄漏和内存溢出

内存泄漏(memory leak )

程序运行完后,没有释放所占用的内存空间(程序中有引用没有释放,不能被GC回收),本该被回收的对象不能被回收而停留在堆内存中

内存溢出(out of memory):

程序申请内存时,没有足够的内存提供给申请者,导致无法正常存储到内存中

比如提供一个int类型的存储空间,却存储long型数据就会发生内存溢出

内存泄漏和内存溢出的关系

内存泄漏是造成内存溢出的主要原因之一

系统中的内存是有限的,过度占用资源而不及时释放(内存泄漏),最后会导致内存不足,最终出现内存溢出

常见的内存泄漏

1、单例造成的内存泄漏

由于单例的静态特性使得其生命周期和应用的生命周期一样长,如果一个对象已经不再需要使用了,而单例对象还持有该对象的引用,就会使得该对象不能被正常回收,从而导致了内存泄漏

2、资源未关闭造成的内存泄漏

一些资源未关闭也会导致内存泄漏,比如数据库连接,IO流的连接,使用后都必须在finally中close

 


 

你可能感兴趣的:(JAVA,java,开发语言)