在ThreadPoolExecutor中使用BlockingQueue的内存使用情况

时间:2015-12-14 23:14:50

标签: java runnable threadpoolexecutor blockingqueue

我注意到每个Runnable对象的大小约为600KB。我正在使用BlockingQueue,修复大小为10000.从日志消息中,我看到所有9864个对象都已放入队列。我没有看到任何内存使用量急剧增加。队列应该消耗6GB(600KB x 9864)的内存吗?

1 个答案:

答案 0 :(得分:2)

  1. 首先,BlockingQueue只有引用,所以只是 BlockingQueue占用的内存非常少。
  2. 其次,重要的不是Queue中有多少对象,而是多少 唯一对象(队列可能有一百万个引用一个对象)。
  3. 最后,你如何调用每个Runnable对象的大小?也, 但是,每个Runnable对象都有很多指向另一个对象的链接 这个对象中的一些可以在不同的Runnable对象之间共享, 因此,如果第一个Runnable对象的大小约为600KB,那就不是什么意思 其他Runnable对象也会如此之大。