④. 复制算法(Copying)
- ①. 核心思想:将活着的内存空间分为两块,每次只使用其中一块,在垃圾回收时将正在.使用的内存中的存活对象复制到未被使用的内存块中,之后清除正在使用的内存块中的所有对象,交换两个内存的角色,最后完成垃圾回收。
- ②. 描述(重点掌握)
③. 一般过程(图解)
④. 优缺点 掌握
:①.没有标记和清除过程,实现简单,运行高效 ②. 不会产生内存碎片,且对象完整不丢
缺点:①. 浪费了10%的空间 ②. 对于G1这种分拆成为大量region的GC,复制而不是移动,意
味着GC需要维护region之间对象引用关系,不管是内存占用或者时间开销也不小。
注意:复制算法需要复制的存活对象数量并不会太大,或者说非常低才行。因为新生代中的
对象一般都是朝生夕死的,在新生代中使用复制算法是非常好的
⑤. 注意:是当伊甸园区满后,会触发minjor gc,进行垃圾的回收
⑤. 标记清除算法(Mark一Sweep)
①. 标记一清除算法(Mark一Sweep)是一种非常基础和常见的垃圾收集算法,该算法被J . McCarthy等人在1960年提出并并应用于Lisp语言
②. 标记:Collector(垃圾回收器)从引用根节点开始遍历,标记所有被引用的对象。一般是在对象的Header中记录为可达对象
③. 清除: Collector(垃圾回收器)对堆内存从头到尾进行线性的遍历,如果发现某个对象在其Header中没有标记为可达对象,则将其回收
④. 图解: CMS使用这种方式
⑤. 优缺点
优:不需要额外的空间
缺点:①.两次扫描,耗时严重 ②.清理出来的空闲内存不连续,会产生内存碎片,需要维护一个空闲列表 ③.效率比较低:递归与全堆对象遍历两次(经历了两次遍历)
⑥. 注意:这里所谓的清除并不是真的置空,而是把需要清除的对象地址保存在空闲的地址列表里。下次有新对象需要加载时,判断垃圾的位置空间是否够,如果够,就存放