ThreadPoolExecutor 中使用 BlockingQueue 的内存占用
Memory usage by using BlockingQueue in ThreadPoolExecutor
我注意到每个 Runnable 对象的大小约为 600KB。我正在使用固定大小为 10000 的 BlockingQueue。从日志消息中,我看到所有 9864 个对象都已放入队列中。我没有看到任何内存使用量急剧增加。队列是否应该消耗 6GB (600KB x 9864) 内存?
- 首先,BlockingQueue只有引用,所以只是
BlockingQueue 占用的内存非常小。
- 其次,重要的不是队列中有多少对象,而是有多少
唯一对象(队列可能有一百万个对一个对象的引用)。
- 最后,如何计算每个 Runnable 对象的大小?还,
每个 Runnable 对象都有很多指向另一个对象的链接,但是
这个对象的一些可以在不同的 Runnable 对象之间共享,
因此,如果第一个 Runnable 对象的大小约为 600KB,这并不意味着
其他 Runnable 对象也将如此大。
我注意到每个 Runnable 对象的大小约为 600KB。我正在使用固定大小为 10000 的 BlockingQueue。从日志消息中,我看到所有 9864 个对象都已放入队列中。我没有看到任何内存使用量急剧增加。队列是否应该消耗 6GB (600KB x 9864) 内存?
- 首先,BlockingQueue只有引用,所以只是 BlockingQueue 占用的内存非常小。
- 其次,重要的不是队列中有多少对象,而是有多少 唯一对象(队列可能有一百万个对一个对象的引用)。
- 最后,如何计算每个 Runnable 对象的大小?还, 每个 Runnable 对象都有很多指向另一个对象的链接,但是 这个对象的一些可以在不同的 Runnable 对象之间共享, 因此,如果第一个 Runnable 对象的大小约为 600KB,这并不意味着 其他 Runnable 对象也将如此大。