星球狂想战队|清华扫地僧带你深入JVM调优实战,思路清晰,精通简直太容易
1.前言Java作为一种热门开发语言 , 在行业知名度也可谓是“家喻户晓” 。 在使用的道友 , 也是不计其数 。 所以 , 应该都听说过一句经典语句:Write once , run anywhere 。 而为什么java能达到如此强大的存在呢 , 这离不开我们今天要复习的重点-java虚拟机(JVM) 。
2.JVM介绍2.1 JVM是什么JVM就是Java虚拟机(Java virtual machine) 。 JVM是JRE的一部分 , 它是一个虚构出来的计算机 , 是通过在实际的计算机上仿真模拟各种计算机功能来实现的 。 JVM有自己完善的硬件架构 , 如处理器、堆栈、寄存器等 , 还具有相应的指令系统 。
2.2 JVM工作流程咱们先看两张解析图:
咱们平时编写java程序后 , 大体工作流程就如上图 。 下面我们再进一步详解 , 请看下图:
简单解释一下上面这个流程图:
- 程序运行时 , java文件通过java编译器转译成class文件
- class文件通过类装载器以及java类库 , 装载到JVM中
- JVM通过解释器 , 即时编译器等将装载进来的class文件进行编译操作 。 如内存分配 , 运行处理等
- 最后JVM将相应操作与操作系统、硬件交互
2.3.1 类加载器类的加载由类加载器完成 , 类加载器通常由JVM提供 , 这些类加载器也是前面所有程序运行的基础 , JVM提供的这些类加载器通常被称为系统类加载器 。 除此之外 , 开发者可以通过继承ClassLoader基类来创建自己的类加载器 。
通过流程图看看类加载器做了哪些事:
【星球狂想战队|清华扫地僧带你深入JVM调优实战,思路清晰,精通简直太容易】负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class , 由C++实现 , 不是ClassLoader子类
②Extension ClassLoader
负责加载java平台中扩展功能的一些jar包 , 包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包
③App ClassLoader
负责记载classpath中指定的jar包及目录中class
④Custom ClassLoader
属于应用程序根据自身需要自定义的ClassLoader , 如tomcat、jboss都会根据j2ee规范自行实现ClassLoader
加载过程中会先检查类是否被已加载 , 检查顺序是自底向上 , 从Custom ClassLoader到BootStrap ClassLoader逐层检查 , 只要某个classloader已加载就视为已加载此类 , 保证此类只所有ClassLoader加载一次 。 而加载的顺序是自顶向下 , 也就是由上层来逐层尝试加载此类 。
推荐阅读
- 大河客户端|布局战队,导师各有妙招,《2020中国好声音》收视率蝉联第一
- 周到|“好声音”蝉联省级卫视综艺节目收视第一,首迎抢位战导师布局战队各有妙招
- 游戏小怪兽|达仁星球:最新抖音直播留人控场方法和技巧
- 通天战队|A股最励志闻泰科技!给华为小米打工到半导体巨头,半年赚17亿
- |《街舞3》火舞台battle开启 钟汉良战队团魂之力势不可挡
- |《这!就是街舞》第三季火舞台热力喷发,队长领衔齐舞大秀燃炸战队之魂
- 生活狂想|极限男团新花名:任嘉伦可爱、贾乃亮浮夸、虞书欣的才叫脑洞大
- 时尚狂想曲|巴洛克风格衬衫搭配印花裙,杨紫挑战复古风,网友评价不一
- 时尚狂想曲|迪丽热巴入选亚洲最美面孔,抹胸衫配格纹裤,秀初秋风情
- 巅峰战队|ConcurrentHashMap的部分源码分析
