播放2.6,GoogleCache删除了缓存,但JVM内存并未减少

问题描述

我正在使用com.google.common.cache。*

代码如下:

@Singleton
class CachingService @Inject()(loaderService: ValueLoaderService){
final val revisionCache = CacheBuilder
    .newBuilder
    .recordStats()
    .removalListener(new RemovalListener[Key,Value]() {
      override def onRemoval(notification: RemovalNotification[Key,Value]): Unit = {
        logger.info(s"RemovalListener: going to remove key: ${notification.getKey},cause: ${notification.getCause}")
      }
    })
    .maximumSize(maxCacheSize)
    .expireAfteraccess(expireAfteraccess.toMillis,TimeUnit.MILLISECONDS)
    .build(
      new CacheLoader[Key,Value] {
        override def load(key: Key): Value = {
          logger.info(s"CacheLoader.load: $key")
          Await.result(loaderService.getValue(key),downloadTimeout)
        }
      }
    )
}

我看到缓存会根据日志删除条目,但是JVM内存完全没有变化。它只会增长。单个缓存值的大小约为1GB。许多领域对象以案例类的形式呈现,使用play.api.json从json反序列化。

我想还剩下一些参考资料,这就是为什么不进行GC引用的原因。我不知道是什么在Play应用中保存了对虚拟案例类的引用。

我如何调试它?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)