안드로이드 개발자의 창고
[4일차 Java] 객체 생성 및 소멸/가비지 컬렉션(Garbage Collection) 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
객체 생성
- 객체를 만들면 메모리에 저장된다.
- JVM은 객체의 고유 ID 값을 부여한다.
- 변수에 객체를 넣으면 주소 값이 아닌 객체의 ID(숫자로 이루어짐) 값이 저장된다.
- ID를 가지고 객체에 접근하여 객체가 가지고 있는 요소를 사용하게 된다.
- 메모리 조각 모음(가비지 컬렉션)을 하더라도 ID는 변하지 않기 때문에 영향을 주지 않는다.
Java에서의 객체 소멸 시점
- 객체를 접근하기 위해 사용하는, 객체의 ID 값을 가지고 있는 변수가 하나도 없다면 소멸의 대상이 된다.
- 메모리 청소 작업(가비지 콜렉션)이 수행되면 소멸의 대상이 되는 객체는 모두 메모리에서 사라진다.
메모리 청소 시점
- JVM이 메모리가 부족하다고 판단하는 경우
- OS가 메모리가 부족하다고 판단하는 경우
- 프로그램이 종료된(JVM이 종료된) 경우
- 개발자가 코드를 통해 명시적으로 메모리 청소 명령을 날릴 경우
객체를 소멸 대상으로 만드는 방법
- 객체를 생성할 때 객체의 ID를 변수에 담지 않는다.
- 객체의 ID를 가지고 있는 변수에 Null 값을 넣어준다.
public class MainClass {
public static void main(String[] args) {
//객체를 생성한다.
TestClass1 t1 = new TestClass1();
System.out.printf("t1 : %s\n", t1);
//객체의 ID를 가지고 있는 변수를 통해 메소드를 호출한다.
t1.testMethod1();
// 객체 참조 변수에 null을 넣어준다.
t1 = null;
// 객체의 ID를 가지고 있던 변수에 null을 덮어 씌운 다음 메서드를 호출한다.
t1.testMethod1(); <<< 오류 발생 지점
}
}
class TestClass1 {
public void testMethod1() {
System.out.println("testMethod1이 호출되었습니다");
}
}
가비지 콜렉션(Garbage Collection)
- 쓰레기를 모아 버린다는 의미를 가지고 있다.
- 프로그래밍 언어에서 더이상 사용하지 않지만 메모리를 차지하고 있는 것들을 모아 제거하는 방법을 의미한다.
- 가비지 콜렉터(Garbage collector) : 가비지 컬렉션을 해주는 소프트웨어
- 가비지 콜렉션은 매우 부담되는 작업이기 때문에 너무 많이 실행하지 않는 것이 중요하다.
for(int i = 0 ; i < 100 ; i++) {
System.out.println(i);
// 가비지 콜렉터 가동
System.gc();
}
알게된 점 & 깨달은 점
- 객체는 JVM에 의해 메모리의 주소 값이 아닌 ID 값을 부여 받는다.
- 때문에 가비지 콜렉션이 일어나도 영향을 받지 않는다.
- 가비지 콜렉터 가동 명령 -> System.gc();
'Computer > Java' 카테고리의 다른 글
[7일차 Java] Static (0) | 2023.05.06 |
---|---|
[6일차 Java] 캡슐화 (0) | 2023.05.05 |
[6일차 Java] 접근 제한자 (2) | 2023.05.05 |
[6일차 Java] 오버라이딩(Overriding) (0) | 2023.05.05 |
[5일차 Java] 배열을 이용한 객체의 생성/오버로딩(Overloading)/가변형 매개변수/상속/다형성 (0) | 2023.05.05 |