星球狂想战队|清华扫地僧带你深入JVM调优实战,思路清晰,精通简直太容易

1.前言Java作为一种热门开发语言 , 在行业知名度也可谓是“家喻户晓” 。 在使用的道友 , 也是不计其数 。 所以 , 应该都听说过一句经典语句:Write once , run anywhere 。 而为什么java能达到如此强大的存在呢 , 这离不开我们今天要复习的重点-java虚拟机(JVM) 。
星球狂想战队|清华扫地僧带你深入JVM调优实战,思路清晰,精通简直太容易2.JVM介绍2.1 JVM是什么JVM就是Java虚拟机(Java virtual machine) 。 JVM是JRE的一部分 , 它是一个虚构出来的计算机 , 是通过在实际的计算机上仿真模拟各种计算机功能来实现的 。 JVM有自己完善的硬件架构 , 如处理器、堆栈、寄存器等 , 还具有相应的指令系统 。
星球狂想战队|清华扫地僧带你深入JVM调优实战,思路清晰,精通简直太容易2.2 JVM工作流程咱们先看两张解析图:
星球狂想战队|清华扫地僧带你深入JVM调优实战,思路清晰,精通简直太容易咱们平时编写java程序后 , 大体工作流程就如上图 。 下面我们再进一步详解 , 请看下图:
星球狂想战队|清华扫地僧带你深入JVM调优实战,思路清晰,精通简直太容易简单解释一下上面这个流程图:

  1. 程序运行时 , java文件通过java编译器转译成class文件
  2. class文件通过类装载器以及java类库 , 装载到JVM中
  3. JVM通过解释器 , 即时编译器等将装载进来的class文件进行编译操作 。 如内存分配 , 运行处理等
  4. 最后JVM将相应操作与操作系统、硬件交互
2.3 JVM内部结构下面说说JVM虚拟机这块的内部结构 , 从图入手:
星球狂想战队|清华扫地僧带你深入JVM调优实战,思路清晰,精通简直太容易JVM内部结构分为三部分:类加载器(加载.class文件) , 执行引擎(执行字节码或执行本地方法) , 数据区(包含PC寄存器 , 栈 , 堆 , 方法区以及本地方法栈) 。 下面我们对前两者进行一个介绍 , 待会着重讲讲数据区 。
2.3.1 类加载器类的加载由类加载器完成 , 类加载器通常由JVM提供 , 这些类加载器也是前面所有程序运行的基础 , JVM提供的这些类加载器通常被称为系统类加载器 。 除此之外 , 开发者可以通过继承ClassLoader基类来创建自己的类加载器 。
通过流程图看看类加载器做了哪些事:
星球狂想战队|清华扫地僧带你深入JVM调优实战,思路清晰,精通简直太容易①Bootstrap 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加载一次 。 而加载的顺序是自顶向下 , 也就是由上层来逐层尝试加载此类 。


推荐阅读