JVM详解之:类的加载链接和初始化
简介 有了java class文件之后,为了让class文件转换成为JVM可以真正运行的结构,需要经历加载,链接和初始化的过程。 这三个过程是怎么工作的呢?在本文中你将会找到答案。 加载 JVM可以分为三大部分,五大空间和三大引擎,要讲起来也不是特别复杂,先看下面的总体的JVM架构图。 从上面的图中,我们可以看到JVM中有三大部分,分别是类加载系统,运行时数据区域和Execution Engine。 加载就是根据特定名称查找类或者接口的二进制表示,并根据此二进制表示来创建类和接口的过程。 运行时常量池 我们知道JVM中有一个方法区的区域,在JDK8中,方法区的实现叫做元空间。这个元空间是存放在本地内存中的。 方法区中存放着每个class对应的运行时常量池。 当类或者接口创建的时候,就会通过class文件中定义的常量池来构建运行时常量池。 运行时常量池中有两种类型,分别是symbolic references符号引用和static constants静态常量。 其中静态常量不需要后续解析,而符号引用需要进一步进行解析处理。 静态常量分为两个部分:String常量和数字常量。 String常量是对String对象的引用,是从class中的CONSTANT_String_info结构体构建的。 数字常量是从class文件中的CONSTANT_Integer_info, CONSTANT