java文件从编码到完成最终执行的过程:
jvm虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程。jvm不是一开始就把所有的类都加载进内存中,而是只有第一次遇到某个需要运行的类时才会加载,且只加载一次。
把class字节码文件从各个来源通过类加载器装载入内存中
jvm要完成三件事
类加载器
将java类的二进制代码合并到jvm的运行状态之中的过程
保证加载进来的字节流符合虚拟机规范,不会造成安全错误
验证分类
为类变量(注意,不是实例变量)分配内存,并且赋予初值(java虚拟机根据不同变量类型的默认初始值)
默认初始值
常量池内的符号引用替换为直接引用的过程
符号引用:一个字符串,但是这个字符串给出了一些能够唯一性识别一个方法,一个变量,一个类的相关信息
直接引用:可以理解为一个内存地址,或者一个偏移量
举个例子来说,现在调用方法hello(),这个方法的地址是1234567,那么hello就是符号引用,1234567就是直接引用
解析阶段,虚拟机会把所有的类名,方法名,字段名这些符号引用替换为具体的内存地址或偏移量,也就是直接引用
对类变量(static修饰的变量或语句)初始化,是执行类构造器的过程
初始化过程
如对本文有疑问, 点击进行留言回复!!
Flink程序JDK8 运行一段时间后NullException解决
解决: java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient
SpringBoot中定制异常页面(404页面配置提高用户体验)
DataGrip和IDEA无法连接上Mysql问题解决方法详解
Java基础语法(多态、类、接口、Date类、基本类型、系统类)
网友评论