什么是内存溢出 , 什么是内存泄漏?这是很多小伙伴经常问我的一个问题 , 今天花3分钟时间给大家介绍一下 。先来介绍什么是内存溢出?
1、什么是内存溢出?发生内存溢出 。
我们来看到右侧的区域 , 假设我们JVM中可用的内存空间只剩下3M , 但是我们要创建一个5M的对象 , 那么 , 新创建的对象就放不进去了 。这个时候 , 我们就叫做内存溢出 。就好比是一个容量只有300ml的水杯 , 我们硬要往里面倒500ml的水 , 这时候 , 水就会溢出 , 倒不进去了 , 这就相当于是内存的溢出 。
那么 , 内存泄漏又是怎么回事呢?
2、什么是内存泄漏?还是来看这张图吧 ,
文章插图
它代表业务代码执行时 , 所需要占用的内存空间 。这段业务代码中创建了两个1M的对象 , 一起会占用2M内存 。当对象使用完之后 , 这两个对象并没有释放 , 因此内存中会留下2M的内存空间一直被占用 。而我们的业务代码在程序中会被反复执行 , 每次执行都会留下2M不被释放 , 反复执行多次之后 , 随着时间的累积 , 就会有大量的对象用完不被释放 , 导致这些对象不能得到回收而发生内存溢出 , 这种情况就叫做内存泄漏 。
也就说 , 在我们的业务代码执行过程中 , 有些对象它应该被回收 , 但是又有其他对象引用引用它 , 因此 , GC不能自动回收 。所以 , 该回收的垃圾对象没有被回收 , 垃圾对象越堆越多 , 可用内存越来越少 , 若可用内存无法存放新的垃圾对象 , 最终导致内存泄漏 。内存泄漏最终会导致内存溢出 。
3、如何避免?
我们在Code过程中 , 特别是些一些流对象 ,
文章插图
比如OutputStream , Reader , BitMap , Document , 很容易忘了Close 。最麻烦的是还要顺序回收 , 顺序错了还产生空指针 , 所以 , 大家在Code过程一定要注意 , 当然 , 现在有很多IDE会智能提示 , 也避免了很多低级错误 。
以上就是我对内存溢出和内存泄漏的分析 , 听懂了的小伙伴 , 请关注点个赞 , 下次不迷路 。
S信【Tom】或【666】即可免费领取需要更多干货内容 , 还有海量面试资料 , 只弹干货不惨水!
我是被编程耽误的文艺Tom , 如果大家还有其他疑问 , 请在评论区留言 。关注微信公众号『 Tom弹架构 』可获取更多技术干货!往期视频已经整理成文档形式 , 需要的小伙伴点个关注 , 搜索下方名片!
文章插图
【内存泄露的直接表现 什么是内存泄漏的表现】
- 氧的相对分子质量
- 音效最好的音响品牌有哪些名字 音效最好的音响品牌有哪些
- 北京的兔儿爷是什么来历? 北京话兔儿爷是什么意思
- 最经典的对唱情歌 经典情歌对唱10首
- 手机怎样录制当下播放的视频
- 关于9月的名言
- 蒜香吊炉花生的做法怎么做
- 第一人称的好处
- 蒜香鸡翅的腌制方法
- 聪明的人七大特征是什么