java.lang.Runtime 클래스는 Object 클래스의 하위 클래스로, 프로그램이 실행되고 있는 환경에 대한 다양한 정보에 접근할 수 있도록 지원합니다. Java 런타임 환경은 각 애플리케이션마다 이 클래스의 단일 인스턴스를 자동으로 생성하여 연결해 줍니다.
흥미로운 점은 Runtime 클래스에 public 생성자가 없다는 것입니다. 따라서 개발자가 new 키워드로 직접 인스턴스를 생성할 수 없으며, 반드시 getRuntime() 메서드를 호출하여 현재 Runtime 객체의 참조를 얻어야 합니다. 이러한 설계는 싱글톤(Singleton) 패턴을 기반으로 하여, JVM 전체에서 하나의 Runtime 객체만 존재하도록 보장합니다.
문법(Syntax)
public class Runtime extends Object
Runtime 클래스의 주요 메서드
- addShutdownHook(): JVM 종료 시점에 실행될 스레드(후크)를 등록합니다.
- exec(): 외부 프로세스나 명령어를 실행합니다.
- exit(): 현재 실행 중인 JVM을 종료합니다.
- freeMemory(): JVM에서 현재 사용 가능한 메모리 양을 반환합니다.
- gc(): 가비지 컬렉터(Garbage Collector)를 실행 요청합니다.
- halt(): 종료 후크를 실행하지 않고 즉시 JVM을 강제 종료합니다.
- load(): 동적 라이브러리를 로드합니다.
예제(Example)
다음 예제는 addShutdownHook() 메서드를 활용하여 JVM이 종료되는 시점에 특정 작업을 수행하는 방법을 보여줍니다.
public class RuntimeTest {
static class Message extends Thread {
public void run() {
System.out.println(" Exit");
}
}
public static void main(String[] args) {
try {
Runtime.getRuntime().addShutdownHook(new Message());
System.out.println(" Program Started...");
System.out.println(" Wait for 5 seconds...");
Thread.sleep(5000);
System.out.println(" Program Ended...");
} catch(Exception e) {
e.printStackTrace();
}
}
}실행 결과(Output)
Program Started... Wait for 5 seconds... Program Ended... Exit
실행 결과를 보면 "Program Ended..."가 출력된 후 프로그램이 정상적으로 종료되면서, 사전에 등록해 둔 종료 후크(Shutdown Hook)가 마지막에 "Exit"를 출력하는 것을 확인할 수 있습니다. 이처럼 Runtime 클래스는 리소스 정리, 로그 기록, 임시 파일 삭제 등 프로그램 종료 시 반드시 처리해야 할 작업을 안전하게 수행할 수 있게 해주는 강력한 도구입니다.