이번 글에서는 오브젝트 클래스에 대해서 알아보도록 하겠습니다.
Object 클래스에 대해서 알아보기 전에, 가비지 컬렉터와 인스턴스 소멸에 대해서 이야기 해보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 |
public class MyName {
String objName;
public MyName(String name)
{
objName = name;
}
protected void finalize() throws Throwable{
super.finalize();//finalize메소드 오버라이딩
System.out.println(objName+"이 소멸되었습니다.");
}
public static void main(String[] args) {
MyName obj1 = new MyName("인스턴스1");
MyName obj2 = new MyName("인스턴스2");
obj1 = null;//가비지 컬렉션의 대상
obj2=null;//가비지 컬렉션의 대상
System.out.println("프로그램을 종료합니다.");
//finalize 메소드는 호출 되지 않을 수 있다.
//Garbage Collection이 실행되는 시기와 인스턴스의 완전한 소멸의 시기는 차이가 날 수 있다.
}
} |
cs |
소스코드를 보시면 obj1 과 obj2 둘다 값이 null입니다.
객체가 가지고 있는 주소가 없습니다. 그래서 가비지 컬렉션의 대상이 됩니다.
가비지 컬렉션은 프로그램 수행 중 일어날 수도 있고, 프로그램이 종료된 후에 수행 될 수도 있습니다.
가비지 컬렉션은 한 번도 발생하지 않을 수 있다. |
가비지 컬렉션이 발생하면, 소멸의 대상이 되는 인스턴스는 결정 되지만 이것이 실제 소멸로 바로 이어지지는 않는다. |
인스턴스의 실제 소멸로 이어지지 않은 상태에서 프로그램이 종료될 수도 있다. 종료가 되면 어차피 인스턴스는 소멸된다. |
따라서 반드시 finalize 메소드가 반드시 호출되기를 원한다면 아래에서 보이는 코드가 추가로 삽입되어야 한다. |
다음은 가비지 컬렉션에 관한 메소드들 입니다.
System.gc(); |
가비지 컬렉션을 명령한다. |
System.runFinalization(); |
가비지 컬렉터에 의해서 소멸이 결정된 인스턴스를 즉시 소멸하라. |
'Java' 카테고리의 다른 글
제네릭을 메소드에 적용하기 (0) | 2017.09.23 |
---|---|
자바 제네릭 / java generic (0) | 2017.09.23 |
이클립스에서 api 소스 보기 / attach source (0) | 2017.09.23 |
자바 3개의 숫자를 삼항 연산자로 비교하는 예제 / 최대 값, 중간 값, 최소 값 출력하는 예제 (0) | 2017.09.22 |
자바 연필 나눠 가지기 예제 java (0) | 2017.09.22 |
댓글