java.lang패키지2 : System클래스의 메서드

  • java.lang패키지의 가장 큰 특징 : import할 필요 없다.

System클래스

  • JVM이 실행되고 있는 운영체제(OS)와 소통을 위한 클래스
  • 다양한 정적 메서드 제공
  • System 클래스를 이용하면 운영체제의 프로그램 종료, 키보드로부터 입력, 모니터로 출력, 메모리 정리, 현재 시간 읽기, 시스템 프로피티 읽기, 환경 변수 읽기등의 일부 기능을 사용가능.

https://slidesplayer.org/slide/11513405/




프로그램의 종료와 G.C권고

  • System.gc() : 가비지컬렉터를 실행.
  • System.exit(0) : 강제적으로 JVM을 종료시킴.
    • System.exit(0); 정상종료
    • System.exit(n); 0이외의 다른 숫자는 비정상종료
      • Positive => 잘못된 것으로 예상되는 부분이 잘못됨 (잘못된 명령 줄, 파일을 찾을 수 없음, 서버에 연결할 수 없음)
      • Negative => 전혀 예상하지 못한 것 (시스템 오류 - 예기치 않은 예외 - 외부 강제 종료, 예 : kill -9)
        1
        2
        3
        System.exit(0) or EXIT_SUCCESS;  ---> Success
        System.exit(1) or EXIT_FAILURE; ---> Exception
        System.exit(-1) or EXIT_ERROR; ---> Error
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
32
33
34
35
36
37
38
39
40
41
42
43
class Dummy{
public Dummy(){
System.out.println("더미 객체 생성됨");
}

@Override
protected void finalize() throws Throwable {
System.out.println("더미 객체 소멸");
super.finalize();
}

}

public class BasicIO {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
while(true){
System.out.println("명령을 입력하세요 C,G,X");
String readLine = sc.nextLine();
if(readLine.equals("C")){
new Dummy();
}else if(readLine.equals("G")){
System.gc();
}else if(readLine.equals("X")){
System.exit(0);
}
}

}//main닫힘

}

//출력값
명령을 입력하세요 C,G,X
C
더미 객체 생성됨
명령을 입력하세요 C,G,X
G
명령을 입력하세요 C,G,X
더미 객체 소멸
X




현재 시각 정보 획득

  • 작성한 애플리케이션의 성능을 체크하기 위해 소요 시간을 계산할 필요가 있다.
  • currentTimeMillis() : 현재 시각을 밀리세커드(1/1000초)단위의 long 타입으로 리턴.
  • System.nanoTime() : 현재 시각을 나노세컨드(1/10^9초)단위의 long 타입으로 리턴.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class SystemClockTest {

public static void main(String[] args) {
long start = System.nanoTime();
int num = 20;
long result = getFactorial(num);
System.out.println(num+"의 팩토리얼 : "+result);
long end = System.nanoTime();
System.out.println("총 소요시간(나노초): "+(end-start));
}

public static long getFactorial(long num){
if(num == 1){
return num;
}else{
return num * getFactorial(num -1);
}
}

}




시스템 속성 및 환경변수 참조

  • 시스템 속성 : JVM이 시작할 때 OS로부터 얻어오는 값.
    • 값 종류 : OS종류, JDK설치경로, 사용자계정, 사용자 임시디렉토리경로등
  • 시스템 속성이 중요한 이유 :
    • OS의 종류를 가리지 않는 플랫폼 독립적인 프로그램을 작성하기 위해서!
  • getProperties() : 모든 시스템 속성들을 키-값의 쌍으로 데이터를 저장하는 java.util.Properties형태로 반환.

https://injunech.tistory.com/271

1
2
3
4
5
6
7
8
9
10
11
12
public class Test { 
public static void main(String[] args) {
System.out.println("운영체제 종류: " + System.getProperty("os.name") );
System.out.println("자바 가상머신 버전: " + System.getProperty("java.vm.version") );
System.out.println("클래스 버전: " + System.getProperty("java.class.version") );
}
}

//출력값
운영체제 종류: Windows 10
자바 가상머신 버전: 25.151-b12
클래스 버전: 52.0