2017-04-13 17 views
1

私は答えを探してみましたが、見つけられないようです。同じオブジェクトの複数のインスタンスを作成する場合、Javaはメソッドの実装を複製しますか?

Javaやその他の現代の言語が、メソッドのための何らかの種類の仮想マッピングを実行してオブジェクトの複製を最適化するかどうか不思議でした。オブジェクトの新しいインスタンスが作成されるたびに、それに関連付けられたメソッドをコピーし、それらをメモリの1つの場所にマッピングするのではなく、無駄に思えるでしょう。

多形性などのいくつかのケースがありますが、動作しない場合があります。

これは基本的な質問の詳細かもしれませんが、コンパイラがこれをどのように処理するのかは非常に興味があります。

ありがとうございます!

+3

メソッドはクラスに関連付けられており、インスタンスに関連付けられていません。 [JVM仕様の章の項目2.7]のイタリック体のコメントを参照してください(https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.7) – RealSkeptic

+0

@RealSkepticありがとうございます。乾杯。 – user0000001

答えて

1

は、厳密に言えば、それはあなたのビジネスのどれも:

Java仮想マシンがオブジェクトに対する特定の内部構造を強制しません。

JVM Spec

だから、あなたがいた場合は、独自のJVMを書くために、そしてあなたがオブジェクトのすべてのインメモリ表現にメソッドのコードのコピーを置くことにしましたいくつかの理由のために、あなたは次のようになります自由にすることができます。

しかし、言語がどのように定義されているかについてはさまざまな側面があります。つまり、同じクラスの2つのオブジェクトが異なるメソッドを持つことはできません。つまり、静的でない内部クラス、

したがって、各インスタンスのメソッドコードを複製するためのスペースが無駄であり、Javaの深刻な実装はありません。

関連する問題