JVM 垃圾收集算法

@bingoogolapple 2017-07-24 09:44:35发表于 bingoogolapple/bingoogolapple.github.io Java

垃圾收集简介

手动内存管理

  • 存储共享数据,必须显式地进行内存分配和内存释放。如果忘记释放, 则对应的那块内存不能再次使用。内存一直被占着,却不再使用,这种情况就称为内存泄漏

智能指针

  • 第一代自动垃圾收集算法, 使用的是引用计数。针对每个对象, 只需要记住被引用的次数, 当引用计数变为0时, 这个对象就可以被安全地回收了
  • 循环引用,导致引用计数一直大于零,还是会出现内存泄漏的情况

标记-清除

  • 垃圾收集根元素(Garbage Collection Roots)包括:局部变量(Local variables)、活动线程(Active threads)、静态域(Static fields)、JNI引用(JNI references)
  • Marking(标记):遍历所有的可达对象,并在本地内存(native)中分门别类记下
  • Sweeping(清除):这一步保证了不可达对象所占用的内存在之后进行内存分配时可以重用