内存管理是通过MemoryUsage来管理的,broker启动时会创建一个SystemUsage 对象包括三个属性
1. MemoryUsage
2. StoreUsage
3. TempUsage
MemoryUsage 本质上一个计数器,是消息使用内存的记录。当做了Producer Flow Control(就是对队列主题进行内存限制)会给每一个destination创建一个SystemUsage ,MemoryUsage独立分配,StoreUsage,TempUsage继承broker的SystemUsage,当配置了splitSystemUsageForProducersConsumers(也就是生产者,消费者内存独立分配)实际上是生产者和消费者有独立的 MemoryUsage来计数。但是所有的内存都是从jvm里面分配的,默认是jvm的70%
参考资料:http://www.javacodegeeks.com/2012/12/activemq-understanding-memory-usage.html |