【发布时间】:2012-02-16 09:44:55
【问题描述】:
我正在用 java 编写一个缓存服务器,它将图像数据(jpg、png、tiff 等)缓存在内存中,以便通过 http 进行快速访问。图像由另一个服务渲染,这是一项昂贵的操作,所以我想将它们缓存在我的缓存服务器上。
我从头开始写它有几个原因,所以我要寻找的答案不是[一些聪明的软件产品]
问题:如何在主存中保留某些数据对象,并确保数据在我需要时确实在主存中,而不是由虚拟内存管理器推送到磁盘?也就是说,我如何在 Java 中做到这一点?
更多信息:可以以任何间隔引用对象,例如days 或者说相隔 years 有点极端:-)
编辑:我找到了这个SO post,它询问“你能把对象保存在连续的内存中吗?” - 这不是我要问的问题,虽然它可能会有所帮助,如果对象一直被引用,我想。顺便说一句,这个问题的答案是“否”,显然数组中的值类型除外。
【问题讨论】:
-
"图像由另一个服务渲染,这是一项昂贵的操作,所以我想将它们缓存在我的缓存服务器上。" 什么是昂贵的操作?渲染、网络传输或磁盘访问?如果缓存服务器是远程访问的,例如通过 HTTP,缓存只会帮助避免磁盘访问,这可能不是您的瓶颈。
-
您的实现将做哪些现有缓存库/框架/系统/应用程序不做的事情?
-
在 CPU 方面很昂贵。
-
Dave Newton:它是地理地图图像的缓存系统,如 GeoWebCache 和 Map Proxy,但在重要方面与这些系统不同。
标签: java caching memory virtual