자바 프로그램은 운영체제상에서 바로 실행되는 것이 아니라 JVM 위에서 실행
운영체제의 모든 기능을 자바 코드로 직접 접근하기란 어려움
java.lang 패키지에 속하는 System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다.
프로그램 종료, 키보드로 부터 입력, 모니터로 출력 . 메모리 정리, 현재 시간 읽기, 시스템 프로퍼티 읽기, 환경 변수 읽기 등이 가능,
System 클래스의 모든 필드와 메소드는 정적(Static) 필드와 정적 (Static) 메소드로 구성
프로그램 종료(exit())
경우에 따라서는 강제적으로 JVM을 종료 시킬 때도 있다.
System 클래스의 exit() 메소드를 호출
exit() 메소드는 현재 실행하고 있는 프로세스를 강제 종료시키는 역할
exit() 메소드는 int 매개값으로 지정
이값을 종료 상태값이라고 함
일반적으로 정상 종료일 경우 0으로 지정
비정상 종료일 경우 0 이외의 다른 값을 준다
System.exit(0);
어떤 값을 주더라도 종료가 되는데, 만약 특정 값이 입력 되었을 경우에만 종료하고 싶다면,
자바의 보안 관리자를 직접 설정해서 종료 상태값을 확인하면 된다.
System.exit() 실행되면 보안관리자의 checkExit() 메소드가 자동 호출
종료 상태값을 조사해서 특정 값이 입력되지 않으면
SecurityException 을 발생시켜 System.exit()를 호출한 곳에서 예외 처리
checkExit()가 정상적으로 실행되면 JVM은 종료
System.setSeurityManager(new SecurityManager(){
@Override
public void checkExit(int status){
if(status != 5){
throw new SecurityException();
}
}
})
쓰레기 수집기 실행(gc())
자바는 개발자가 메모리를 직접 코드로 관리하지 않고 JVM이 알아서 자동으로 관리
JVM은 메모리가 부족할때와 CPU가 한가할때 쓰레기 수집기(Garbage Colletor)을 실행 시켜 사용하지 않는 객체를 자동 제거
new 연산자로 객체를 생성 하고 변수에 객체 번지 대입
변수에 null 을 대입하면
객체의 번지 수를 잃게 됨
객체의 번지를 모르니 더이상 사용 할수 없어 쓰레기가 된다
쓰레기 수집기는 개발자가 직접 코드로 실행 시킬수 없고, JVM에게 가능한 빨리 실행해 달라고 요청할수 있다
System.gc() 메소드
-> 호출되면 JVM은 빠른 시간내에 실행시키기 위해 노력한다
쓰레기가 생길때 마다 쓰레기 수집기가 동작한다면 정작 수행되어야 할 프로그램의 속도가 떨어짐
메모리가 충분하다면 굳이 쓰레기 수집기를 실행할 필요가 없다
gc() 메소드는 메모리가 열악하지 않은 환경이라면 거의 사용할 일이 없다
현재 시각 읽기(currentTimeMillis(), nanoTime())
System 클래스의 currentTimeMillis() 메소드와 nanoTime() 메소드
컴퓨터의 시계로 부터 현재 시간을 읽어서 밀리세컨드(1/1000초) 단위와 나노세컨드(1/10**9)단위의 long 값을 리턴
리턴값은 주로 프로그램의 실행 소요시간 측정에 사용,
프로그램 시작 시 시각을 읽고,
프래그램 끝날 때 시각을 읽어서 차이를 구하면 프로그램 실행 소요 시간이 나온다.
public class SystemTimeExample{
public static void main(String[] args){
long time1 = System.namoTime();
int sum = 0;
for(int i =1 ; i<=1000000; i++){
sum+= i;
}
long time2 = System.nanoTime();
System.out.println("1~10000000까지의 합: "+ sum);
System.out.println("계산에 " + (time2-time1) + " 나노초가 소요 되었습니다.")
}
}
시스템 프로퍼티 읽기(getProperty())
시스템 프로퍼티(System Property)는 JVM이 시작할 때 자동 설정되는 시스템의 속성값을 말함
운영체제의 종류, 자바프로그램을 시행시킨 사용자 아이디, JVM 버전 , 운영체제에서 사용되는 파일 경로 구분자
키(key)와 값 (value)로 구성
키(Key) | 설명 | 값(value) |
java.version | 자바의 버전 | 1.8.0_20 |
java.home | 사용하는 JRE의 파일 경로 | <jdk 설치 경로>\jre |
os.name | Operating System name | Windows 7 |
file.separator | File separator("/" on UNIX) | \ |
user.name | 사용자의 이름 | 사용자 계정 |
user.home | 사용자의 홈 디렉토리 | C:\Users\사용자 계정 |
user.dir | 사용자가 현재 작업 중인 디렉토리 경로 | 다양 |
시스템 프로퍼티를 읽어오기 위해서는 System.getProperty() 메소드를 이용하면 된다
이메소드는 시스템 프로퍼티 키 이름을 매개값으로 받고, 해당 키에 대한 값을 문자열로 리턴
String value = System.getPropery(String key)
환경 변수 읽기 (getenv())
운영체제는 실행 되는 프로그램들에게 유용한 정보를 제공할 목적으로 환경변수(Enviroment Variable) 제공
환경 변수는 프로그램상의 변수가 아니라 운영체제에서 이름(Name) 값(Value)으로 관리되는 문자열 정보
환경변수는 운영체제가 설치될때 기본적인 내용이 설정되고, 사용자가 직접 설정하거나 응용 프로그램이 설치될대 자동으로 추가 설정
환경 변수의 값이 필요할 경우
System.getenv()메소드 사용
매개값으로 환경 변수 이름을 주면 값을 리턴
String value = System.getenv(String name);
'Back-end > 이것이 자바다[신용권 한빛미디어]' 카테고리의 다른 글
String 클래스 (0) | 2021.10.23 |
---|---|
Class 클래스 (0) | 2021.10.23 |
Objects 클래스 (0) | 2021.10.22 |
Object 클래스 (0) | 2021.10.22 |
java.lang 과 java.util 패키지 (0) | 2021.10.22 |