本文主要介绍java类的加载机制
1.java文件结构
(现在文件的代码文件后缀为HelloWorld.java,经过javac编译后生成HelloWorld.class,这个是字节码文件,可以通过java+文件名运行。需要用二进制查看器查看,例如Binary Viewer)
·魔术(第一行的前四位十六进制)
·Class文件版本第五位至第八位
·常量池
就是一个cp_info,由tag很info[](即关联表、嵌套表)组成,读的过程先根据tag,判断是哪个关联表,然后找到它,往下分析就可以了
Tag的表名与对应的值:(每个表都有对应的结构,需要用这个结构去查字节码文件)
访问标志:
·类索引,父类索引,接口索引集合
·字段表集合
·方法表集合
·属性表集合
2、Class文件设计理念以及意义
Java文件按照一定的规范(语法、接口),就能被java编译器所编译,生成具有一定规范的字节码文件,由于这个字节码文件具有一定的规范,所以能够被java虚拟机所执行。
所以只要能生成jvm能识别的字节码文件,那么这个文件就能在jvm运行。
a、java文件按照一定的语法(自定义语法)
b、编译器编译(自定义编译器)
c、字节码文件(生成指定规范的字节码文件)
d、jvm运行
运行在jvm虚拟机之上的语言:Clojure,groovy,jruby,jython,Scala
3.java加载过程
类加载机制 :
虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制
类加载的时机:
一个最常用到的例子:
https://my.oschina.net/905042249/blog/2874874