The persistent cache most likely reduce performance in some uses cases, but currently it's hard to find out if that's the case or not.
Activity should be captured (and logged with debug level) if possible, for example writing, reading, writing in the foreground / background, opening and closing, switching the generation, moving entries from old to new generation.
Adding entries to the cache could be completely decoupled from the foreground thread, if they are added to the persistent cache in a separate thread.
It might be better to only write entries if they were accessed often. To do this, entries could be put in the persistent cache once they are evicted from the in-memory cache, instead of when they are added to the cache. If that's done, we would maintain some data (for example access count) on which we can filter.