全面理解JVM虚拟机

一、本质

虚拟机的本质是将class文件转换成操作系统具体指令。

二、JDK的类加载体系

  • 每个类加载器对加载过的类保持一个缓存。
  • 双亲委派(向上委托查找,向下委托加载)
  • 沙箱保护

打破双亲委派

  • Tomcat每个容器配置一个类加载器实现缓存隔离。
  • 通过秘钥修改Class文件(需要解密后执行)。

类和对象之间的关系

类信息存储在元数据里,对象一般存在堆中,对象指针指向元数据对应的类信息。

三、执行引擎

解释执行与编译执行

  • 解释执行:相当于同声传译。JVM接收一条指令,就将这条指令翻译成机器指令执行。
  • 编译执行:相当于提前翻译。好比领导发言前就将讲话稿翻译成对应文本,上台讲话就可以照着念,也就是JIT。(例如在HotSpot中会搜集热点代码,形成CodeCache,放到元空间中,后续执行无需编译直接就可以执行了)。
  • JDK中默认采用混合执行,它会自己检测使用哪种方式效率高,一般无需干涉。(编译执行预热慢)。
  • 编译器有C1和C2两种(默认C2),分别适用于应用端和服务端。C1编译速度快执行慢,C2相反。

静态执行与动态执行

静态执行指的是在Class文件编译过程中已经确定了执行方法,而动态执行更多关联到invokedynamic指令(函数式编程)。

四、GC垃圾回收

GC日志参考配置:

java 复制代码
-Xms60m -Xmx60m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -Xloggc:./gc.log
相关推荐
阿哉几秒前
一次 Lombok 静默失效排查:JDK 23 注解处理默认策略变更引发的满屏「找不到符号」
java
纪伊路上盛名在2 分钟前
了解一点Docker
java·docker·容器
掘金者阿豪4 分钟前
Let‘s Encrypt 证书到底会不会自动续期?从一次服务器迁移后的证书排查说起
后端
码农阿豪4 分钟前
Seedance 2.0/2.5 虚拟素材能跨 Key 共用吗?一次讲清 Asset ID、账号隔离与 SaaS 素材架构
java·运维·架构
Meta399 分钟前
Java八股文之Spring Boot中解决Redis和MySQL的数据一致性问题
java·spring boot·redis
ly76899 分钟前
JVM 内存屏障与可见性:从 volatile 到 JSR-133 的底层实现
jvm·jit·volatile·内存屏障·jmm·jsr-133
joinwell5210 分钟前
Agent 中断后,原任务如何安全接管?从恢复标记到效果事实
人工智能·后端·架构
sp4223 分钟前
羽量级的 Java Bean 实体校验器
后端
魔兽大山哥29 分钟前
【NL2SQL 实战 07】LIMIT 不是小事:默认 100 行背后的产品判断
后端
qq_3391911432 分钟前
go cpu占比高排查,cpu100%排查,go pprof cpu命令
开发语言·后端·golang