游戏中数据包的压缩

我们游戏中数据包比较大时,就使用7z进行压缩后,再传给客户端。

最近压力测试时,发现一个坑,查了几天,才定位是使用的7z库的问题。

java中没有官方的7z库,也没有开源组织维护,只有一个作者自己写的7z库,最初没发现问题。

这次查看7z的源码,发现里面每次压缩时会分配16M内存,大量的分配释放内存导致整个jvm都被卡了。

没办法改为gzip库,来避免掉了这种问题。

关于压缩实际还有很多潜力可以挖掘。

1、比如:压缩解压每个数据块中有crc32校验,我们游戏中使用,可以直接去掉这部分计算。

2、比如:既然不使用crc32校验证,那crc32占用的那几个字节就可以省掉。

3、比如:既然前后端都知道使用相同的压缩算法,就可以把压缩文件的格式文件头去掉。

4、比如:每次压缩解压都会申请byte[],我们可以使用threadlocal复用byte[],来减少byte[]的分配。

 

 

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>