为什么会内存泄漏和内存溢出?理解这一篇足以闯世界

 我来答
机器1718
2022-06-28 · TA获得超过6826个赞
知道小有建树答主
回答量:2805
采纳率:99%
帮助的人:159万
展开全部
java 最牛逼的一个特性就是垃圾回收机制,最为java程序员很幸福,只管new就行了,反正jvm会帮我们回收。

既然jvm自动管理了,那怎么会出现内存泄漏的?难不成他们有BUG?不要着急,听我慢慢道来。

   内存溢出:程序在申请内存的时候没有足够内存空间给他。    

   内存泄漏:jvm给了1024M内存,其中一个对象用了512M内存,但是由于某些程序原因,导致这512M内存一直没有被释放,这就叫内存泄漏。内存泄漏堆积会导致内存溢出的,无论你又多大,迟早会被耗干净的。也就是站着茅坑不拉屎

内存泄漏会导致内存溢出,但是内存溢出不一定是因为内存泄漏。

1.长的生命周期对象引用短的生命周期对象。当短的生命周期结束的时候,依然被引用着不能被回收。

2.静态集合类引起的内存泄漏,因为静态集合的生命周期和JVM一致,所以静态集合不会被回收,他所引用的对象不能被释放。

3.单例模式,他和静态集合导致的内存泄漏原因类似,因为单例模式的生命周期和JVM的生命周期一样长,所以单例对象如果引用外部的对象,那么这个对象也不会被释放。

4.数据连接,JDBC,IO,Socket等,我们在用他们的时候都会在尾加上close,意思就是释放他,否则不会被GC回收。

5.加载数据量过大,这个比较常见,也是容易造成程序直接崩溃的常见原因

       
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式