3

このリンクJava Criticismを読んだとき。セクション大配列。私が理解していない2つのポイントがあります:

また、Java には真の多次元配列 (単一の間接化によってアクセスされるメモリの連続して割り当てられた単一ブロック) がないため、科学技術計算のパフォーマンスが制限されます。

Cでは、多次元配列は要素の連続したメモリにすぎないことを知っています。上記のセクションのように、Java の各行はオブジェクトであり、複数の行は複数のオブジェクトと同様であり、メモリ内で連続していませんよね?

Java は、231 - 1 (約 21 億) 要素を超える配列をサポートしていないことで批判されています... 配列は int 値でインデックス付けする必要があります... 長いインデックス値を持つ配列コンポーネントにアクセスしようとすると、コンパイルが失敗します。時間誤差

これは、長い整数で配列コンポーネントにアクセスできる場合、配列サイズを大きくできるということですか? その場合、この配列の制限サイズは long のサイズですよね?

ありがとう :)

4

1 に答える 1

3

... Javaの各行はオブジェクトであり、複数の行は複数のオブジェクトと同じように、メモリ内で連続していませんね。

それは正しいです。Java多次元配列は配列の配列であり、各配列は個別のオブジェクトとして表されます。

これは、長整数で配列コンポーネントにアクセスできる場合、配列サイズが大きくなる可能性があることを意味しますか?

いいえ。Java配列の最大サイズは2^31-1要素です。

JLSはJLS10.4でこれを言っています

「配列はint値でインデックス付けする必要があります。単項数値昇格(§5.6.1)の対象となり、int値になるため、short、byte、またはchar値もインデックス値として使用できます。

インデックス値が長いアレイコンポーネントにアクセスしようとすると、コンパイル時エラーが発生します。」


要するに、あなたがリンクしたページは、Javaが非常に大きな配列の使用を必要とするアプリケーションには理想的ではないことを指摘するのに正しいです。(制限を回避することは可能ですが、基になる配列表現をオブジェクトとしてラップせずにきれいに行うことはできません。これにはパフォーマンスへの影響があり、[...]インデックス作成に構文を使用できないことを意味します。)

于 2012-10-06T02:41:44.003 に答える