从零开始学SpringBoot


1. 热部署和热加载

热部署

  • 在服务器运行的时候重新部署项目
  • 直接重新加载整个项目,这种方式会释放内存,比热加载更加干净彻底,但是也更加耗时

热加载

  • 在运行的时候重新加载class,从而升级应用
  • 热加载的实现原理主要是依赖于Java的类加载机制,在实现方式上就是概括在容器启动的时候,启动一条后台线程,定时检测类文件的时间戳变化,如果类的时间戳变化了,那么就执行类的重新载入

热加载和反射都是对类进行操作,有什么区别?

热加载:比较复杂,从JVM的角度来说,就是卸载了这个类,然后执行IO,将新的类文件加载进内存中

反射:操作已经在内存中的类

2. 热部署的原理是什么?

为什么同样是重启应用,为什么不手动重启,而是建议使用spring-boot-devtools进行热部署重启?

spring-boot-devtools使用了两个类加载器,一个ClassLoader加载不会发生更改的类(第三方的jar包),另外一个ClassLoader(restart Loader)加载会更改的类

具体来说,原理是开启一个后台守护线程(File Watcher),检测中目录的文件发生改动的时候,原来的restart ClassLoader会被丢弃,将会重新加载新的restart classLoader

因为文件变动之后,第三方的jar包不再重新加载,只加载自定义的类,这些类的数量较少,所以他们的重启比较快

使用JRebel

https://blog.csdn.net/weixin_42694593/article/details/126448828?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168351754416800211520818%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168351754416800211520818&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-126448828-null-null.142^v86^insert_down1,239^v2^insert_chatgpt&utm_term=jrebel%E7%83%AD%E9%83%A8%E7%BD%B2&spm=1018.2226.3001.4187


文章作者: 穿山甲
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 穿山甲 !
  目录