给我个offer把 level
获赞
9
粉丝
1
关注
0
看过 TA
0
北京邮电大学
2021
Java
IP属地:北京
暂未填写个人简介
私信
关注
2020-09-21 17:55
已编辑
北京邮电大学 Java
算法题:有序数组找某个值第一次和最后一次出现的位置   讲一下什么是GC,为什么需要GC?   有哪些常见的内存泄漏场景?(没答上来,扯了一句ThreadLocal如何解决内存泄漏的)   如何判断一个对象可不可以被回收?   JDK 8默认的垃圾回收器是什么?(答错了,答成CMS了,然后就接着问了CMS)   为什么要分代回收?分代回收背后的思想?   有哪些GC算法?为什么新生代采用标记复制?为什么老年代采用标记整理和标记清除?   标记复制和标记整理算法的对比?   常用的集合框架有哪些?(搭了HashMap,接着问HashMap)   为什么HashMap的查找时间复杂度是O(1)? ...
爱吃喵的柚子君:第三题: 1.非静态内部类的静态实例 非静态内部类会持有外部类的引用,如果非静态内部类的实例是静态的,就会长期的维持着外部类的引用,组织被系统回收,解决办法是使用静态内部类 2.多线程相关的匿名内部类和非静态内部类 匿名内部类同样会持有外部类的引用,如果在线程中执行耗时操作就有可能发生内存泄漏,导致外部类无法被回收,直到耗时任务结束,解决办法是在页面退出时结束线程中的任务 3.Handler内存泄漏 Handler导致的内存泄漏Handler内部message是被存储在MessageQueue中的,有些message不能马上被处理,存在的时间会很长,导致handler无法被回收,如果handler是非静态的,就会导致它的外部类无法被回收,解决办法是1.使用静态handler,外部类引用使用弱引用处理2.在退出页面时移除消息队列中的消息 4.Context导致内存泄漏 根据场景确定使用Activity的Context还是Application的Context,因为二者生命周期不同,对于不必须使用Activity的Context的场景(Dialog),一律采用Application的Context,单例模式是最常见的发生此泄漏的场景,比如传入一个Activity的Context被静态类引用,导致无法回收 5.静态View导致泄漏 使用静态View可以避免每次启动Activity都去读取并渲染View,但是静态View会持有Activity的引用,导致无法回收,解决办法是在Activity销毁的时候将静态View设置为null(View一旦被加载到界面中将会持有一个Context对象的引用,在这个例子中,这个context对象是我们的Activity,声明一个静态变量引用这个View,也就引用了activity) 6.WebView导致的内存泄漏 WebView只要使用一次,内存就不会被释放,所以WebView都存在内存泄漏的问题,通常的解决办法是为WebView单开一个进程,使用AIDL进行通信,根据业务需求在合适的时机释放掉 7.资源对象未关闭导致 如Cursor,File等,内部往往都使用了缓冲,会造成内存泄漏,一定要确保关闭它并将引用置为null 8.集合中的对象未清理 集合用于保存对象,如果集合越来越大,不进行合理的清理,尤其是入股集合是静态的
投递小米集团等公司9个岗位 >
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务