본문 바로가기
JAVA공부/0-자바기초(초급자)

[JAVA] 자바 리플렉트를 이용한 OperatingSystemMXBean클래스로 현재 PC의 CPU를 확인하기

by 으노으뇨 2022. 11. 17.
728x90
반응형
SMALL

안녕하세요~!~~~!!!ㅎㅎㅎㅎ

오늘은 리플렉트를 이용해서 OperatingSystemMXBean 클래스를 인스턴스화 하고 해당 클래스내의 메서드를 호출하여 

CPU 상태를 확인하는 방법에 대해서 설명하겠습니다.

우선 현재 이방법은

자바 OperatingSystemMXBean 사용을 할 수 없고 

OperatingSystemMXBean클래스나 인터페이스내 메서드가 6개밖에 나오지않아 CPU측정을 하는 실질적 메서드를 사용못하는 경우에 사용하면 유용할 것같습니다.


학습성과

  1. 리플렉션 : 리플렉트 패지키의 클래스와 메서드를 사용하여 객체의 속성 및 메서드에 접근하는 기술을 사용할 수 있었습니다.
  2. 자바 Bean관리 : OS에서 관리되는 빈을 사용하여 운영체제관리하는 Bean에 접근하여 OS의 전반적인 상태를 확인 할 수 있었습니다.
  3. 동적 메서드 호출 및 정보 추출 : 메서드 클래스를 사용하여 메서드 호출하고 해당 메서드를 응용 했습니다.

이 학습을 통해 리플렉션을 이용해 객체의 메서드와 속성에 동적으로 접근하고, 자바 빈을 활용하여 운영 체제 관련 정보를 수집하는 방법을 배울 수 있었습니다. 


우선 https://uno-kim.tistory.com/224

 

[JAVA I/O]자바로 파일을 생성/저장하는 방법 / 4가지 방법 비교(FileChannel, FileWriter-BufferdWriter, Buffered

안녕하세요~! 오늘은 자바기초 중에서 입출력관련되어서 공부한것을 메모해 보고자 합니다. 앞으로 개발일을 하거나 현업에서라던가 누군가 스쳐 지나가면서 물어볼때 조금은! 도움되지 않을

uno-kim.tistory.com

파일을 저장하는 중 CPU 자원을 얼마나 소모하는지 체크하고 싶었지만

이상하게 저는 인터넷에 떠도는 

OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();

이런 소스를 사용할 수 없었습니다. 

그래서 웹페이지를 찾아다니면서 찾은 결과입니다.

저처럼

import com.sun.management.OperatingSystemMXBean;

와 같은 패키지가 없어서 자바로 CPU를 측정할 수 없었다면

제 소스 참고하시는것도 좋은 방법일것같습니다. 한번 보실까요?


소스는 아래와 같습니다.

package Java.Reflect;

import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class CPUCheck
{
	public static void main(String[] args)
	{
		OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
		for (Method method : osBean.getClass().getDeclaredMethods())
		{
			/**
			 * <p>setAccessible의 메서드는 해당 매서드가 private라던가 등등의 접근제한자의 제한을 잠시 해제하고 접근가능하게 하겠다는것을 boolean으로 설정한다. 만약 그것이 아니라면 false, 상관없이 다 접근하겠다고 하면 true이다.
			 * 우린 접근제한자의 제한을 받으면 안되니 true로 하여 접근을 허용시키겠다.
			 */
			method.setAccessible(true);
			/**
			 * <p>
			 * get으로 시작하는 메서드이고 해당 접근제한자가 public인 경우 조건절을 주었다.
			 */
			if(method.getName().startsWith("get") && Modifier.isPublic(method.getModifiers()))
			{
				/**
				 * <p>매서드의 결과값이 저장될 Object객체를 선언
				 */
				Object value = null;
				try
				{
					/**
					 * <p>get으로 시작하는 함수에 대해 우선적으로 실행한다. ㅇ만약 해당 매서드에 파라미터가 있다면 넣어준다. 추후설명
					 */
					value = method.invoke(osBean);
				}
				catch (Exception e)
				{
					value = e;
				}
				System.out.println(method.getName() + " = " + value);
			}
		}
	}
}

실행결과

 

위와 같이 나왔습니다.

첫번쨰 순서대로 

OperatingSystemMXBean 

 

 

 

 

 

 

출처 : https://stackoverflow.com/questions/47177/how-do-i-monitor-the-computers-cpu-memory-and-disk-usage-in-java

알고보니 

com.sun.management.OperatingSystemMXBean;

해당 패키지가 있어야 사용가능했었습니다.

저에게는 해당 패키지가 없어서 순수

import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;

퓨어 자바 패키지 밖에 없었습니다.

그래서 우선은 이렇게 작성했습니다.ㅠ

그래도 소스복붙뿐만아니라 저 스스로 학습하는 기회가 되었습니다. 

다음엔 Enum 과 interface를 이용해서 이 기능을 활용해보겠습니다.

긴 글 읽어주셔서 감사합니다!!

728x90
반응형
LIST

댓글