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

Maz*_*yod 4 java caching memory-management

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

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

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

在iOS应用程序中,我将在"applicationDidReceiveMemoryWarning"方法中发布它们.但在Java ...?

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

mik*_*era 7

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

例如JPanels - 足够轻巧,可以随时根据需要创建一个全新的.

如果我是你,我会尽可能少地缓存,只有当你通过这样做证明了实质性的好处时才这样做.

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