关于类加载,网上的答案五花八门,有些语言比较官方,晦涩难懂。现在我自我总结如下:
1 加载。把class文件读入虚拟机,转换成为运行时数据结构,也就是InstanceClass,InstanceClass是C++实现的JVM中表示一个java Class的,同时java class文件中的每个方法也会转换为C++的Method对象
记住,C++也是面向对象的,它也有类和对象的概念
2 验证。检查下class的格式,防止破坏JVM。这个网上的概念实在太多了。
3 准备,简单理解就是给static成员分配空间,已经赋值,注意是零值。比如int是0,long是0L。
4 解析。符号引用替换为直接引用。就是说我要执行一个方法,字节码一般都是这么个格式的invokevirtual #
7。其中
#
7是常量表的第七个常量。但是这个常量只是一个字面量,实际代码要能够找到它要执行的方法的地址,解析就是干这个的
原文:https://www.cnblogs.com/juniorMa/p/13533562.html