Download presentation
Presentation is loading. Please wait.
Published by민수 낭 Modified 8년 전
1
SCJP
2
Garbage Collection Garbage Collector( 이하 GC) 가 Heap 영역 에 할당된, 더 이상 사용되지 않는 메모리인 Garbage 를 다른 객체가 사용할 수 있도록 정리하는 것. C++ 에서의 메모리 해제 int* v=new int; delete v; int* ary=new int[10000]; delete [] ary;
3
Garbage Collection 방법 객체를 가리키는 참조 변수가 null 로 지정되 거나 객체를 더 이상 참조하지 않을 때 gc 의 후보가 된다. gc 의 후보가 된다고 해서 즉각적으로 gc 가 수행되는 것은 아니다. 여유 메모리가 부족하거나 사용자의 입력을 기다리는 경우와 같이 프로그램이 활동하지 않을 경우 gc 가 수행된다. 왜 ? gc 는 매우 복잡한 과정을 거쳐야 하므로 수 시로 gc 를 수행하면 프로그램 성능에 좋지 않다.
4
Garbage Collection 특징 Automatic memory management 라고 부르기도 함. gc 는 프로그래머에 의해 구현될 수 없다. gc 대상은 Object 이지 reference 가 아니다. 할당된 메모리를 명시적으로 해제할 수 없다. gc 의 내부는 완벽이 캡슐화 되어, 그 동작을 알 수 없다. gc 가 정확히 언제 수행되는지 알 수 없다. 다른 참조 변수가 참조하고 있다면 gc 의 대상이 아니다.
5
Garbage Collection 예제 1. gc 대상이 되는 경우 String str=new String(“scjp”); str=null; 참고. String str=new String(“aaa”); String str=“aaa”; 위 두 개의 수행은 같다.
6
Q1 Java 에서 유일한 unsigned data type 는 ? 그 값의 범위는 ?
7
Garbage Collection 예제 2. gc 대상이 되는 경우 String str; str=new String(“scjp”); str=new String(“scjd”); 같은 참조 변수 str 에 두번의 메모리 할당 이 수행되었다. 그렇다면 첫번째 할당된 메모리에 대한 gc 가 수행된다.
8
Garbage Collection 예제 3. gc 대상이 되는 경우 public void print(){ String str=new String(“aaa”); } print() 함수에 진입한 후 리턴 될 때, str 이 reference 하는 문자열 “aaa” 는 더 이상의 참조가 없으므로 gc 의 대상이 된 다.
9
Garbage Collection 예제 3. gc 대상이 되지 않는 경우 public String print(){ String str=new String(“aaa”); return str; } public static void main(String args[]){ String myStr=print(); } 앞의 경우와는 다르게 이 경우에는 gc 의 대 상이 되지 못한다. myStr 이 reference 하기 때문이다.
10
Garbage Collection 예제 3. gc 의 대상이 아닌 경우 String str1=new String(“aaa”); String str2=str1; str1=null; str1 을 null 로 할당 했다 하더라도, str2 가 참조를 하고 있으므로 gc 의 대상 이 아니다.
11
Q2 class Test { public Test(){ this.a=10; b=20; this.c=30; } private int a; private int b; private int c; } class MainClass{ public static void main(String args[]){ Test test=new Test(); System.out.println(test); } 다음과 같은 출력을 할 수 있도록 위 프로그램을 수정하세요. // 출력결과 a= 10; b= 20 c= 30
12
Q3 byte, long, double, char, int, short, float 다음을 묵시적 형 변환이 일어날 수 있는 순서로 나열 하라. Ex) short -> float -> …. -> ….
13
Q4 public static void main(String args[]){ int ary[]=new int[10]; try{ System.out.println(ary[num]); }catch(Exception e){ System.out.println("exception"); }finally{ System.out.println("finally"); } 1. num= -1 인 경우 출력 2. num= 5 인 경우 출력 3. num= 10 인 경우 출력
14
Garbage Collection class Test{ public Test(){ 파일 열기 작업을 한다. } Test test=new Test(); 위의 프로그램은 제대로 작성되지 못한 프로그램이다. 만약 test 에 null 이 할달 되거나 new Test(); 가 더 이상 참조 되지 않는다면, 생성자에서 작업한 파일 열기 작업에 대한 파일 닫기 작업을 수행하지 않게 된다. class Test{ public Test(){ 파일 열기 작업을 한다. } public fileClose(){ 파일 닫기 작업을 한다. } Test test=new Test(); 와 같으 프로그래밍 하였더라도 test.fileClose() 함수를 호출 하지 않을 가능성이 있다.
15
Garbage Collection class Test{ public Test(){ 파일 열기 작업을 한다. } protected void finalize() throws Throwable{ 파일 닫기 작업을 한다. } Test test=new Test(); Java.lang.Object 의 finalize 메소드를 overriding 하여, 객체가 소멸 될 때 반드시 수행해야 하 는 루틴을 담아 놓는다. finalize() 메소드는 gc 에 의해 해당 객체가 소멸될 때 호출되는 함수이다. 앞서 설명한 바와 같이 finalize 함수의 호출 시키는 java VM 이 결정한다.
16
Garbage Collection
Similar presentations