본문 바로가기
JAVA/[JAVA] 바구니

[JAVA] System Class

by oncerun 2020. 4. 22.
반응형

System 클래스

 

운영체제의 기능을 일부 이용할 수 있습니다.

 

프로그램 종료 , 키보드로부터의 입력 , 모니터로의 출력, 메모리 정리, 현재 시간 , 시스템 프로퍼티 읽기, 환경변수 일기 등이 있습니다.

 

우리가 자바를 처음 만나 hello world를 출력할 때

System.out.println("Hello World")를 사용해 콘솔에 출력할 때 이와 같이 사용을 했습니다.

 

프로그램 종료 exit()

강제적으로 JVM을 종료

 매개 값으로 int값을 주며 이 값을 종료 상태 값이라고 한다.

정상 종료일 경우 0으로 지정하며 비정상 종료일 경우 0 이외의 다른 값을 줍니다.

어떠한 값을 주더라도 종료가 됩니다.

특정 상태 값이 입력되었을 경우에만 종료하고 싶다면 자바의 보안 관리자를 설정하면 됩니다.

 

checkExit라는 메서드를 재정의를 합니다.

checkExit메서드는 System.exit()을 호출할 때 자동적으로 호출됩니다.

상태 값에 따라 JVM을 종료시키거나 종료를 시키지 않을 수 있습니다.

package blog;

public class Exit {

	public static void main(String[] arg) {
		System.setSecurityManager(new SecurityManager() {
			@Override
			public void checkExit(int status) {
				if(status !=10) {
					throw new SecurityException();
				}
			}

		});
		
		for (int i = 0; i < 15; i++) {
			System.out.println(i);
			
			try {
				System.exit(i);
			}catch(SecurityException e) {
				
			}
		}
	}
}

 

checkExit의 인자 값이 10일 때는 예외를 발생하지 않고 정상적으로 종료되도록 하는 예제입니다.

 

 

gc()

 

gc는 가비지 컬렉터의 약자입니다.

 

메모리 정리를 위해 가비지 컬렉터를 호출하는 것입니다.

 

메모리에 사용하지 않는 객체가 많이 있으면 메모리가 부족하기 때문에 jvm은  cpu가 한가하거나 메모리가 부족할 때 자동적으로 gc를 실행을 하는데 개발자가 필요할 때 gc 요청하도록 할 수 있습니다.

 

Exam exam = new Exam();에서

exam을 스택 영역에 올라가게 되고 new로 생성자를 호출하게 되면 Exam객체가 힙 영역에 생성되어 exam이 힙 영역을 참조하게 됩니다.

만약 exam =null 로써 널값을 할당하게 되면 exam는 어떠한 것도 참조를 하지 않아서 쓰레기가 됩니다.

또한 exam = new Exam()으로 생성했는데 다시 한번 exam = new Exam()을 하게 되면

두 번째의 생성 주소를 가지게 되므로 첫 번째 객체는 힙 영역을 참조하지 않으므로 객체는 쓰레기가 됩니다.

이러한 쓰레기를 처리하는 것이 가비지 컬렉터입니다.

개발자가 gc()를 호출하게 되면 JVM은 빠른 시간 내에 실행시키기 위해 노력을 합니다.

즉시 실행되지는 않습니다.

 

package blog;

public class Gc {

	public int gc;
	public Gc(int gc) {
		this.gc = gc;
		System.out.println("메모리에 객체가 생성됨");
	}
	
	@Override
	protected void finalize() throws Throwable {
		System.out.println("메모리에서 제거됨");
	}
}

 

 

 

만약 gc()를 호출하지 않는다면?

메인 함수가 끝나게 되면 jvm이 종료되면서 자동적으로 메모리에 올라간 객체들이 전부 삭제됩니다.

따라서 많은 객체를 생성했다면 중간에 gc()를 사용해 객체를 정리해주는 것이 좋다.

 

 

현재 시각 확인하기.

 

현재 시간을 밀리세컨드 천분의 1초와 나노세컨드 1/10^9 단위의 long값을 리턴한다.

보통 프로그램의 실행 소요 시간을 측정할 때 사용됩니다.

어떤 프로그램의 성능 테스트를 할 때 사용할 수 있습니다.

 

 

getProperty()

 

 

 

 

KEY EXPLAIN VALUE
java.version 자바의 버전을 알려줍니다. 1.8.0_25
java.home 사용하는 JRE의 파일경로 <JDK 설치경로>
os.name 현재 운영체제의 이름 window 7
file.separator File separator 파일 구분자 \
user.name 사용자의 이름 사용자계정
user.home 사용자 홈 디렉토리 C:\User\계정홈
user.dir 사용자가 현재 작업중인 디렉토리 경로  

 

키를 이용해 값을 얻어옵니다.

 

Properties라는 컬렉션이 있다. Properties props = System.getProperties();//모든 시스템 속성을 다 담아서 컬렉션으로 리턴합니다.

 

getenv(); 

환경 변수의 정보를 얻어주는 메서드입니다.

 

String value = System.getenv(JAVA_HOME);할 경우

시스템 변수에 저장된 값이 리턴됩니다.

반응형

'JAVA > [JAVA] 바구니' 카테고리의 다른 글

[JAVA] List Collection  (0) 2020.04.28
[JAVA] Collection FrameWork  (0) 2020.04.28
[JAVA] Reflection  (0) 2020.04.21
[JAVA] Objects Class (3)  (0) 2020.04.17
[JAVA] Objects Class (2)  (0) 2020.04.15

댓글