Java应该从内存中删除一段时间(生存时间)变量

时间:2017-07-10 07:59:42

标签: java sockets client-server

在简单的客户端服务器程序java中,我们从客户端获取键值和ttl,如果为键设置了生存时间(ttl)值,则应该在ttl过期后从内存中删除它。 输入是关键值time_to_live 例如: 你好60 在上述情况下,应在设置60秒后删除密钥hi。关于这个的任何想法?

1 个答案:

答案 0 :(得分:0)

这里有两个方面。

首先,Java是一种垃圾收集语言。这意味着您没有完全控制对象收集的时间点。您控制的方面是:指向该对象的“alive”引用。只要没有活动引用指向某个对象,该对象就有资格进行垃圾回收。然后GC将决定何时摆脱该对象。

但你的问题(最有可能)会走向另一个方向。您需要做什么:实现您自己的缓存类。这些可以简单地在添加新条目时采用时间戳;然后有一个监视器线程,每隔x秒运行一次。监视器线程只删除缓存中具有“生命周期”之前的时间戳的所有条目。

当然:这不是一件容易实现的事情(因为你必须避免该监视器线程与试图从缓存中读取的其他线程之间的竞争条件)。