热部署和热加载的区别

说实话,本来这篇文章是不打算写的,但是因为今天听到朋友在说在开发时不用重启项目采用热部署等等…啥的,因为之前我提到过开发时提升效率多数使用的是热加载,我知道热加载使用过多,存在内存溢出的隐患,但是我觉得这也许是分不清热部署和热加载的区别,所以也许有朝一日我又给忘了(可耻),所以记录的,如果我的理解和记录有误,或者我压根就没说对,请千万指正。

热部署:

热部署在服务器运行时重新部署项目;
热部署直接重新加载整个应用;
热部署更多的是在生产环境使用;

如果你是使用tomcat或者其他的服务器部署项目时,往往会打成war进行部署,那么如果是在分布式的多个项目运行的情况下了?你只为了部署其中一个项目而停止运行服务器去部署吗?那么其他的项目也会停止运行,采用热部署,在运行项目时,进行部署,不需要重新停止tomcat,而停止其他项目的运行,但是会清空内存,清空session等,重新打包,重新解压war包运行。

但是实际上,我个人觉得,在大多数传统软件工程项目中,确切的需要使用热部署来部署项目的较少,也许是我井底之蛙了吧,由于云计算的兴起,热部署还是有其应用。

在生产中,并没有需要频繁部署的应用,即使是敏捷,再快也是一周一次的迭代,并且通过业务划分和模块化编程,部署的代价完全可以忽略不计,对于现有的应用,启动耗时再长,也并非长到无法忍受,如果真的这么长,那更应该考虑的是如何进行模块拆分,分布式部署了。
对于无法停止服务的应用,比如现在的云计算平台这样分布式应用,采用分批上线也可以满足需求,类似热部署方案应该是放在最后考虑的解决方案。

热加载:

热加载在运行时重新加载class;
热加载则更多的实在开发环境使用,热加载有个通俗的名字就是开发者模式;
为什么说热加载要在开发环境使用了,而不应该在生产环境中使用了?
这不得不提它的安全性了,

热加载这种直接修改jvm中字节码的方式是难以监控的,不同于sql等执行可以记录日志,直接字节码的修改几乎无法记录代码逻辑的变化,对既有代码行为的影响难以控制,对于越注重安全的应用,热加载带来的风险越大,这好比给飞行中

你可能感兴趣的:(JVM,idea,web安全)