안녕하세요~!~~~!!!ㅎㅎㅎㅎ
오늘은 리플렉트를 이용해서 OperatingSystemMXBean 클래스를 인스턴스화 하고 해당 클래스내의 메서드를 호출하여
CPU 상태를 확인하는 방법에 대해서 설명하겠습니다.
우선 현재 이방법은
자바 OperatingSystemMXBean 사용을 할 수 없고
OperatingSystemMXBean클래스나 인터페이스내 메서드가 6개밖에 나오지않아 CPU측정을 하는 실질적 메서드를 사용못하는 경우에 사용하면 유용할 것같습니다.

학습성과
- 리플렉션 : 리플렉트 패지키의 클래스와 메서드를 사용하여 객체의 속성 및 메서드에 접근하는 기술을 사용할 수 있었습니다.
- 자바 Bean관리 : OS에서 관리되는 빈을 사용하여 운영체제관리하는 Bean에 접근하여 OS의 전반적인 상태를 확인 할 수 있었습니다.
- 동적 메서드 호출 및 정보 추출 : 메서드 클래스를 사용하여 메서드 호출하고 해당 메서드를 응용 했습니다.
이 학습을 통해 리플렉션을 이용해 객체의 메서드와 속성에 동적으로 접근하고, 자바 빈을 활용하여 운영 체제 관련 정보를 수집하는 방법을 배울 수 있었습니다.
우선 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를 이용해서 이 기능을 활용해보겠습니다.

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