2016-06-24 4 views

答えて

3

あるJavac

おかげでは、オブジェクトのサイズを知りません。 JVMはこれらの詳細を抽象化します。

コンパイラは、CまたはC++のようなネイティブコンパイル言語では、オブジェクトを大きな構造体内に組み込むとき、またはスタックに割り当てるときに、オブジェクトのサイズを知る必要があります*ヒープ割り当ての場合、動的なサイズのオブジェクトを持っていますが、これは非常に危険であり、正しく取得するのは難しいです。 Cでは、これは伝統的に空の配列で構造体を終了し、余分なスペースを割り当てることによって行われます。

実際には、既知のサイズと未知のサイズのタイプを区別します。後者は、限られた環境でのみ使用できます。 C/C++には、基本的に不透明なポインタとしてしか使えない、不完全な型の同様の概念があります。

*技術的には、Cはスタック上に可変サイズの配列を許可します。

+0

ありがとうございました。つまり、JVMは実際に(実行時に)必要なときにオブジェクトのサイズを決定し、そのオブジェクトがヒープ領域または非ヒープ領域にあるかどうかは関係ありません。また、C++コンパイラでは、実行時に(スタック割り当ての場合は、少なくとも理論的には)それを判断する機会がありますか? – zgulser

+0

@zgulser JVMは何でもしたいことができます。実際には、オブジェクトのサイズはそのクラス定義(実行時に一度ロードされる)によって固定され、最適化できない限り、すべてのオブジェクトはヒープ割り当てされます。配列には特別な処理があります。 – Antimony

+0

どのように配列を処理するのですか? – zgulser

関連する問題