热更新之后出现的问题
来源:互联网 发布:学堂在线 知乎 编辑:程序博客网 时间:2024/05/16 10:34
最近在做一个需要热更新的java.服务器端程序.
摸索的过程中出现了不少问题.服务器端结构如下
不动态的lib|
全局变量,
公用接口,
父类,
以及其他第三方lib
动态项目:
启动程序
子游戏的公用代码
子游戏A
子游戏B
子游戏CDEFGHIJK
在热更新的时候出现了第一个问题:
类型转换的时候一个异常:
object is not an instance of declaring class
一个Class不能转换成为同样样的Class.
a.b.c.ClassA.class 不能转化为 a.b.c.ClassA.class.这是同一个类. 为啥自己不能转换成自己呢?
因为ClassLoader不是同一个.当然不能转换.
在热更新的时候,正在内存中的Class不能销毁,玩家正在游戏中呢.怎么可以销毁呢.对吧.
但是热更新之后.新来的Class跟内存中的Class是存在不同宇宙空间的两个相同的人.虽然什么都一样.但是不能相互转换.
换成程序的语言就是 loader11111111.a.b.c.ClassA.class 不能转化为 loader2222222.a.b.c.ClassA.class
解决的办法就是抽象,接口.
在不变的lib中放着ClassA的接口.这样.都用接口做类型转换就不会出问题了.
loader11111111.a.b.c.ClassA.class,loader2222222.a.b.c.ClassA.class 都实现接口 loader0.a.b.c.IClassInterface ,自然就可以转换了.
搞定.这样就是热更新的时候只能在接口的定义范围内修改了.如果需要修改接口.那就只能等服务器重启了.
- 热更新之后出现的问题
- 热修复tinker 更新.so出现的问题
- ulua热更新自定义服务器出现问题的解决方案
- Android studio更新到2.2之后出现的问题
- Android studio更新到2.2之后出现的问题
- Android studio更新到2.2之后出现的问题
- vueThink更新了element UI之后出现的问题
- uLua 热更新 创建界面之后按钮点击事件问题
- cocos热更新的小问题
- eclipse更新之后,出现adb问题无法解决
- Xcode更新之后插件失效的问题
- eclipse安装之后出现的问题
- 升级之后百度地图出现的问题
- 升级ShareSDK之后,出现的问题记录
- lua文件热更新无效和资源热更新无效的问题
- 更新android出现的问题
- Erlang的热更新
- HBuilder的热更新
- BZOJ1072
- master thread源码分析-伪代码
- 数据库开发介绍
- 关于 Android 的目录结构说明
- Android数据自动更新库DataAutoRefresh
- 热更新之后出现的问题
- 二维树状数组的区间加减及查询 tyvj 1716 上帝造题的七分钟
- 如何查看Oracle数据库版本
- Android之ListView异步加载网络图片(优化缓存机制)
- 最小生成树---Prim
- JS和jquery的几个令人迷惑的问题之四-函数
- 旋转卡壳(1)--求凸包(点集)直径
- OCP 1Z0 052 101
- 异常处理的基本原则