これが私が考えたことです:
- JVM は、文字列をファイル システムからメイン メモリにコピーします。
- JVM は文字列をメイン メモリから Java ヒープにコピーします。
- これを使って。
そうですね?つまり、実際には2段階のコピーがあります。
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)。
ほとんどの場合、すべてのコピーについて心配する必要はありません。バッファーは小さく、オーバーヘッドは最小限です。
ロブ
Java プログラムが起動すると、Java 仮想マシンはオペレーティング システムからメモリを取得します。
Java 仮想マシンまたは JVM は、このメモリを必要に応じて使用します。このメモリの一部は Java ヒープ メモリと呼ばれます。
Java のヒープは通常、アドレス空間の最下部に位置し、上に移動します。
new 演算子を使用してオブジェクトを作成するか、別の方法でオブジェクトを作成するたびに、オブジェクトにヒープからメモリが割り当てられます。オブジェクトが死ぬかガベージ コレクションが行われると、メモリは Java のヒープ領域に戻ります。
Java ヒープは、オペレーティング システムの構成に応じて、メイン メモリ (RAM) またはディスク、またはその両方にある可能性があります。