内存抖动造成溢出原因 : 对象频繁分配 , 回收 , 会大量造成内存的空隙 , 这些空隙很小无法分配大块内存 , 当整个内存都是这种空隙时 , 无法为大块内存分配空间 , 就造成了 OOM 异常 ;
3...GC 垃圾回收之前 , 需要对内存对象进行采集 , 不同的虚拟机使用不同的垃圾回收算法 , 常用的垃圾回收算法 :
标记-清除算法 ( mark-sweep )
复制算法
标记-压缩算法
分代收集算法...可用内存
标记-清除算法 ( mark-sweep ) 算法中 , 首先标记出可回收对象 , 标记完成之后 , 统一回收 ;
回收完毕后 , 存活的对象仍然保持在原来的位置 , 可用内存基本支离破碎...复制算法 : 将可用内存 , 分为两个想等于内存区域块 , 区域
1
和 区域
2
, 使用时只使用其中的一个区域 ;
垃圾回收前 , 只使用区域
1
的内存
垃圾回收后 , 将区域
1...弊端 :
该垃圾回收算法缺陷也很明显 , 就是会浪费一半内存空间 ;
有些对象的声明周期等同于应用声明周期 , 如 Android 中的 Application 等 , 该内存对象根本不释放 , 持续往返复制这类长生存期的对象