背景
游戏热更新,是指在不重启服务器/客户端app的情况下,对游戏内容进行修改或者对代码bug进行修复。
对于一个上线产品项目来说,热更新为维持项目的稳定健康提供了坚强的保障。小到策划数据的修改,代码bug的修改,大到动态扩展游戏业务功能。试想一下,没有热更新机制,如果需要修改程序的一个小bug,都不得不踢人停服维护。这样的事情来多一发,恐怕老玩家都被撵走了。比较有意思的是,我先前的一个项目,每次更新发版当日,一定少不了代码热更或者数据热更,两年里的每一个星期几乎如此,从无例外。可见热更新的重要性了。
2.java热更新原理
java热更新有两种思路
2.1instrument机制修改方法体
对于已经加载到内存里的class,通过instrument机制动态改变JVM已加载的类的方法体。这里重点说下,这种方式热更新的限制。官方API已经明确说明,重定义只能修改方法,不得添加、移除、重命名字段、方法,不得改变类的结构。在某些版本,允许添加私有方法以及静态方法。
2.2类实例替换
对于已经存在的class,只能修改方法体。但是对于全新的class,我们就可以为所欲为了。
例如,我们可以替换接口的