什么时候在Java中发布缓存对象的好时机?

时间:2012-02-22 04:48:28

标签: java caching memory-management

我正在开发一个Java桌面应用程序,其中有许多缓存,例如对象池,缓存的JPanel等等。

实施例: 当用户从一个面板切换到另一个面板时,如果用户切换回来,我不会销毁前一个面板。

但是,应用程序内存消耗可能会很高,而系统迫切需要这些内存资源,而我正在消耗而不是这么合理......

在iOS应用程序中,我会在“applicationDidReceiveMemoryWarning”方法中发布这些内容。但在Java中??

那么,何时是用Java发布缓存对象的好时机?

1 个答案:

答案 0 :(得分:7)

缓存在Java中通常不是一个好主意 - 创建新对象通常比您想象的要便宜得多,并且通常比保持对象缓存“以防万一”更好。周围有很多长寿命的物体对GC性能不利,也会对处理器缓存造成相当大的压力。

例如,JPanels - 非常轻巧,可以随时根据需要创建一个全新的。

如果我是你,我会尽可能少地缓存,只有当 这样做才能获得显着的性能优势。

即使您确实需要缓存,也可以考虑使用使用Soft References的缓存 - 这样,如果需要释放内存,JVM将能够自动清除缓存中的项目。这比尝试推出自己的缓存策略更简单,更安全。您可以使用现有的Soft Reference缓存实现,如Guava的CacheBuilder(感谢AlistairIsrael!)。