0

これが私が考えたことです:

  1. JVM は、文字列をファイル システムからメイン メモリにコピーします。
  2. JVM は文字列をメイン メモリから Java ヒープにコピーします。
  3. これを使って。

そうですね?つまり、実際には2段階のコピーがあります。

4

2 に答える 2

1

vea2 つ以上のコピーが存在する可能性があります。読み方に大きく依存します。

BufferedReader にラップされた FileReader の一般的なケースを考えてみましょう。

BufferedReader.readLine() を呼び出すと、3 つのコピーが取得されます。

1) BufferedReader は (開始するために) 空であるため、FileReader で read(char[]) を呼び出します。

2) FileReader (JVM の C 層) は、uint8[] バッファに対して read() システム コールを行います。(コピー 1)

3) 最良の場合、FileReader は unit8[] の内容を変換し、その結果を BufferedReader によって提供される char[] にコピーします (コピー 2)。(InputStreams があり、結果が文字列ではなく byte[] であったとしても、このコピーは引き続き存在することに注意してください。)

4) 次に、readLine() は char[] を行末までコピーして文字列にします。(コピー3)。

ほとんどの場合、すべてのコピーについて心配する必要はありません。バッファーは小さく、オーバーヘッドは最小限です。

ロブ

于 2013-06-26T03:43:30.040 に答える
0

Java プログラムが起動すると、Java 仮想マシンはオペレーティング システムからメモリを取得します。

Java 仮想マシンまたは JVM は、このメモリを必要に応じて使用します。このメモリの一部は Java ヒープ メモリと呼ばれます。

Java のヒープは通常、アドレス空間の最下部に位置し、上に移動します。

new 演算子を使用してオブジェクトを作成するか、別の方法でオブジェクトを作成するたびに、オブジェクトにヒープからメモリが割り当てられます。オブジェクトが死ぬかガベージ コレクションが行われると、メモリは Java のヒープ領域に戻ります。

Java ヒープは、オペレーティング システムの構成に応じて、メイン メモリ (RAM) またはディスク、またはその両方にある可能性があります。

于 2013-06-26T03:51:54.510 に答える