学习java的时间不短了,度过了是追求怎么用的阶段,我想在编程这条路上走的更踏实、更远。
一 JVM运行的基本过程
核心就是类加载的过程
jvm 将class文件中的字节码内容加载到内存当中,并对内存进行链接(校验、准备、解析),然后初始化,最总形成jvm可直接使用的java类型的过程。
加载:静态
字节码========》内存当中,
将静态的数据 ===》方法区中的 运行时数据结构,
并 在堆中生成一个代表这个类的java.lang.Class对象 为方法区类数据的访问接口。 这个过程需要类加载器的参与。
链接:运行中
将java类的二进制代码合并到 jvm运行状态中的过程。
1.验证:确保加载的类加载的信息符合规范,没有安全问题。
2.准备:为类变量分配内存,并设置类变量初始值
3.解析:虚拟机内常量池的符号引用替换成直接引用
举个例子: 即 肖总 找 北京市长 =========》 1米处的肖总 找 10米处的北京市长。
初始化:(调用类构造器)
1.初始化阶段是调用类构造器<clinit>方法的过程,类构造器<clinit> 方法是由编译器自动收集类中所有类变量的赋值动作,和静态语句块中的语句合并产生的。
2.当一个类初始化时,发现其父类没有被初始化则需要父类初始化。
3.虚拟机保证一个类的<clinit>方法在多线程环境运行中被正确加锁和同步。
===================================》》》》》
二类被加载过程示例。