メモリ構造
4536 ワード
プロセスメモリ構造
プログラムが実行されると、オペレーティングシステムはメモリにスペースを割り当てます.
割り当てられたメモリ領域はText,Data,Heap,Stackである.
Text
Readのみのため、この領域にデータを格納しようとすると、パーティション競合が発生し、プロセスが
Data
data領域には初期化データが格納され、bssには未初期化データが格納される
なぜ
->データ領域に格納されているデータは不揮発性ROMに格納されており、コストが高いため、RAMとROMに格納されているデータを区別する必要がある.
初期化されていないデータをROMに格納するのは無駄です
ではROMは読み取り専用で、どのように値を修正しますか?
->RAMにデータ領域をコピーし、実行時に変更した値
Heap
Stack
StackFrame スタック領域に格納された関数呼び出し情報
Stack vs Heap
(CPU効率管理->メモリ断片化x)
->スペースの有効な使用が保証されていない場合は、メモリフラグメント
JAVAメモリ管理
Java Garbage Collector
C言語では、mallocとfreeはユーザーによってheapメモリを管理されます.
Javaでは、Garbage Collectorが見ています.
次のコードで理解します.public class Main {
public static void main(String[] args){
String a = "Hello"
a += "World!"
System.out.println(a)
]
最初にaを割り当てると、スタックと臀部は以下のようになります.
そしてコードa += "World!"
文字列プラス記号演算の実行中に、既存のHelloWorldへ!追加するのではなく、文字列に対してプラス記号演算を実行した結果をheap領域に再割り当てします.これは以下の通りです.
Stackに新しい変数を割り当てるのではなく,Heap領域で文字列加算の結果を再生成することが分かる.既存のHelloを転送するa変数は、新しく生成された文字列を転送します.
では、既存のHello文字列は何ですか.
文字列を転送する変数がないため、Unreachableオブジェクトです.
JVMのGarbage Collectorは、Unreachableオブジェクトをメモリから優先的に削除します.
もしそうなら、その姿は次のようになります.
参考資料
https://velog.io/@cchloe2311/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0
https://velog.io/@koyo/development-common-sense-1
https://velog.io/@goserimgoserimgo/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0
https://yaboong.github.io/java/2018/05/26/java-memory-management/
Reference
この問題について(メモリ構造), 我々は、より多くの情報をここで見つけました
https://velog.io/@min0505/메모리-구조
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
public class Main {
public static void main(String[] args){
String a = "Hello"
a += "World!"
System.out.println(a)
]
a += "World!"
Reference
この問題について(メモリ構造), 我々は、より多くの情報をここで見つけました https://velog.io/@min0505/메모리-구조テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol