java中有哪几块内存需要进行垃圾回收?
- 程序计数器、java虚拟机栈、本地方法栈是线程不共享,不需要垃圾回收
- 方法区由jsp回收,程序员不需要管
- 堆是由垃圾回收器负责回收
有哪几种常见的引用类型?
- 强引用:最常见的引用方式,由可达性分析算法来判断
- 软引用:对象在没有强引用情况下,内存不足时会回收
- 弱引用:对象在没有强引用情况下会直接回收
- 虚引用:通过虚引用知道对象被回收了
- 终结器引用:对象回收时可以自救,不建议使用
由哪几种常见的垃圾回收算法?
- 标记-清除算法:标记之后再清除,容易产生内存碎片
- 复制算法:从一块区域复制到另一块区域容易造成只能使用一部分内存
- 标记-整理算法:标记之后将存活的对象推到一边,对象会移动,效率不高
- 分代GC:将内存区域划分为年轻代、幸存者区、老年代进行回收,可以使用多种回收算法
常见的垃圾回收器有哪些?
- Seral+Seral Old:单线程回收,主要适用于单核CPU场景
- ParNew+CMS:暂停时间较短,适用于大型互联网应用中与用户交互的部分
- Parallel Scavenge+Parallel Old:吞吐量高,适用于后台进行大量数据操作
- G1:适用于较大的堆,具有可控的暂停时间