aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCacheConfig.java
Commit message (Collapse)AuthorAgeFilesLines
* Update EDL 1.0 license headers to new short SPDX compliant formatMatthias Sohn2020-01-041-38/+5
| | | | | | | | | | This is the format given by the Eclipse legal doc generator [1]. [1] https://www.eclipse.org/projects/tools/documentation.php?id=technology.jgit Bug: 548298 Change-Id: I8d8cabc998ba1b083e3f0906a8d558d391ffb6c4 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix javadoc in org.eclipse.jgit lib packageMatthias Sohn2017-12-191-4/+19
| | | | Change-Id: I1e85a951488177993521ce177fdea212615e6164 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Get rid of SoftReference in RepositoryCacheHugo Arès2016-11-131-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Now that RepositoryCache have a time based eviction strategy, get rid of the strategy to evict cache entries if heap memory is running low, i.e. soft references. Main reason why time based eviction was implemented was to offer an alternative to the unpredictable soft references. Relying on soft references is not working, especially in large heap. The JVM GC will consider collecting soft references as last resort before throwing an out of memory error. For example, an application like Gerrit configured with a 128GB heap, GC will wait until all 128GB is filled before collecting the soft references so the application will be suffering long pauses caused by GC for a long time already. In other words, you will have to restart application because it's unusable before JVM eviction kicks in. Keeping the SoftReference in RepositoryCache is causing more harm than good. If you use the time based eviction (which is the default strategy) and want to tune JVM to release soft references more aggressively, it will release repositories from the cache even though they are not expired which defeats the purpose of the repository cache. Gerrit uses Lucene library which uses soft references and this is causing a "memory leak" except if you configure JVM to release soft references more aggressively which have the nasty side effect of evicting non expired repositories from the cache. Change-Id: I9940bd800464c7f007696d0ccde52ea617b2ebce Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
* Time based eviction strategy for repository cacheChristian Halstrick2016-07-121-0/+152
When Repository.close() decrements the useCount to 0 currently the cache immediately evicts the repository from WindowCache and RepositoryCache. This leads to I/O overhead on busy repositories because pack files and references are inserted and deleted from the cache frequently. This commit defers the eviction of a repository from the caches until last use of the repository is older than time to live. The eviction is handled by a background task running periodically. Add two new configuration parameters: * core.repositoryCacheExpireAfter: cache entries are evicted if the cache entry wasn't accessed longer than this time in milliseconds * core.repositoryCacheCleanupDelay: defines the interval in milliseconds for running a background task evicting expired cache entries. If set to -1 the delay is set to min(repositoryCacheExpireAfter, 10 minutes). If set to 0 the time based eviction is switched off and no background task is started. If time based eviction is switched off the JVM can still evict cache entries if heap memory is running low. Change-Id: I4a0214ad8b4a193985dda6a0ade63b70bdb948d7 Also-by: Matthias Sohn <matthias.sohn@sap.com> Also-by: Hugo Arès <hugo.ares@ericsson.com> Also-by: Sasa Zivkov <sasa.zivkov@sap.com>