1.Java 中有哪些垃圾回收算法?
回答重点
关于垃圾回收算法,其实不用死记硬背,它们本质上就是处理内存碎片的几种不同策略。
你就想象成我们在打扫房间,主要有这么三种流派:
1)标记-清除算法(Mark-Sweep),这是最基础的流派:
它的逻辑很简单:先遍历一遍,把有用的东西打个勾(标记),然后把没打勾的垃圾直接扔掉(清除)。 但这有个大坑,就是内存碎片。
你想啊,你把垃圾扔了,空出来的地方东一块西一块的,像蜂窝煤一样。下次想放个大件家具(大对象),明明总空间够,但就是找不到一块完整的地儿,这就很尴尬。
 100%为了解决碎片问题,就有了复制算法。
2)复制算法(Copying):
它把内存一分为二,平时只用一半。回收的时候,把活着的对象全部复制到另一半去,整整齐齐排好,然后把原来那一半直接清空。
好处是快,而且绝对没有碎片。坏处也很明显,太浪费空间了,得空着一半地盘不能用。
 100%不过,在 Java 的新生代里,因为绝大部分对象都是