ActiveMQ-消耗所有消息后未释放内存

ActiveMQ-消耗所有消息后未释放内存,activemq,activemq-cpp,Activemq,Activemq Cpp,我基于activemq cpp库的示例解决方案进行了测试。 在测试中,我将50000条消息发送到一个队列,在发送完所有消息后,我使用会话上的INDIVIDUAL\u ACKNOWLEDGE,以及每个已使用消息上的message->ACKNOWLEDGE()。消费者是异步的 发送消息前java.exe的内存(专用工作集):209320 KB。发送所有邮件后:412548 KB。使用所有邮件后:434637 KB。这意味着,虽然队列大小为0,但内存没有释放。 我错过了什么? 谢谢。除了上面提到的JV

我基于activemq cpp库的示例解决方案进行了测试。 在测试中,我将50000条消息发送到一个队列,在发送完所有消息后,我使用会话上的
INDIVIDUAL\u ACKNOWLEDGE
,以及每个已使用消息上的
message->ACKNOWLEDGE()
。消费者是异步的

发送消息前java.exe的内存(专用工作集):209320 KB。发送所有邮件后:412548 KB。使用所有邮件后:434637 KB。这意味着,虽然队列大小为0,但内存没有释放。 我错过了什么?
谢谢。

除了上面提到的JVM处理之外,还有许多其他因素在起作用。根据您启动生产者发送消息时代理的状态,可能会在代理上分配大量资源来创建队列和各种其他管理对象,这些资源随后将保留在内存中,以方便消息路由等。要真正分析内存使用情况并检查泄漏,您应该使用像Yourkit等工具。

From:
JVM在需要执行某些复杂逻辑时会获取内存。当java处理完任务后,JVM仍然会将该内存作为保留空间保留,并且不会释放回操作系统。这种体系结构有助于提高性能,因为JMV不必再次从底层操作系统请求相同的内存。它仍然在您在-Xmx JVM参数中定义的范围内-ie,这种行为是正常的。这是有道理的。谢谢