On 2021-03-01 Brett Okken wrote: > > One thing that confuses me in your version is the special handling > > of the first byte: > > > > buf[pos++] = buf[back++]; > > --left; > > > > If there are two bytes to copy, then one will be copied above and > > the other with arraycopy later. If there are more bytes to copy and > > distance is very small, incrementing "back" above can mean that an > > extra arraycopy call might be needed in the loop because the first > > copy will be one byte smaller. > > > > I understand that it might help when there is just one byte to > > repeat because then the while-loop will be skipped. In all other > > situations it sounds like that the special handling of the first > > byte would in theory be harmful. Note that I don't doubt your test > > results; I already saw with the CRC64 code that some changes in the > > code can affect performance in weird ways. > > The image1.dcm is the most impacted by this optimization. Again, this > file is basically a large greyscale bmp. This results in a significant > number of single byte repeats. Optimizing for the single byte improves > performance in that file by 3-5%, while having smaller effects on the > other 2 files (ihe_ovly_pr.dcm slightly slower, large.xml slightly > faster)
OK, that is an interesting test case. > I agree your approach is more readable. From your version of it, I was > expecting that simplicity in reading to translate into better > performance. > This latest version actually does appear to do that. The image1.dcm > performance matches my version and the other 2 are a bit faster. > Adding the single byte optimization still speeds up image1.dcm (~8ms, > ~2%) and large.xml (~3ms, 2%), while slowing ihe_ovly_pr.dcm (~.008ms, > ~1%). [...] > Version 3 is better for all 3 files. With these results I now plan to include version 3 in the next release. It sounds that the single-byte optimization has a fairly small effect. Omitting it keeps the code a tiny bit simpler. I have committed the change. I think xz-java.git should now be almost ready for a release. I just need to add NEWS and bump the version number. Thanks for your help! -- Lasse Collin | IRC: Larhzu @ IRCnet & Freenode