From 76775db3fea49e5c96f848c425a043245d05f901 Mon Sep 17 00:00:00 2001 From: nsingh Date: Thu, 19 Apr 2018 22:26:40 +0200 Subject: [PATCH] PT 154618835 - Improve memory footprint of CompilationUnit cache --- .../ide/vscode/boot/java/utils/CompilationUnitCache.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/CompilationUnitCache.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/CompilationUnitCache.java index 2a22b9de0..adac0e6a8 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/CompilationUnitCache.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/CompilationUnitCache.java @@ -15,6 +15,7 @@ import java.nio.file.Path; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock; import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock; @@ -38,6 +39,7 @@ import com.google.common.cache.CacheBuilder; public final class CompilationUnitCache { + private static final long CU_ACCESS_EXPIRATION_MINUTES = 3; private JavaProjectFinder projectFinder; private ProjectObserver projectObserver; private Cache uriToCu; @@ -52,7 +54,11 @@ public final class CompilationUnitCache { this.projectObserver = projectObserver; projectListener = ProjectObserver.onAny(this::invalidateProject); - uriToCu = CacheBuilder.newBuilder().build(); + // PT 154618835 - Avoid retaining the CU in the cache as it consumes memory if it hasn't been + // accessed after some time + uriToCu = CacheBuilder.newBuilder() + .expireAfterAccess(CU_ACCESS_EXPIRATION_MINUTES, TimeUnit.MINUTES) + .build(); projectToDocs = CacheBuilder.newBuilder().build(); ReentrantReadWriteLock lock = new ReentrantReadWriteLock();