JVM basic

JVM basic

Compile Once, Run Anywhere

  • 平台无关性

javaclass

  • 查看字节码.class

反编译工具

javap

  • 为何不直接解析为机器码

1、可将准备工作提前做好,.class文件不存在语法等错误,无需再校验

2、可将其他语言解析成字节码实现,提高平台兼容性

JVM 架构

jvm

类从编译到执行过程

  • 编译器将***.java源文件编译为.class字节码文件
  • ClassLoader将字节码转化为JVM的Class对象
  • JVM利用Class对象实例化Robot对象

ClassLoader

  • 负责将class问及结案的二进制数据流装载进JVM,进行连接,初始化等操作

ClassLoader种类

  • BootStrapClassLoader:C++编写,加载核心库java.*
  • ExtClassLoader:Java编写,加载扩展库javax.*
  • AppClassLoader:Java编写,加载程序所在目录,类路径
  • 自定义ClassLoader:Java编写,定制化加载

双亲委派机制

classloader

  • 可避免重复加载相同字节码

LoadClass & forName

类的加载方式

  • 隐式加载:new
  • 显示加载:loadClass,forName

类的装载过程

  • 加载:通过ClassLoader加载class字节码,生成class对象

  • 链接:

    1、校验:检查加载的class正确性和安全性

    2、准备:为类变量分配存储空间并设置类变量初始值

    3、解析:JVM将常量池内的符号引用转换为直接引用

  • 初始化:执行类变量赋值和静态代码块

区别

  • Class.forName得到的class是已经初始化的
  • Classloder.loadClass得到的class是还没有链接的
  • Copyrights © 2019-2020 Rex