Link
11-28 22:35
«   2020/11   »
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          
Archives
Today
1,731
Total
1,176,303
관리 메뉴

꿈 많은 사람의 이야기

자바 시스템 클래스(System 클래스) exit 메소드, 쓰레기 수집기(garbage collector) 메소드 본문

java

자바 시스템 클래스(System 클래스) exit 메소드, 쓰레기 수집기(garbage collector) 메소드

이수진의 블로그 이수진의 블로그 2017. 8. 18. 08:32

자바 프로그램은 OS상에서 바로 실행되는 것이 아니라 JVM 위에서 실행된다. 따라서 OS의 모든 기능을 자바 코드로 접근하기가 어렵다. 그러나 java.lang 패키지에 속하는 System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다.  그 기능은 프로그램 종료, 키보드 입력, 모니터 출력, 현재 시간 읽기 등이다.

System 클래스의 모든 필드와 메소드는 정적(static) 필드와 정적(static) 메소드로 구성되어 있다.


exit() 메소드

경우에 따라서는 강제적으로 JVM을 종료시킬 때도 있다. 이때 System 클래스의 exit()메소드를 출력하면 된다. exit() 메소드는 현재 실행하고 있는 프로세스를 강제 종료시키는 역할을 한다. 정상 종료일 경우 보통 매개변수에 0을 넣는다.
System.exit(0); 처럼 말이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch(no)
{
case 1:
    input(); break;
case 2:
    output(); break;
case 3:
    end(); break;
}
 
public void end()
{
    System.out.println("수고하셨습니다.");
    System.exit(0);
}
 
Colored by Color Scripter

위의 내용처럼 활용할 수 있다.

쓰레기 수집기 실행(Garbage Collector)

자바는 개발자가 메모리를 직접 코드로 관리하지 않고 JVM이 알아서 자동으로 관리한다. JVM은 메모리가 부족할 떄와 CPU가 한가할 때에 쓰레기 수집기(Garbage Collector)를 실행시켜 사용하지 않는 객체를 자동 제거한다.

예를 들어
A a = new A();
였다가
a = null;
이 되어 버리면 객체의 번지를 잃게 된다. 즉 참조 값을 잃는다.
이럴 경우 쓰레시 수집기에 의해 제거가 된다.

개발자는 필요할 때에 JVM에게 가비지 컬렉션을 해달라고 요청할 수 있다. 그것이 System.gc() 메소드이다. 이 메소드가 실행되면 바로 가비지 컬렉션을 진행하는게 아니라 빠른 시간내에 JVM이 실행시키려 한다.

근데 문제가 있다.
쓰레기가 생길 때마다 가비지 컬렉션이 동작한다면 프로그램의 속도가 저하될 수 있다. 그리고 메모리가 충분하다면 굳이 가비지 컬렉션을 실행할 필요가 없다.

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
public class GcExaple{
    
    public static void main(String[] args) {
        Employee emp;
        
        emp = new Employee(1);   //쓰레기가됨
        emp = null;  
        
        emp = new Employee(2);   //쓰레기가됨
        emp = new Employee(3);
        
        System.gc();
    }
}
 
 
class Employee
{
    public int eno;
    
    public Employee(int eno)
    {
        this.eno = eno;
    }
    
    public void finalize()
    {
        System.out.println("제거됨");
    }
}
 
Colored by Color Scripter

위 예제는 쓰레기 수집기를 동작시킨 예제이다. finalize()는 객체 소멸자이다. 쓰레기 수집기는 객체를 삭제하기 전에 마지막으로 객체의 소멸자를 실행한다.

그리고 현재 시각을 읽을 수 있는 메소드도 있다. 
currentTimeMillis() 메소드와 nanoTime() 메소드는 컴퓨터의 시계로부터 현재 시간을 읽어서 밀리세컨드(1/1000) 단위와 나노(1/1000000000) (맞나..?)세컨드 단위의 long 값을 리턴한다.

1
2
3
4
5
6
7
8
9
10
long time1 = System.nanoTime();
        
int sum = 0;
for(int i = 0 ; i <= 500 ; i++)
{
    sum += i;
}
        
long time2 = System.nanoTime();
System.out.println("소모 시간은 : "+(time2-time1)+" 걸렸습니다.");

처럼 사용이 가능하다.


0 Comments
댓글쓰기 폼