有界队列开销

时间:2013-03-13 02:02:27

标签: java queue

我在回答以下问题时遇到问题,我在下面列出了我的答案。谁能告诉我哪里出错了?谢谢!

假设整数需要2个字节的空间,而引用需要4个字节的空间。还假设最大队列大小为200.

假设一个包含int的队列,需要多少开销空间(以字节为单位),用于:

The text's bounded array-based queue holding 20 elements? My Answer: 840
The text's bounded array-based queue holding 100 elements? My Answer: 1000
The text's bounded array-based queue holding 200 elements? My Answer: 1200
The text's reference-based queue holding 20 elements? My Answer: 80
The text's reference-based queue holding 100 elements? My Answer: 400
The text's reference-based queue holding 200 elements? My Answer: 800

最后,对于什么大小的队列,基于数组和基于参考的方法使用大约相同数量的开销空间?我的回答:200个元素的队列

2 个答案:

答案 0 :(得分:1)

1)int是4个字节,但集合不适用于基元,因此队列中的int将用Integer表示,Integer是一个对象,1 Integer占用16个字节。

2)它依赖于队列实现,在链接队列的情况下,每个元素将与包含2-3个引用的链接相关联,每个链接将占用30多个字节

3)阅读http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

答案 1 :(得分:1)

我教授的解释: 因为教科书中的Queue ADT包含泛型类型元素,所以队列中的每个元素都存储对象的引用(类型为Integer,Double,String等。它们都是引用类型(包装类)而不是基本类型)。因此,对于使用Integer作为元素类型的基于数组的Queue,每个数组槽都包含对Integer对象的引用。由于基于数组的实现具有固定大小的底层数组,因此在创建队列时必须为阵列预分配内存。所需的总内存空间是(数组大小(与引用数相同))x(4字节)+(整数对象数)x(2字节)。

就基于引用的整数队列而言,每个元素都是一个链表节点,它有两个字段:对Integer对象的引用和对链表中下一个节点的引用。换句话说,每个节点都有两个引用。因此,所需的总内存空间是(节点数(与整数对象的数量相同))x 2 x(4字节)+(整数对象数)x(2字节)。

相关问题