内存中的空 hazelcast 队列大小

empty hazelcast iqueue size in memory

我们在 Hazelcast 中创建了一个简单的队列:

    HazelcastInstance h = Hazelcast.newHazelcastInstance(config);
    BlockingQueue<String> queue = h.getQueue("my-distributed-queue");

我们假设 queue.size() == 0。

分布式队列"my-distributed-queue"是否使用任何内存资源?

背景:

我想使用 Hazelcast 创建大量 (>1k) 的短期队列(以保持项目组中的时间顺序)。我想知道如果 Hazelcast 中的 IQueue 对象被耗尽(大小==0)会发生什么。它会在内存中留下任何不会被 GC 清除的工件吗?

我分析了 VisualVM 中的堆转储,发现队列项存储为 IQueueItem 对象。当队列大小为 0 时,则没有 IQueueItem 实例。但是还有其他不可移动的人工制品吗?感谢您的帮助。

每个结构都有一些固定成本,即使它不包含任何数据。成本相当低,您可以在此处查看支持每个队列实例的结构:https://github.com/hazelcast/hazelcast/blob/master/hazelcast/src/main/java/com/hazelcast/queue/impl/QueueContainer.java

您可以随时销毁不需要的队列 - 只需调用 destroy() 方法 Hazelcast 提供的每个结构都实现此接口。