问题:

在Java应用中例如在Hadoop中,经常用到CRC校验计算。对于Java开发者来说,目前可用的实现是java.util.zip类,他通过JNI调用zlib中crc32函数。这里有两个性能瓶颈。其一,JNI的调用性能很低,如果每次计算的数据量很小,比如1、2个byte,那么JNI的调用开销远远高于计算开销。其二,虽然zlib的crc32实现是查表实现,但是本身性能还有很大的提升空间。

对此,Hadoop社区目前实现了Java版本的CRC32类来克服JNI的开销,它在JIT后速度会快于通过JNI调用的Native实现。下图是通过运行PureJava CRC32作者提供的benchmark程序得出的性能数据。
(更多…)