/cm4j-all

这是线上常用功能的整合项目,里面的功能都在线上实际使用

Primary LanguageJava

示例代码github:https://github.com/cm4j/cm4j-all
注意:本项目的agent热更方式需依赖于 cm4j-javaagent 的jar包
因此请先下载 cm4j-javaagent 项目并执行 mvn clean install 命令,把cm4j-javaagent打个jar包安装到本地maven仓库中

从事游戏行业多年,一直使用Java做开发,不可避免的就经历了许多,其中也踩过不少坑。

  • 最早的游戏是不支持热更的,导致出了BUG就必须停服;
  • 后续项目引入热更,但也不是特别完美,再往后热更升级,引入第二版:动态加载子类热更;
  • 受第二版热更方式启发,后来又加入了线上动态代码执行,主要用于规整数据,处理线上BUG;
  • Arthas的横空出世,给线上解决方案打开了一个新思路。它的设计也非常巧妙,许多开源框架在它的基础上进行扩展,比如 Bistoury 的在线Debug等;
  • 因为游戏业务特殊性,会产生许多跨进程接口调用,因此我们就期望一种本地和远程代码是同一种写法的API调用方式,于是就衍化出跨服本服调用的一致化。

由此可以看出,我们的技术演进与迭代也是逐步过来的,这中间也参考了许多开源的实现,其中 Arthas 的思路不可或缺,这里要感谢Arthas技术团队。

这中间过程走了不少弯路,因此我这里整理了一个系列文章,主要讲解下这么多年遇到的问题、使用到的线上解决方案,以及其背后的原理。 主要涉及到的技术点包括:Agent、JavaCompiler代码编译、字节码生成、ClassLoader原理、框架的代码隔离与互调思路等等

系列介绍目录:Java线上解决方案系列目录

多线程系列目录: