java类的加载机制

207 阅读1分钟

本文内容原文是知乎用户“沉默王二”的文章

1、Loading

首先jvm会把编译好的字节码文件(.class文件)从不同的数据源(class文件、jar包、网络等)转换成二进制字节流加载进入内存,生成代表该类的class对象

2、链接

链接又分为3个部分:

  • 1)Verification(验证):jvm会验证二进制字节流是否符合jvm的语法规范,保证程序的正常运行,保障jvm安全。主要检查项有:二进制字节流格式(如是否以cafe bene开头)、方法是否遵循访问控制关键字的限制、变量是否正确初始化、变量是否被赋予正确的类型等
  • 2)Preparation(准备):jvm对变量进行内存的分配并初始化。根据数据类型进行初始化,另外常量此时初始化的值就是他的实际值,而非0、null等类似默认初始化值。
  • 3)Resloution(解析):简单来说就是把类、变量等名字(符号)直接替换成他的地址值。

3、初始化

jvm将赋予默认值的变量初始化为实际的值,事实上就是执行构造方法的环节。