我们在Hazelcast中创建一个简单的iqueue:
HazelcastInstance h = Hazelcast.newHazelcastInstance(config);
BlockingQueue<String> queue = h.getQueue("my-distributed-queue");
我们假设queue.size()== 0。
分布式队列“my-distributed-queue”是否使用任何内存资源?
背景:
我想使用Hazelcast创建大量(> 1k)短期队列(用于保持项目组中的时间顺序)。我想知道如果Hazelcast中的IQueue对象耗尽(size == 0)会发生什么。是否会在内存中留下任何不会被GC清理的工件?
我已经在VisualVM中分析了堆转储,并且我发现队列项存储为IQueueItem对象。当队列大小为0时,则没有IQueueItem实例。但还有其他没有可移动的文物吗?求助。
答案 0 :(得分:1)
每个结构都有一些固定成本,即使它不包含任何数据。成本相当低,您可以在此处查看支持队列的每个实例的结构:https://github.com/hazelcast/hazelcast/blob/master/hazelcast/src/main/java/com/hazelcast/queue/impl/QueueContainer.java
一旦你不需要它就可以销毁队列 - 只需调用destroy()方法Hazelcast提供的每个结构都实现了这个接口。