共计 1014 个字符,预计需要花费 3 分钟才能阅读完成。
什么是内存溢出,什么是内存透露?这是很多小伙伴常常问我的一个问题,明天花 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 弹架构
』可获取更多技术干货!
** 我是被编程耽搁的文艺 Tom,如果大家还有其余疑难,请在评论区留言。往期视频曾经整顿成文档模式,须要的小伙伴点个关注,搜寻下方名片!
**