Skip to content

Latest commit

 

History

History
95 lines (82 loc) · 5.59 KB

README.md

File metadata and controls

95 lines (82 loc) · 5.59 KB

JVM

javap <options> <classes>

javap -c xxx.class : Disassemble反汇编 the code
javap -l xxx.class : Print line number and `local variable tables

IntelliJ IDEA jclasslib 插件

指令集架构

  • 基于栈式架构(JVM)
    • 设计和实现更简单,适用于资源受限的系统
    • 避开寄存器的分配难题:使用零地址指令方式分配
    • 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈指令集更小,编译器容易实现
    • 不需要硬件支持,可移植性更好,更好实现跨平台
  • 基于寄存器架构
    • 典型的应用是x86的二进制指令集:传统PC以及Android的Davlik虚拟机
    • 指令集架构完全依赖硬件,可移植性差
    • 性能优秀和执行更高效
    • 花费更少的指令去完成一项操作
    • 在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主

JVM架构

image

Class Loader subSystem类加载子系统

loading加载

Bootstrap ClassLoader引导/启动 类加载器cc++实现,Java核心类库默认使用此加载器加载

  1. 出于安全考虑Bootstrap ClassLoader只加载包名为javajavaxsun等开头的类
  2. JAVA_HOME/jre/lib下的内容
  3. sun.boot.class.path路径下的内容
  4. 没有父加载器
  5. 加载ExtensionClassloaderAppClassloader,并指定为他们的父类加载器
  6. c/c++实现,嵌套在JVM内部

Extension ClassLoader扩展类加载器java实现

  1. java语言编写,实现位置sun.misc.Launcher内静态内部类static class ExtClassLoader extends URLClassLoader
  2. parent父类加载器Bootstrap ClassLoader
  3. java.ext.dirs系统属性所指定的目录中加载类库
  4. 从JDK的安装路径jre/lib/ext子目录下加载类库如果用户创建的JAR放在此目录下也会自动由ExtensionClassLoader加载

Application ClassLoader系统类加载器java实现,自定义java类型默认使用

  1. java语言编写,实现位置sun.misc.Launcher内静态内部类static class AppClassLoader extends URLClassLoader
  2. parent父类加载器ExtClassLoader 扩展类加载器
  3. 加载环境变量classpath路径下的类库
  4. 加载系统属性java.class.path指定路径下的类库

User Defined Class Loader 用户自定义类加载器

Linking链接

Initialization初始化

image

Runtime Data Areas

image

Execution Engine执行引擎

  • Interpreter解释器
  • JIT Compiler即时编译器
    • Intermediate Code Generator中间代码生成器
    • Code Optimizer代码优化器
    • Target Code Generator目标代码生成器
    • Profiler分析器
  • Garbage Collection垃圾回收器