全面理解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
相关推荐
gelald1 分钟前
Spring - AOP 原理
java·后端·spring
zwqwyq2 分钟前
springboot与springcloud对应版本
java·spring boot·spring cloud
okiseethenwhat4 分钟前
Java 内部类详解
java·开发语言
Flittly6 分钟前
【SpringAIAlibaba新手村系列】(7)结构化输出与对象映射
java·spring boot·agent
用户791406796839312 分钟前
springmvc的核心组件有哪些
后端
用户791406796839313 分钟前
Spring Boot 自动配置的完整启动流程
后端
元俭15 分钟前
【Eino 框架入门】Interrupt/Resume 中断恢复:给 Agent 加个"审批关卡"
后端
未来龙皇小蓝17 分钟前
Java安全通信:RSA签名 + AES混合加密详解
java·开发语言·安全·web安全
元俭18 分钟前
【Eino 框架入门】Graph Tool 复杂工作流:把多步骤流水线封装成一个 Tool
后端
XDOC18 分钟前
使用docx4j将Word文档转换为PDF
java