私は離れての利点からという同僚と口論になったListインタフェースは、参照変数のためのArrayList <>の上にあり、我々はまた、使用リスト<>インタフェースオブジェクト参照のそれは軽量であるためArrayListに比べて少ないメモリを取るだろう。<> 。
私の仮定が間違っていますか?リストとArrayListの両方が同じ量の空間を占有しますか?
私は、参照変数のサイズを探してみました、が、何も私の食欲をwhettedません。私は別のVMで参照変数のサイズを探していないんだけど、そこには、同じVM内の異なる参照変数の大きさの違いです。
質問にしてくださいコメントそれが重複しているので、私は削除することができます。私が検索し、複数のリソースから読み込まれ、結論を出すことができなかったしています
すべての参照変数は、はい、同じサイズのものです。これは場所のカップルのJVM specifiationに接線方向にやや対処される:§2.2:
:Javaプログラミング言語と同様に、Java仮想マシンは、タイプの2種類で動作プリミティブ型と参照型。:対応し、変数に格納することができる値の二種類は、メソッドによって返され、オペレート、引数として渡され、存在するプリミティブ値と基準値。
(その強調)
そして§2.6.1:
単一のローカル変数は、型の値を保持することができ
boolean
、byte
、char
、short
、int
、float
、reference
、または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
などのオブジェクトは、