避免了内存空间碎片的产生,空间回收后,都是连续的,缺点是需要额外空出一半的空间
该算法只适合用于频繁创建对象的区域,不适长时间存放的大对象。
标记整理
标记清除后,然后把内存碎片进行整理,好处是空间连续,利用率高。缺点是:性能很差,
要整理碎片。该算法只适合用于不频繁创建对象,但是对空间要求大的对象。
分代收集
根据堆中不同的对象,来选择使用哪种回收算法,比如新生代一般选择复制算法,老年代一
般使用标记整理算法。
什么是新生代和老年代(* * * *)
1. 新生代GC会采用轻GC(YoungGC/MajorGC),老年代GC会采用重GC(FullGC重GC会导致业务线程
停滞,一般尽量不运行)
2. 对象刚new出来的时候,存放在eden(伊甸园区)
3. 当GC执行回收,Eden区的存活的对象会放入幸存者from区
4. GC执行回收的时候,from区的存活对象会放入幸存者to区,然后把from清空,然后to和from交
换,保证to区为空
5. 每个对象都有一个年龄,每次gc执行后,对象如果存活下来,年龄+1,当年龄达到15(默认值,
可以设置)后,该对象会被放入老年代,当老年代内存不足时,会触发重GC。
什么是强引用、软引用、弱引用、虚引用(* * *)
常见异常说一说(* * * *)
1. NullPointException 空指针异常
2. ArrayIndexOutOfBoundsException 数组索引越界异常
3. ClassCastException 类型转换异常
4. NumberFormatException 数字格式化异常
5. FileNotFoundException 文件找不到异常
6. InterruptException 打断异常(调用线程的interrupt方法,如果被打断线程正在阻塞或等待会收到此
异常)
7. NotSerializableException 序列化时,被序列化的对象没有实现Serializable接口
8. Exception 异常的基类