乐趣区

关于java:JVM思维导图

JVM 思维导图

常见相干问题

类加载过程

加载、验证、筹备、解析、初始化、应用、卸载

<clinit> 与 <init>

static 代码块只会执行一次,它对应的是 <clinit> 办法

初始化对象的属性 对应的是 <init>。每次新建对象的时候,都会执行

如何替换 JDK 的类

当 Java 的原生 API 不能满足需要时,比方咱们要批改 HashMap 类,就必须要应用到 Java 的 endorsed 技术。咱们须要将本人的 HashMap 类,打包成一个 jar 包,而后放到 -Djava.endorsed.dirs 指定的目录中。留神类名和包名,应该和 JDK 自带的是一样的。然而,java.lang 包上面的类除外,因为这些都是非凡爱护的。

Java 提供了 endorsed 技术,用于替换这些类。这个目录下的 jar 包,会比 rt.jar 中的文件,优先级更高,能够被最先加载到。

GC Roots 有哪些

  • Java 线程中,以后所有正在被调用的办法的援用类型参数、局部变量、长期值等。也就是与咱们栈帧相干的各种援用。
  • 所有以后被加载的 Java 类。
  • Java 类的援用类型动态变量。
  • 运行时常量池里的援用类型常量(String 或 Class 类型)。
  • JVM 外部数据结构的一些援用,比方 sun.jvm.hotspot.memory.Universe 类。
  • 用于同步的监控对象,比方调用了对象的 wait() 办法。
  • JNI handles,包含 global handles 和 local handles。

总结如下:

  • 流动线程相干的各种援用。
  • 类的动态变量的援用。
  • JNI 援用

CMS 垃圾回收器

初始标记 Stop The World

并发标记

从新标记 Stop The World

并发清理

退出移动版