花隐间

花隐间

言归文字外,意出有无间

Scroll Down
置顶
Java线上解决方案系列目录

Java线上解决方案系列目录

从事游戏行业多年,一直使用Java做开发,不可避免的就经历了许多,其中也踩过不少坑。最早的游戏是不支持热更的,导致出了BUG就必须停服;后续项目引入热更,但也不是特别完美,再往后热更升级,引入第二版:动态加载子类热更;受第二版热更方式启发,后来又加入了线上动态代码执行,主要用于规整数据

2021-11-09
476 0
Arthas原理:理解ClassLoader

Arthas原理:理解ClassLoader

阿里的arthas一经推出就大受好评,主要原因就是它提供了一套线上问题的解决方案,比如可以在线查看服务器状态;可以支持热更新,原理类似我们之前所讲的[JAVA热更新1:Agent方式热更](//yeas.fun/archives/hotswap-agent) ; 它还可以支持对线上的代码跟踪执行情况,打印执行参数和返回参数等功能。功能那是异常强大,关键的一点是它对应用是无侵入的,也就是不影响到目标应用的业务逻辑。

2022-01-22
47 0
maven常见问题与原理技巧

maven常见问题与原理技巧

目前项目中主流的都是使用maven等构建工具,当然在使用过程中也会遇到各种各样的疑惑或问题,比如:maven生命周期到底有啥用jar包下载不了怎么办不知道配置怎么配,下载jar包的顺序是什么jar包冲突又是怎么解决问的人多了,也就形成了大家的共性问题,这里基于这些问题

2022-01-09
113 0
Tomcat停止时无法正常关闭?

Tomcat停止时无法正常关闭?

在调tomcat的shutdown命令,或者在编辑器里点关闭web服务,可能会出现关不掉的情况,控制台可能也不报错。 我这里总结下:不是tomcat关不掉,而是tomcat启动的应用某些线程没正常关闭, 再明确点就是:项目中有非daemon的线程没关闭。具体原因大家再百度百度吧。

2022-01-01
97 0
如何读懂火焰图(Flame Graph)

如何读懂火焰图(Flame Graph)

火焰图就是CPU的抽样图。 系统定期抽样(通常频率是99Hz,即每秒99次),基于函数调用堆栈来画抽样图。 - y轴代表方法的调用栈,越高代表方法堆栈深度越深; - x轴代表被抽样的次数(注意:不是时间),越宽代表该方法栈消耗的CPU次数越多。

2021-12-22
274 0
像本服一样调用远程代码(跨进程远程RPC方法直调)

像本服一样调用远程代码(跨进程远程RPC方法直调)

想要调用远程方法,传统的方式需要以下几个步骤: 需要先判断是否是本服请求。如果是本服,则执行本服逻辑;如果是跨服,则需要把请求发到对应服务器上; 跨服务之间的消息通信; 消息发送到跨服之后,如何根据参数来调用对应的代码?

2021-12-18
233 0
多线程并发解决方案:替换synchronized锁解决死锁

多线程并发解决方案:替换synchronized锁解决死锁

在游戏开发过程中,多线程技术是非常重要的技术,多线程的引入最大的好处就是能解决游戏中的性能问题。 在加锁的逻辑上java提供的synchronized锁是非常简单而实用的,但随着业务逐渐增多且复杂,即使是简单的synchronized锁使用不合理也会引发死锁导致巨大的灾难。 在经历过线上的几次事故,最终引入了synchronized锁替换的解决方案,从根本上解决死锁问题。

2021-11-30
340 0
JAVA不停服执行代码(动态代码执行)

JAVA不停服执行代码(动态代码执行)

在项目上线之后,不可避免的会遇到出BUG的情况。之前的做法可能是提前写好一段代码,然后通过后台接口来进行调用。但这种方式必须得提前写好规整逻辑,但不能覆盖所有情况。因此我们就期望直接在线上执行一段代码,来进行我们业务数据的规整。这就是JAVA不停服在线上执行代码。

2021-11-20
479 0
JAVA热更新2:动态加载子类热更

JAVA热更新2:动态加载子类热更

上一篇《JAVA热更新1:Agent热更》我们讲解了JDK提供的Agent方式来实现代码不停服更新,受限于JDK的Agent一些限制,这种方式无法实现以下功能:只能修改方法体,不能变更方法签名、不能增加和删除方法/类的成员属性。对于Instrumentation和JVM的agent...

2021-11-05
597 0