[JAVA 기초] 여기서 가비지 컬렉션이 발생하는 이유가 뭔가요?
조회수 1019회
int[ ] n = new int [10];
for(int i=0; i<10; i++) {
Scanner s = new Scanner(System.in);
n[i] = s.nextInt();
}
이 코드에서 for 문이 10번 반복되는 동안 new Scanner(System.in); 으로 할당받은 9개의 객체들이 가비지가 된다는데
10개의 배열 원소(주소)에 객체를 하나씩 넣는건데 왜 가비지가 되는건가요?
가비지가 되면 n[0] ~n[8] 까지는 아무 값도 없는건가요?
1 답변
-
int[] n = new int [10]; for(int i=0; i<10; i++) { Scanner s = new Scanner(System.in); n[i] = s.nextInt(); }
코드를 잘 보시기 바랍니다.
n은 int 배열입니다. 즉 int 값이 저장됩니다.
for 반복문의 s 객체는 int 값만 얻는 용도이고 그렇게 얻은 int값은 배열에 저장됩니다. s객체의 scope 은 for 반복문안에 한정됩니다.
for 가 반복하면 다시 s는 다른 새로운 객체가 할당됩니다. 그전의 객체 s는 접근할 수 없는 객체가 되고 가비지 대상이 됩니다.
즉 배열의 값들과 Scanner 객체는 무관합니다. int 값은 배열에 복사되어 저장된 것이고 Scanner 객체는 gc 대상이되고 정리 됩니다.
c/c++ 같은 gc가 없는 언어에서는 위와 같은 코드는 메모리 leak 되는 것이지만(s를 delete 안했으므로) 자바는 gc가 제공되므로 무척 편리한 겁니다.
댓글 입력