热部署与热加载
1.联系和区别
联系:
- 不重启服务器建议/部署项目
- 基于Java的类加载器实现
实现原理:
- 热部署直接重新加载整个应用
- 热加载在运行时重新加载class
使用场景:
- 热部署更多的是在生产环境使用
- 热加载则更多的是在开发环境使用
2. 原理解析
Java类加载的五个阶段:加载-->验证-->准备-->解析-->初始化

5种初始化:
- 遇到new,get, static这几条字节码指令,如果类没有初始化,则需要触发初始化。final修饰的类会在编译时把结果放到常量池中,即使调用也不会触发初始化。final关键字它修饰的是常量。
- 使用反射对类进行反射调用,如果类没有进行初始化,就需要先初始化
- 当初始化一个类的时候,如果发现其父类还没有进行过初始化,需要先触发父类的初始化。先初始化父类,在初始化子类。
- 虚拟机启动的时候用户需要制定一个要执行的主类,虚拟机会先初始化这个主类。
- 使用jdk1.7动态机制相关的句柄会进行初始化。
Java类加载器特点:
- 有AppClass Loader(系统类加载器)开始加载指定的类
- 类加载器将加载任务交给其父, 如果其父找不到, 再由自己去加载
- Bootstrap Loader(启动类加载器)是最顶级的类加载器