【你问我答】OOM发生的原因是哪些?该如何避免?

问题描述:

OOM发生的原因是哪些?该如何避免?

回答有奖:

选取一位认真回答问题的牛友,赠送200牛币!
▶回答尽量有自己的思考,不要单纯的只是复制粘贴定理定义,或者他人blog哦~

你问我答问题汇总:点击进入
关注你问我答栏目:点击关注

你问我答 - 答问题,成大佬,拿牛币!
你问我答是牛客新栏目,每周1期几个面试中真实遇到的问题,
牛友在问题贴下留下自己的知识,经验与见解,
帮助更多牛友了解更多技术相关知识!
#悬赏##Java工程师##面试题目#
全部评论
https://blog.csdn.net/mocas_wang/article/details/109604710博客,拉倒最下边,有答案
点赞 回复 分享
发布于 2020-12-08 23:19
一、什么是OOM OOM(out of memory)即内存泄露。一个程序中,已经不需要使用某个对象,但是因为仍然有引用指向它垃圾回收器就无法回收它,当该对象占用的内存无法被回收时,就容易造成内存泄露。 二、出现内存泄露原因 1.资源对象没关闭造成的内存泄露,try catch finally中将资源回收放到finally语句可以有效避免OOM。资源性对象比如: 1-1,Cursor 1-2,调用registerReceiver后未调用unregisterReceiver() 1-3,未关闭InputStream/OutputStream 1-4,Bitmap使用后未调用recycle()   2.作用域不一样,导致对象不能被垃圾回收器回收,比如: 2-1,非静态内部类会隐式地持有外部类的引用, 2-2,Context泄露 概括一下,避免Context相关的内存泄露,记住以下事情:    1、 不要保留对Context-Activity长时间的引用(对Activity的引用的时候,必须确保拥有和Activity一样的生命周期)    2、尝试使用Context-Application来替代Context-Activity 3、如果你不想控制内部类的生命周期,应避免在Activity中使用非静态的内部类,而应该使用静态的内部类,并在其中创建一个对Activity的弱引用。       这种情况的解决办法是使用一个静态的内部类,其中拥有对外部类的WeakReference。 2-3,Thread 引用其他对象也容易出现对象泄露。 2-4,onReceive方法里执行了太多的操作 3.内存压力过大   3-1,图片资源加载过多,超过内存使用空间,例如Bitmap 的使用   3-2,重复创建view,listview应该使用convertview和viewholder   三、如何避免内存泄露 1.使用缓存技术,比如LruCache、DiskLruCache、对象重复并且频繁调用可以考虑对象池 2.对于引用生命周期不一样的对象,可以用软引用或弱引用SoftReferner WeakReferner 3.对于资源对象 使用finally 强制关闭 4.内存压力过大就要统一的管理内存
点赞 回复 分享
发布于 2020-12-09 19:54
(1)什么是内存泄漏? 内存泄漏是指对象不再被应用程序使用,但是垃圾回收器却不能移除它们,因为它们正在被引用。 举个例子:食堂吃完饭需要自己收盘,如果没有收盘,会有服务员帮忙收取,收取之后擦擦桌子,下一桌客人就可以来了(诶好像当时开心餐厅哈哈哈哈哈)。但是如果有客人吃完了,占着桌子看剧不走,那桌子就没法给下一个客人用了。如果今儿赶巧了,一帮人都来餐厅吃饭,占满了桌子,吃完了还都不走,这个餐厅不就没生意了吗?这就是内存泄漏的问题。 (2)如何解决内存泄漏? (2-1)使用临时变量的时候,让引用变量在退出活动域后自动设置为null,并减少静态变量的声明。相当于每个桌子上提前摆一个牌,写着“2小时内离场”,这样如果客人吃完饭赖在桌子上,我就有理由“送客”了。 (2-2)避免集中创建对象尤其是大对象,如果可以的话尽量使用流操作。相当于避免所有客人都同时到场同时点菜,这样会导致后面来的客人一看没位置全走了。反之,如果分批把客人迎进来,每个时间段就都会有客人离开腾出空桌子,也会有新客人进来。 (2-3)尽量运用对象池技术以提高系统性能,相当于把桌子变大一点 (2-4) 特别地,程序进行字符串处理时,尽量避免使用String,而应使用StringBuffer。
点赞 回复 分享
发布于 2020-12-14 21:34

相关推荐

从24年初开学开始接触到前端,和实验室几个同学一起学习,可似乎我总比他们慢一步,每每学完一个地方,我掌握的程度好像都不比他们,第一次实验室的任务实战,我两眼一抹黑,完全不知道从何下手,而他们却是游刃有余,可我当时没有丧气,只有一个念头,既然学习能力不如他们,那我就拿更多的时间去学,于是我把打游戏,运动锻炼的时间也拿来学习。到了暑假,实验室一起做项目,为了可以更好的参与进去,于是我暑假开始留校和同学师哥一起做项目,每天早上九点多去实验室,晚上十点多回宿舍,校田径队的训练没有去,中间也只回家待了一周。到暑假结束开学之后,一位很优秀的师哥拿到了几个offer,我从他身上看到了希望,双非本科就业的希望...
offer求求哩:我的评价是认知低,建议多看书,认知低的一个表现是人生仿佛没考上大学就是进厂,考上了就是考研考公找工作。股市里有一个很有意思的故事,说的是当门口大妈都在谈论股票的时候,说明行情已经见顶了。当你的父母在某些事上没有成功却支持你说明事情可能已经不可靠了,但在某些事上反对你,说明这件事可能还有成功的可能。(仅个人观点)😆😆
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务