본문 바로가기

JAVA/DAY 08 _ 23.08.28

메모리2

int[] arr1 = new int[5];
arr1[0] = 50;
arr1 = new int[7];

System.out.println(arr1[0]);

 

// 1. stack메모리에 arr1을 생성, heap메모리에 00000배열을 가진 0xFF11 생성, arr1에 주소값 부여
// 2. arr1가 가르키는 주소값(0xFF11)의 [0]번째에 50을 넣어라
// 3. heap메모리에 0000000배열을 가진 0xCC11생성, arr1에 주소값 부여
//    (= heap메모리의 0xFF11 주소값과 모든 정보들은 소멸된다)
// 4. arr1이 가르키는 주소값에 아무런 정보도 입력되지 않은 상태에서 syso를 하면 0이 출력됨!

 

 

int[] arr1 = new int[3];
{
    int[] arr2 = new int[5];
    arr1 = arr2;
    int[] arr3 = new int[5];
    arr3 = null;

    arr2[0] = 1;
    arr2[1] = 5;

} System.out.println(arr1[1]);
// 나는 arr1에 값을 넣은적은없지만 arr2에 값을 부여했으니, 출력이되겠지?ㅎㅎㅎ

 

// 1. stack메모리에 arr1을 생성, heap메모리에 000  배열을가진 주소값 0xFF11생성, arr1에 주소값 부여
// 2. stack메모리에 arr2를 생성, heap메모리에 00000배열을가진 주소값 0xCC11생성, arr2에 주소값 부여
// 3. arr2에 부여된 주소값을 arr1에 똑같이 적용할거임 (= 0xFF11의 소멸)
// 4. stack메모리에 arr3을 생성, heap메모리에 00000배열을가진 주소값 0xDD11생성, arr3에 주소값 부여
// 5. arr3를 null을 적용하면서 arr3가 가르키는 주소값이 사라짐 (= 0xDD11의 소멸)
// 6. 스코프를 빠져나오는 순간 arr2, arr3이 소멸됨, 그러나 arr1이 남아있으므로 0xCC11은 유지되고있음!! ★★★

// 변수가 소멸됐을 때 heap메모리의 주소값들이 삭제될 가능성을 주의하란 소리임!

'JAVA > DAY 08 _ 23.08.28' 카테고리의 다른 글

이중배열2  (0) 2023.09.04
이중배열  (0) 2023.09.04
메모리의 소멸  (0) 2023.09.04
참조변수 & 힙메모리  (0) 2023.09.04
배열2  (0) 2023.09.04