Java和虚拟内存:控制/影响哪些对象保存在主内存中?

我正在
java中编写一个缓存服务器,它将缓存内存中的图像数据(jpgs,pngs,tiff等),以便通过http进行快速访问.图像由另一个服务呈现,这是一个昂贵的操作,所以我想将它们缓存在我的缓存服务器上.

我从头开始编写它有几个原因,所以我正在寻找的答案不是[一些聪明的软件产品]

问题:如何在主内存中保留一组数据对象,并确保数据在我需要时实际存在于主内存中,而不是由虚拟内存管理器推送到磁盘?也就是说,我怎么能用Java做到这一点?

更多信息:可以使用任何间隔引用对象,例如相隔几天或者说几年有点极端:-)

编辑:我发现这个SO post问“你能把物体保存在连续的记忆中吗?” – 这不是我要问的问题,虽然它可以帮助,如果对象一直被引用,我猜想.顺便说一句,这个问题的答案是“不”,除了数组中的值类型.

最佳答案 我强烈怀疑你是否可以单独用Java做到这一点.你可能不得不使用像
mlock到JNI这样的东西,以及必要的JNI咒语来将缓存的对象图固定在内存中,这样GC就不会移动它们.并且[在这里插入奇迹]将固定的内存压缩成连续的页面,因为这就是mlock操作的内容.

点赞