我有一个 TableHandler 实现表加载/重新加载逻辑。所谓表格,是指当用户以表格对象的形式请求时,我从磁盘或内存中加载的数据。如果一个新请求到达并且表的实例在内存中,那么我只是从内存中加载表而不是从磁盘重新加载它。如果我正在寻找的表不在内存中,我只是从光盘加载表。现在随着我的请求增加,很多表都存储在内存中,所以我想在 5 分钟后自动从内存中释放一些表,这些表在 5 分钟内没有被超过。我该如何实现? 我有这样的 tablehandler 类结构
final class TableHandler{
/*
Data struct for storing information required for management
of the loaded table instances
*/
final static class Tableinfo{
/*
Table instance.. and other things like table when
last modified and whether to referench the table
when a next request arrives.
*/
}
getTable(){someInternalTableHandler.getTable()}
replacetable {someInternalTableHandler.replacetable()}
//Handles loading/reloading logic.
final static class someInternalTablehandler{
getTable(){...}
createTableInstance(){...}
replaceTable{...}
}
}
如何在我的代码中实现上述逻辑......??
最佳答案
这听起来很像内存中的表缓存。查看 Java 缓存解决方案,如 EHCache,它解决了这个问题以及更多问题。
如果您想自己做,请在您的 Tableinfo 类中添加时间戳以存储上次访问时间。然后按照 jzd 的建议使用计时器任务遍历 TableInfo 列表以查找必须“卸载”的那些。
检查 here有关使用 Timer 和 TimerTask 的示例
关于java - 如何在 5 分钟后自动从内存中释放数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5393833/