Javaで参照変数の大きさの違い。(ArrayListの対リスト)

バインイースChitteti:

私は離れての利点からという同僚と口論になったListインタフェースは、参照変数のためのArrayList <>の上にあり、我々はまた、使用リスト<>インタフェースオブジェクト参照のそれは軽量であるためArrayListに比べて少ないメモリを取るだろう。<> 。

私の仮定が間違っていますか?リストとArrayListの両方が同じ量の空間を占有しますか?

私は、参照変数のサイズを探してみました、が、何も私の食欲をwhettedません私は別のVMで参照変数のサイズを探していないんだけど、そこには、同じVM内の異なる参照変数の大きさの違いです。

質問にしてくださいコメントそれが重複しているので、私は削除することができます。私が検索し、複数のリソースから読み込まれ、結論を出すことができなかったしています

TJクラウダー:

すべての参照変数は、はい、同じサイズのものです。これは場所のカップルのJVM specifiationに接線方向にやや対処される:§2.2

:Javaプログラミング言語と同様に、Java仮想マシンは、タイプの2種類で動作プリミティブ型参照型:対応し、変数に格納することができる値の二種類は、メソッドによって返され、オペレート、引数として渡され、存在するプリミティブ値基準値

(その強調)

そして§2.6.1

単一のローカル変数は、型の値を保持することができbooleanbytecharshortintfloatreference、またはreturnAddressローカル変数のペアは、タイプの値を保持することができますlongか、double

(私の強調)

あなたが見ることができるように、それはサイズの違い(持っているもののうち呼び出しますが、int単一のJVM変数対に保存されているlong、たとえば、JVM変数のペアに格納される)を参照の一種類だけ、単一のJVM変数に収まるがあります。(明らかにそれらが密接に関連しているもののA JVM変数は、Javaソースコードレベルでの変数と同じものではありません。)


コメントでは、言いました:

ArrayListのの参照がリストの基準より多くの機能を持っているでしょうので、私は一般的な考えを持って...

これはあなたの誤解の源です。等、に含まれていない機能、参照は、それが基準を何に関連付けられた実装(クラス)に記載されたことをいう(オブジェクト)。例えば:

List<String> list = new ArrayList<>();

すなわち、型の変数宣言List (手振るジェネリック)のインスタンスを指すArrayList関連する実装(持つオブジェクトであり、ArrayListクラス)。参照オブジェクトが何よりも、メモリ内にあるJVMを伝えるだけのものです。あなたは決して直接対話番号(アドレス)を持つことができますがあなたは、(あなたが好きならそれはそれ以上に複雑だけれども、あるいはメモリアドレスとして)オブジェクトを一意に識別する番号として考えることができます。実装(クラス)がされていない複製複製がでないであろうことは、各オブジェクト(オブジェクト固有の状態データは、なく、それは、例えば使用する方法)のために、それがあったとしても参照は、オブジェクトにオブジェクト自体にあるであろう。ここにはないListので、オブジェクトListのインタフェースです。唯一存在するArrayListオブジェクト、LinkedListなどのオブジェクトは、

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=184249&siteId=1