Hi there!

I am working on a very large code base, and build performance issues made me 
look at the maven-resolver source code. In terms of File usages, there are a 
lot of InputStreams being copied around using ByteBuffer, instead of using 
FileChannel.transferTo. Affected classes are DefaultFileProcessor, 
ChecksumCalculator, WagonTransporter, AbstractTransporter and potentially more. 
Was it a conscious decision to use this pattern over the more efficient 
transferTo? Would you accept a PR with more modern NIO API that still works 
with JDK 7?

Here are the throughput results from a JMH benchmark, copying a 22MB file 
around using the pattern currently used in maven, and transferTo, as measured 
on macOS with JDK 11 on an SSD.

Result "MyBenchmark.resolverCopy":
  291.362 ±(99.9%) 5.443 ops/s [Average]
  (min, avg, max) = (276.923, 291.362, 302.911), stdev = 7.266
  CI (99.9%): [285.919, 296.804] (assumes normal distribution)

Result "MyBenchmark.transferTo":
  325.188 ±(99.9%) 8.838 ops/s [Average]
  (min, avg, max) = (306.978, 325.188, 355.784), stdev = 11.799
  CI (99.9%): [316.350, 334.026] (assumes normal distribution)


Thanks!
Stefan

Reply via email to