一:jvm加载的过程
1.java类在启动的时候都需要windows通过安装环境jdk中的java.exe调动c程序的dll库加载启动类
2.c通过一些操作加载启动类。调用java的com.sun.的包下的launcher。该类有引导类加载器负责加载创建其它类加载器。这个类下的launcher方法。可以理解为两步。第一步得到扩展类,扩展类调用父级引导类,注意这里的父级关系不是继承,而是包含父级属性,launcher采用单例模式,静态初始化就给。调用引导扩展类返回作为参数,传入第二步,第二步通过加载应用程序类加载器。应用程序类加载器会去磁盘读取类的路径,加载环境变量配置。
二:类加载的过程
1.加载到校验到准备到解析到初始化到使用到卸载
加载就是从磁盘读取到类,使用时才会加载
校验字节码文件是否被篡改
准备就是给类的静态变量分配内存,并且设置默认值
解析就是将类的代码块拆分成符号语言,在jvm中分配对应的内存,对应的指向关系。就是静态链接。动态链接后期学习。
初始化就是对类的静态变量初始化值。
三: 双亲委派机制。
1简单来说就是先从应用程序类加载器开始从自己本地开始查找如果没有查找到就委托父级,父级没有在委托下级,直到应用程序类加载器调用环境变量查找到target目录下的类。
全委托机制:就是应用程序类加载器加载类时,类所依赖的类会一起被加载到。
2打破双亲机制实质就是自定义类加载器。如果类加载器为空则不去调用父级加载器而是直接执行findclass。