全面理解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
相关推荐
2301_822382762 分钟前
开发一个简单的Python计算器
jvm·数据库·python
独自破碎E5 分钟前
LCR005-最大单词长度乘积
java·开发语言
2501_920999275 分钟前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
码农阿豪8 分钟前
影刀RPA与Java融合实践:打造高效智能的高铁票务解决方案
java·python·rpa
龚礼鹏14 分钟前
图像显示框架十一——BufferQueue的工作流程(基于Android 15源码分析)
java·网络·数据库
爬山算法15 分钟前
Hibernate(72)如何在NoSQL数据库中使用Hibernate?
java·nosql·hibernate
毕设源码-赖学姐16 分钟前
【开题答辩全过程】以 基于spring boot的国学诗词网站设计与实现--为例,包含答辩的问题和答案
java·spring boot·后端
diediedei25 分钟前
用Pygame开发你的第一个小游戏
jvm·数据库·python
2301_7903009627 分钟前
用Python制作一个文字冒险游戏
jvm·数据库·python
naruto_lnq31 分钟前
使用Seaborn绘制统计图形:更美更简单
jvm·数据库·python