System 클래스

java.lang 패키지에 속해있어 따로 import하지 않아도 이용할 수 있는 클래스이다. 운영체제의 기능을 이용할 때 사용된다.

위와 같은 기능이 있다.

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

프로그램 종료(exit())

.exit()는 현재 실행중인 프로세스를 강제 종료시킨다.

System.exit()은 자동으로 SecurityManager.checkExit() 메소드를 호출시킨다. SecurityManager의 checkExit() 메소드를 오버라이드하여 종료 코드에 따른 예외처리가 가능하다.

public class Main {
    public static void main(String[] args) {

        SecurityManager securityManager = new SecurityManager() {
            @Override
            public void checkExit(int status) {
                System.out.println("status = " + status);
                if(status == 0) {
                    System.out.println("정상적으로 종료되었습니다.");
                } else {
                    System.out.println("비정상적으로 종료되었습니다.");
                    throw new SecurityException("예외처리를 해주세요.");
                }
            }
        };
        System.setSecurityManager(securityManager);

//        usualExit();
        unusualExit();
    }

    public static void usualExit() {
        System.out.println("정상적으로 프로그램을 종료시킵니다.");
        System.exit(0); // 0: 정상
    }

    public static void unusualExit() {
        System.out.println("비정상적으로 프로그램을 종료시킵니다.");
        System.exit(1); // 1: 비정상
    }
}

https://velog.velcdn.com/images%2Fjakeseo_me%2Fpost%2F4b39582c-ca6a-4ac7-9b55-4229e52c6f5d%2Fimage.png

가비지 콜렉터 실행(gc())

일반적으로 가비지 콜렉터는 CPU가 한가하거나 메모리가 부족할 때 JVM에서 자동으로 실행한다.

System.gc()를 실행하면 가비지 콜렉터 수행 시점을 조금 앞당길 수 있다.