简述 CMS 与 G1 机制的区别

Java 虚拟机是如何判定热点代码的?

Java 虚拟机判定热点代码的方式有两种:
• 基于采样的热点判定
主要是虚拟机会周期性的检查各个线程的栈顶,若某个或某些方法经常出现在栈
顶,那这个方法就是“热点方法”。这种判定方式的优点是实现简单;缺点是很难精
确一个方法的热度,容易受到线程阻塞或外界因素的影响。
• 基于计数器的热点判定
主要就是虚拟机给每一个方法甚至代码块建立了一个计数器,统计方法的执行次
数,超过一定的阀值则标记为此方法为热点方法。
Hotspot 虚拟机使用的基于计数器的热点探测方法。它使用了两类计数器:方法调
用计数器和回边计数器,当到达一定的阀值是就会触发 JIT 编译。方法调用计数器:在 client 模式下的阀值是 1500 次,Server 是 10000 次,可以通过虚拟机参数: -XX:CompileThreshold=N 对其进行设置。但是 JVM 还存在热度衰减,时间段内调用方法的次数较少,计数器就减小。
回边计数器:主要统计的是方法中循环体代码执行的次数。

jvm类加载机制,每个步骤都做了哪些事 滴滴、涂鸦

  1. 加载 生成字节码传入内存
  2. 验证 验证字节码信息是否符合jvm规范
  3. 准备 为类静态变量分配默认值
  4. 解析
  5. 初始化 为类静态变量进行初始化信息处理
  6. 使用
  7. 卸载

    说一下类加载的过程,准备阶段和初始化阶段的不同

    准备 为类静态变量分配默认值
    初始化 为类静态变量赋初始值