<Garbage collection>
1)참조되지 않는 힙 영역의 메모리(멤버 변수)를 가상머신(JVM)이 자동으로 수거하는 기능
-> 멤버 변수가 사용되지 않을 때(참조되지 않을 때) 자동으로 수거된다.
ex.
Hi hi = new Hi();
hi.a = 100;
hi = null; ---> gc대상으로 등록됨(null값으로 초기화되면 hashcode 끊기고 참조가 안 되니까)
*Heap 메모리 안 영역
eden - survivor - tenure(가비지 컬렉션 일어나는 영역) - permanent generation
2)gc는 우선순위가 낮으며, 주로 모든 스레드(thread) 실행이 끝나고 여유가 생기면 실행된다(수거한다).
System.gc(); ---> 강제수거명령. 직접 수거명령을 내리기 전까지는 jvm이 알아서 처리한다.
3)강제 수거는 별로 권장하지 않으며, 자동으로 수거하는 것이 바람직하다.
<예제>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
class Garbage {
int objNo;
public Garbage(int n) {
objNo = n;
System.out.println("Garbage class " + objNo + "이 만들어졌습니다.");
}
protected void finalize() throws Throwable {
//finalize: gc가 실행되면 자동 호출되는 메소드
System.out.println("Garbage class " + objNo + "에서 쓰이던 메모리가 수집되었습니다.");
//뭐가 제거되는 알기 위한 출력
super.finalize(); //상위 메소드 한번 더 호출
}
}
public class GarbageTest {
public static void main(String args[]) {
Garbage[] ga = new Garbage[10]; //객체 배열변수
for(int i = 0; i < ga.length; i++) {
ga[i] = new Garbage(i)
//객체의 생성 -> 10번의 new를 만나 영역을 생성
}
for(int i = 0; i < ga.length; i++) {
ga[i] = null; //메모리 참조 삭제
}
System.gc() //강제수거명령!
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
*Object = 모든 클래스의 가장 최상위 클래스. 자바 컴파일러는 일반 클래스를 object 하위 클래스로 자동 상속시킨다.
*finalize: gc가 수거될 때 콘솔 창에 뜨도록 설정된 메소드
'20.03 ~ 20.08 국비교육 > JAVA' 카테고리의 다른 글
클래스 상속관계에서의 생성자 (0) | 2020.03.27 |
---|---|
상속, 오버라이딩(Overriding) (0) | 2020.03.26 |
접근제한자 (0) | 2020.03.26 |
생성자의 생략, 코드 중복 (0) | 2020.03.25 |
변수 유효범위 (0) | 2020.03.24 |