基于Copy的GC算法的特点 #
- 没有内存碎片对象之间紧密排列,中间没有空隙,也就是没有内存碎片;
- 分配效率非常高因为每次分配对象都是把指针简单后移即可,操作非常少,所以效率高;
- 回收效率取决于存活对象比例如果存活对象比较多,那么回收的效率就差,如果存活的对象少,则回收效率高。如果对象的生命周期比较短,也就是说存活的时候比较短,那么在进行 GC 的时候,存活的对象就会比较少,这种情况下采用基于 copy 的 GC 算法是比较高效的;
- 内存利用率并不高因为在任一时刻总有一部分空间是无非被使用的,Scavenge 算法也只能缓解这个问题,而不能彻底解决,这是由算法的设计所决定的;
- 需要暂停 copy 算法需要搬移对象,所以需要业务线程暂停。