私は、バイナリのディスク上とインスタンス化されたオブジェクトごとに、Javaインターフェイスがどのくらいのスペースを占めるかを理解しようとしています。義務的な「すべてのJVMの実装は異なるかもしれません」免責事項、私は100%の正確な回答ではなく、これがどのように処理されるかの本質を理解することにもっと関心があります。Javaインターフェイスにはどのくらいのスペース(バイナリ/メモリ)が必要ですか?
単純なインターフェース(静的な最終変数なし、デフォルトの実装なし)を仮定すると、これはバイナリでどのくらいのスペースを取るのですか?私は、人間が読めるクラス名は、デバッグ/リフレクションのために格納する必要があり、おそらくいくつかの一意のクラス識別子を格納する必要があると仮定します。このインタフェースを実装するオブジェクトがインスタンス化されると、インタフェースがオブジェクトのメモリ内表現に何バイト追加するか
これは非常に意味のある質問ではなく、クラスファイル形式が変更され、JVMの実装が変更されるため、回答は時間の経過と共に変化します。おそらく、さまざまなプラットフォーム上で異なる答えを持っています。もしあなたが "答え"があなたに与えるものと、知ることが重要な理由について説明したのかもしれません。確かに唯一の答えは、 "...オーバーヘッドの余分なバイト数..."は "それは依存している"ことです。 –
それはコップアウトの答えではなく、唯一の有効な答えです*。 SOは、今日の一人の質問に答えることだけに留まらず、長期的な情報の保管場所です。明日の最新のJavaについて正確なことは明日は関係がないかもしれないし、今日Javaの別のバージョンを使っている人には関係がないかもしれない。 – Adrian
JVMバイトコード仕様を読みます。 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html –