0

次の質問に答えるのに問題があります。以下に私の答えを含めました。誰かが私がどこで間違っているのか教えてもらえますか?ありがとう!

整数には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要素のキュー

4

2 に答える 2

1

1)intは4バイトですが、コレクションはプリミティブでは機能しないため、キュー内のintはオブジェクトである整数で表されます。1整数は16バイトを占めます。

2)キューの実装によって異なります。リンクされたキューの場合、各要素は2〜3個の参照で構成されるリンクに関連付けられ、各リンクは30バイト以上を占有します。

3)http://www.javamex.com/tutorials/memory/object_memory_usage.shtmlを読みます

于 2013-03-13T02:22:17.443 に答える
1

私の教授からの説明: 教科書の Queue ADT はジェネリック型要素を保持するため、キュー内の各要素は (Integer、Double、String などの型の) オブジェクトへの参照を格納します。それらはすべて参照型 (ラッパー クラス) ではなく、プリミティブ型より)。したがって、要素タイプが Integer の配列ベースの Queue の場合、各配列スロットは Integer オブジェクトへの参照を保持します。配列ベースの実装には固定サイズの基になる配列があるため、キューの作成時に配列にメモリを事前に割り当てる必要があります。必要な合計メモリ容量は、(配列のサイズ (参照の数と同じ)) x (4 バイト) + (整数オブジェクトの数) x (2 バイト) です。

参照ベースの整数キューに関する限り、各要素はリンク リスト ノードであり、2 つのフィールドがあります。整数オブジェクトへの参照と、リンク リスト内の次のノードへの参照です。つまり、各ノードには 2 つの参照があります。したがって、必要な合計メモリ容量は、(ノードの数 (整数オブジェクトの数と同じ)) x 2 x (4 バイト) + (整数オブジェクトの数) x (2 バイト) です。

于 2016-03-29T18:52:43.637 に答える