Details
-
Improvement
-
Status: Resolved
-
Low
-
Resolution: Fixed
-
None
-
n/a
Description
In https://issues.apache.org/jira/browse/CASSANDRA-37 FastByteArrayInputStream and FastByteArrayOutputStream were removed due to being code copied from the JDK and then subsequently modified. The JDK license is incompatible with Apache 2 license so the code had to go.
I have since had a look at the performance of the JDK ByteArrayInputStream and a FastByteArrayInputStream (i.e. one with synchronized methods made un-synchronized) and seen the difference is significant.
After a warmup-period of >10000 loops I get the following for 10000 loops through a 128000 byte array:
bais : 3513ms
fbais: 72ms
This varies depending on the OS, machine and Java version, but it's always in favour of the FastByteArrayInputStream as you might expect.
Then, at Jonathan Ellis' suggestion, I tried this using a modified Apache Harmony ByteArrayInputStream - i.e. one whose license is compatible - and the results were the same. A significant boost.
I will attach a patch with changes for the 0.8.0 tag.