- 大的流程
- 类加载-》使用-》卸载
- 加载-》连接-》初始化-》使用-》卸载
- 加载-》验证-》准备-》解析-》初始化-》使用-》卸载
加载的过程(过程使用类加载器进行加载)
- 会根据类的全限定名找到定义这个类的二进制字节流,即.class文件。
2.将字节流代表的静态存储结构转化成方法区的运行时数据结构
3.在内存中生成一个代表该类的Class对象,作为方法区这些数据的访问入口
虚拟机规范上面这 3 点并不具体,因此是非常灵活的。比如:“通过全类名获取定义此类的二进制字节流” 并没有指明具体从哪里获取、怎样获取。比如:比较常见的就是从 ZIP
包中读取(日后出现的 JAR
、EAR
、WAR
格式的基础)、其他文件生成(典型应用就是 JSP
)等等。
方法区与 Java 堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。