内存溢出和内存泄漏

内存溢出:

当创建对象的大小大于可用内存容量的大小的时候会发生内存溢出。

假设JVM可用内存空间只剩下3M,但是我们要创建一个5M的对象,那么新建的对象就会放不进去,这个时候我们就叫内存溢出

就像300mL的水杯导入500mL的水,这时候水就会溢出

内存泄漏:

假设业务代码执行空间中创建了两个1M的对象,一起会占用2M的内存,当我们对象使用完后,这两个对象并没有释放,因此内存中就会留下2M的内存空间,一直被占用,

而我们的业务代码会被反复执行,每次执行都会留下2M空间不被释放,

反复执行多次之后,随着时间的累积就会有大量的对象用完不被释放,导致这些对象不能得到回收而且会发生内存溢出这种情况我们就叫内存泄漏

也就是说我们业务代码执行过程中,有些对象因该被回收,但是又有其他对象引用了它,GC就不能自动回收,所以该回收的垃圾对象并没有被回收,垃圾就会越来越多,可用的内存空间就会越来越少

如果可用内存无法存放新的垃圾对象的时候就会导致内存泄露,所以内存泄漏又会导致内存溢出

如何避免:我们在Code过程中,特别是一些流对象,比如说:OutputStream,Reader,BitMap,Document很容易就忘了Close,最麻烦的是还要按顺序回收,顺序错了还会产生空指针

所以在Code过程中一定要注意,当然现在有很多IDE会有智能提示,也避免了很多低级错误。

 

posted @   开源遗迹  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示