一、Java8 默认使用的垃圾收集器是什么?
Java8 版本的Hotspot JVM 默认情况下使用的是并行垃圾收集器(Parallel GC),其他厂商提供 JDK8 基本上也默认使用并行垃圾收集器。
二、什么是并行垃圾收集?
并行垃圾收集,是指使用多个 GC worker 线程并行的执行垃圾收集,能充分利用多核 CPU 的能力,缩短垃圾收集的暂停时间。
除了单线程的GC,其他的垃圾收集器,比如 PS、CMS、G1 等新的垃圾收集器都使用了多线程来并行执行 GC 工作。
三、什么是 STW ? 什么是安全点? 什么是安全区域?
因为 GC 过程中,所有应用线程需要暂停之后才能执行 GC,这个时候称为 STW,或者叫做 GC暂停。
安全点
安全区域
四、什么类加载和类加载器?
一个类从被加载到 Java 虚拟机内存开始,到卸载出内存为止,它的整个生命周期将会经历 加载、验证、准备、解析、初始化、使用、卸载 七个阶段,其中验证、准备、解析三个部分统称为连接。
加载 loading 阶段是整个类加载(class loading)过程的一个阶段
加载阶段虚拟机需要完成以下3件事情:
1、通过一个类的全限定名来获取定义此类的二进制字节流
2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3、在内存中生成一个 java,lang,Class 对象。作为方法区这个类的各种数据访问入口
五、什么是双亲委派机制?它有什么作用?
双亲委派机制的意思是除了顶层的启动类加载器之外,其余的类加载器,在加载之前,都会委派给它的父加载器进行加载,这样一层一层向上传递,直到祖先们都无法胜任,它才会真正的加载。
通过带有优先级的层次关系可以避免类的重复加载。
保证 Java 程序安全稳定运行,Java 核心API定义类型不会被随意替换。
六、G1 收集器有哪些特点?
G1 的全称是 Garbage-First,意为垃圾优先,那一块垃圾最多就优先清除它。
1、空间整合
2、多线程 + 并发 + 可预测停顿
GC线程和业务线程可以同时工作,减少STW的时间
七、什么CMS垃圾收集器?
CMS全称Concurrent Mark Sweep,是一款并发的、主要使用标记-清除算法的垃圾回收器,该回收器是针对老年代垃圾回收的,在初始化阶段会导致STW。
八、什么是JVM,与JDK有什么区别?
JVM全称是 Java Virtual Mechine,全称是 Java虚拟机,JVM是Java程序的底层平台,与Java支持库一起构成了Java程序的执行环境。
JVM 总体分成JVM规范和JVM实现两个部分。
JVM与JDK的区别:
JRE = JVM + Java 标准库
JDK = JRE + 开发调试诊断工具
九、什么是堆内存?堆内存包括那些部分?
堆是JVM最大的内存区域,我们申请的几乎所有对象都是在这里存储的,以Hotspot为例,堆空间为了方便GC模块进行对象分配和回收,把堆空间划分为 新生代(Eden + s0 + s1)和老年代。
新生代才用复制算法回收垃圾,新生代一般经历15次回收后,如果对象还存在,则存放在老年代,老年代一般采用垃圾整理算法或垃圾清除算法回收垃圾对象。