在开发可以重复使用索引或文件的部分索引或文件的压缩磁盘索引或磁盘文件的应用程序时(出于参数的原因,让我们假设类似于Zipfian发行版),我想知道什么时候足够/更好地依赖OS级缓存(例如,在Debian系统上进行内存映射),以及何时在应用层上实现某些内容更好(例如,类似于FileChannel缓冲或Memcached或Java代码中的自定义LRU缓存)。系统/操作系统缓存与应用程序缓存
例如,one article(参考SOLR)是主张保留可用内存为OS-缓存:
操作系统的缓存是非常有用的,它显著降低应答查询所需要的时间(即使完全重启服务器!),所以一定要记住为操作系统保留一些内存空间。
这让我想知道我的应用程序级缓存是否填充内存与弱映射到LRU Java对象的做法比弊大于利,因为Java在内存开销方面非常贪婪......而不是使用该内存来缓存少数最终结果对象,操作系统可以更好地使用该空间来缓存大量原始压缩数据?另一方面,应用层缓存对于平台独立性会更好,无论运行哪个操作系统,都允许缓存。
因此,我意识到我不知道如何以原则的方式回答这个问题,除了运行几个特定的基准测试。这导致我问...
有什么一般指导原则存在是为应用程序级缓存分配可用内存还是为OS级缓存留下该内存?
特别是,我希望能够更好地认识到编写应用程序级缓存时浪费时间,甚至对性能有害。
还有一些工具可以帮助您衡量代码的性能和效率。 Traceview http://developer.android.com/tools/help/traceview.html和ARO http://developer.att.com/aro在帮助查看可以改善应用性能的位置方面非常有用。 –