As a replacement for BDB JE, I've been prototyping on a sqlite replacement, since the current one sucks so much performance wise.
The one big thing I found is the lack of a connection pool as the biggest perf killer.
It's not so bad for large queries, but we do a lot of one object requests, which means opening a connection to the db for each single object to fetch, which in turns means opening the db file, reading the db metadata, etc.
Added a connection pool and got a great perf improvement.
The other thing I'm experimenting with is using a int index (allowing duplicates) composed of the first 4 bytes of each object's sha1. Disambiguation could be either done in the database with an extra index on the whole sha string (as currently implemented), or at runtime. The later would result in a smaller and faster db (we avoid a 40 chars table column plus its index). Problem with it is we would have no primary key, hence no chance to do INSERT OR IGNORE... always playing this compromises game...
As for jline, we could use another argument parser, probably getting rid of the geogig-console (kind of git sh) at least for now.