内存泄漏及管理(01)-简述GC机制和检测工具

来源:互联网 发布:老友网南宁网络电视台 编辑:程序博客网 时间:2024/04/30 15:01

简述GC机制

JVM(Java虚拟机)
GC(垃圾回收器)

1. Java中的内存分配

  • 静态存储区,编译时就分配好,在程序的整个运行过程中都存在。常量、静态变量。
  • 栈区,当方法执行时,会在栈区内存中创建方法中的局部变量,方法结束后自动释放。
  • 堆区,通常存在new对象,由GC回收。

2. Java中引用简介

  • 强引用(StrongReference)
    1. JVM宁可抛出OOM,也不会让GC回收具有强引用的对象;
    2. 如果想中断强引用和某个对象之间的联系,可以显式的将引用赋值为null,这样JVM会在何时的时候回收该对象。
  • 软引用(SoftReference)
    1. 只有在内存空间不足时,才会被回收的对象;
    2. 利用这一特性我们可以用它来实现图片、网页、临时数据的缓存。
  • 弱引用(WeakReference)
    1. 触发GC时,一旦发现了只有弱引用的对象时,不管JVM内存如何都会被回收的对象。
  • 虚引用(PhantomReference)
    1. 任何时候都可以被GC回收。

3. 何为内存泄漏

  • 在C/C++中,所有的内存都需要我们手动申请、使用、释放。可以讲几乎所有和内存操作的东西全都是手动的。
  • 在Java中,存在了一套GC机制,可以自动回收无用的内存。
  • android虚拟机中垃圾回收使用的是根检索算法,GC会从根节点(GC Root)开始往下遍历,直接遍历或者间接遍历都没有遍历到的引用会被GC认为是垃圾,会被GC回收。
  • java中的内存泄露是指一个无用对象持续占有内存或无用对象的内存得不到及时的释放,从而造成的内存控件的浪费称为内存泄露。也就是说一个你不需要的对象竟然还占着内存,还不释放,GC也不顶用。
  • 内存泄漏一般是不恰当的强引用造成的。

内存泄漏会频发的触发GC导致程序卡顿,当内存泄漏到一定程度是还可能导致OOM。


检测工具

leakcanary工具

内存泄漏的常见场景和处理可见:
内存泄漏及管理(02)-内存泄漏的分析和处理

0 0
原创粉丝点击