美文网首页
(二十八)内存泄漏面试问题

(二十八)内存泄漏面试问题

作者: lkmc2 | 来源:发表于2017-08-22 11:51 被阅读81次

一、Java内存泄漏基础知识

内存泄漏 :该被释放的对象没有被释放,一直被某些对象或者某些实例持有,导致不能垃圾回收。

1.java内存的分配策略

1)静态存储区 :主要存放静态数据、全局变量等等。程序编译的时候已经分配好了,在静态存储区中存储的变量,在整个程序运行期间都存在。

2)栈区 :在方法执行的时候,方法体内的局部变量会在栈上创建内存空间,并在方法执行结束后,这些变量和持有的内存会被自动释放。因为栈内存分配运算内置于处理器当中,所以效率很高,但是栈区的内存空间容量有限。

3)堆区 :动态内存分配,通常就是new对象出来的内存,不使用的时候将会由java的内存回收器来负责回收。

2.java是如何管理内存的

需要通过关键词new为对象申请内存空间,所有的对象都是在堆中分配内存空间的。内存的释放是由GC垃圾回收器来执行的。内存的分配是由开发人员完成的,内存的释放是由GC自动完成的。

3.java中的内存泄漏

内存泄漏是指无用对象(不再使用的对象)持续占有内存或者无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄漏。

二、Android内存泄漏基础知识

1.单例 : 应持有Application的引用,而不是Activity的引用。

2.匿名内部类 :匿名内部类应该设置成静态的,不然会一直持有外部类的引用。

3.Handler :应自定义一个静态Handler,在该Handler的内部持有传入Content的弱引用。

private MyHandler mHandler = new MyHandler(this);

private static class MyHandler extends Handler {
  private WeakReference<Context> reference;
  
  public MyHandler(Context context) {
    reference = new WeakReference<>(context);
  }
  
  @Override
  public void handlerMessage(Message msg) {
    MainActivity activity = (MainActivity) reference.get();
    if(activity != null) {
      activity.mTextView.setText("");
    }
  }
}

4.避免使用static变量 :可以使用懒加载。

5.资源未关闭造成的内存泄漏 :如文档、游标、Bitmap等资源,在Activity要销毁的时候,需关闭和注销这些资源。

6.AsyncTask造成的内存泄漏 :可以在onDestroy()方法中调用AsyncTask的cancel方法。

相关文章

  • 安卓LeakCanary原理解析

    前几天面试,问到了我内存泄漏的相关问题,顺其自然问到了内存泄漏的检测工具LeakCanary的工作原理。当时不会,...

  • (二十八)内存泄漏面试问题

    一、Java内存泄漏基础知识 内存泄漏 :该被释放的对象没有被释放,一直被某些对象或者某些实例持有,导致不能垃圾回...

  • 记录电商公司面试

    面试记录 问了常见的内存泄漏常见有哪些 Handler的内存泄漏情况 activity,window,view之间...

  • Xcode调试工具

    一.静态内存分析工具 编译阶段查找内存泄漏等问题 1.常见内存泄漏问题 常见的内存泄漏除了循环引用,CoreFou...

  • iOS | 面试 - 内存管理

    iOS | 面试知识整理 - 内存管理(五) 1.什么是内存泄漏? 内存泄漏指动态分配内存的对象在使用完后没有被...

  • 每日一题: 内存优化

    每日一题: 内存优化 内存泄漏检测MAT、DDMS 等内存查看工具 面试率: ★★★★☆ 面试提醒 内存优化?现在...

  • 链接收藏

    iOS面试题 野指针 使用了释放的内存 内存泄漏 内存没有释放

  • 三个方法帮助解决Android内存泄漏问题

    三个方法帮助解决Android内存泄漏问题 最近自己遇到了好几个内存泄漏的问题,也帮同事解决了几个内存泄漏的问题记...

  • 安卓内存泄漏

    Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...

  • Part1_Android内存泄漏总结

    Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...

网友评论

      本文标题:(二十八)内存泄漏面试问题

      本文链接:https://www.haomeiwen.com/subject/trzkdxtx.html