后台开发知识点总结(二)JVM虚拟机

Java类加载过程?

加载:类中的方法被放到方法区、堆中生成一个对象表示该类、
链接:验证(保证符合jvm规范,防止安全问题)、准备(为类变量(静态变量)分配内存,分配的内存在方法区中)、解析(将虚拟机常量池中的符号饮用转变为直接引用)
初始化:执行类构造器方法、如果父类未初始化,先初始化父类。

有几种类加载器?

引导类加载器(Bootstrap Class Loader,加载Java核心库)、扩展类加载器(Extensions Class Loader,加载Java扩展库)、应用程序类加载器(Application Class Loader,加载 Class Path 下的应用程序类)、自定义类加载器(主要是为了加密解密某些类的字节码)。

什么时候触发GC?

JavaGC分为两种,一种是ScavengeGC,另一种是FullGC。前者只对年轻代进行回收,后者对整个堆进行回收(包括年轻代、老年代和持久代)。
当Eden申请内存失败时,触发ScavengeGC。
当老年代(Tenured)被写满、持久代(Perm)被写满、System.gc() 被显示调用以及上一次GC之后Heap各域分配策略出现变化时,触发FullGC。

GC有几种算法?

引用计数法(已弃用)、标记清除法、标记复制法(survivor区)、标记压缩法(老年代)、分代回收法。

Java的垃圾收集器都有哪些?

Serial收集器(串行收集器)、Parallel 收集器(并行收集器)、CMS收集器(并发收集器)、G1收集器。

G1回收器的特点?

空间整合(G1采用标记压缩算法,不会出现分配大对象没有连续空间的情况)和可预测停顿(长度为 M ms的时间内,垃圾收集的时间不得超过 N ms)。

CMS收集器的特点?

并发收集、低停顿。但是会产生内存碎片(标记清除法),每进行几次 GC 就要进行一次碎片整理。