]> source.dussan.org Git - jgit.git/commit
LooseObjects: Use File#exists when possible 37/1173737/2
authorDariusz Luksza <dariusz.luksza@gmail.com>
Sun, 17 Dec 2023 16:43:56 +0000 (16:43 +0000)
committerDariusz Luksza <dariusz.luksza@gmail.com>
Wed, 20 Dec 2023 08:00:10 +0000 (08:00 +0000)
commitfaa50c683d2496d486aac5efac6c89f9652e13ff
tree2454f7c31399d2e1f89f2f040ba3512e810924ba
parentb2abab271a3c8093cc8c2cf3d5daea7ed408b78c
LooseObjects: Use File#exists when possible

When `trustFolderStat` flag is enabled we can use `File.exist()`
instead of rethrowing `FileNotFoundException`. This improves performance
of cloning and fetching.

A simple benchmark that generates a random `ObjectId` instance and then
tries to parse that object id, shows about 30% improvement with this
change.

The benchmark scenario was based on the stacktrace reported in jgit-5.
Where `RevWalk.parse()` call will eventually call `LooseObjects.open()`
and finally `LoseObjects.getOpenLoader()`.

Results on `master`:
  (packFiles)  Mode  Cnt        Score   Error  Units
           10  avgt    2      137.400          us/op
          100  avgt    2     1369.063          us/op
         1000  avgt    2    13730.759          us/op
        10000  avgt    2   137359.539          us/op
       100000  avgt    2  1382627.641          us/op

With this change:
  (packFiles)  Mode  Cnt        Score   Error  Units
           10  avgt    2       85.019          us/op
          100  avgt    2      868.748          us/op
         1000  avgt    2     8628.768          us/op
        10000  avgt    2    86877.505          us/op
       100000  avgt    2   863123.868          us/op

Issue: jgit-5
Change-Id: I366acf629873a5c7577a1032490faf57685f98dd
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/LooseObjects.java