Java设置减少了内存占用

时间:2015-02-07 14:24:04

标签: java set compression

问题如下: 我们正在开发Java客户端 - 服务器产品,它需要通过过滤来保护DDoS。 每个请求都包含客户端ID。 如果服务器在短时间内收到客户端过多的请求,客户端的ID将被添加到黑名单中。 服务器过滤请求,如果它是黑名单中的id,则忽略请求。

内存消耗是一个问题。需要最小化黑名单消耗的内存。

使用HashSet或TreeSet是不合适的。

是否存在实现这种集合的Java库,其中内存占用量小于num_elements * size_of_element?有可能吗?

或者如果不可能,什么是Java集实现,内存占用最小?

1 个答案:

答案 0 :(得分:1)

  

是否存在实现这种集合的Java库,其中内存占用量小于num_elements * size_of_element?

我不知道这样的图书馆。

  

有可能吗?

理论上是的。您可以使用某种形式或压缩来表示一组客户端IP地址,其空间小于N * sizeof(IP地址)。

然而......

您需要的其他事项(我想)是快速查找IP地址和快速更新数据。这使得这成为一个难题,特别是如果您尝试使用Java编写代码,这不是实现最小内存数据结构的好语言。


实际上,还有另一种控制内存使用的方法。使用将accessOrder设置为true时创建的LinkedHashMap。这导致被委托的地图以LRU顺序排序。然后每次向地图添加条目时,请检查它是否太大。如有必要,请删除第一个条目...最近最少使用的条目。