Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


Multiprocess JVM Implemetation
 
Java를 이용해 ServerApplication을 구현할 때 기본이 될 수 있는 Multiprocess JVM을 구현하기 위한 기본 지식을 습득해보고자 합니다. 이제 우리는 하나의 JVM에서 다수의 Process를 생성하고 관리할 수 있게 됩니다. ( 2003/02/28 ) 154
Written by runjava - 김재환
1 of 2
 
제목 : Multiprocess JVM 구현하기 (1)

1. 개요
JVM이 로드 될때 많은 시스템 메모리를 차지합니다. 그리고, 일반적인 경우에 하나의 JVM에서는 하나의 프로세스가 작동하죠. 그렇다면 시스템에서 여러 개의 자바 애플리케이션을 실행한다면 메모리에 대한 낭비가 커질 것이라는 것은 충분히 짐작이 되는 일이겠지요? 대부분의 자바 개발자들이 엔터프라이즈 환경에서 사용될 시스템을 개발한다고 했을 때 이것은 정말 중요한 문제가 될 수 있습니다.
그렇다면 해결 방법이 없을까? 그냥 JVM 하나에서 여러 개의 프로세스를 돌아가도록 하면 되겠죠. 하지만, 단순히 java 명령을 타이핑 하는 것으로는 이것을 해결할 수 없습니다. 때문에 이 Article에서는 간단하게나마 JVM에서 다수의 프로세스를 돌릴 수 있도록 구현해 보고자 합니다.
자! 소스부터 받으시구요. 하나씩 차례대로 살펴보도록 하죠..

2. 내용
  Multiprocess JVM을 구현하기 위해 처리해야 할 문제에는 어떤 것들이 있을까요?

** 요구 조건 **
1) main()을 가지고 있는 클래스를 메모리로 읽어 들이고 main()을 실행할 수 있어야 합니다.

// ProcessManager.java

public static void startProcess ( String classname, String[] args)
throws Exception {

   // 클래스를 메모리로 읽어들입니다.
  Class classObject = Class.forName(classname);

  // 넘겨받은 String[]의 Argument로 부터 타입객체를 얻어냅니다.
  Class[] paramType = {args.getClass() };
  // main()에 대한 Reference를 얻어냅니다.
  Method main = classObject.getMethod("main", paramType);
  Object[] mainParams = {args};
  // main()을 실행합니다.
  main.invoke (null, mainParams);
}

위의 메소드를 이용해 여러 개의 애플리케이션을 실행시켜보시면 실망하실 겁니다. 왜냐하면 애플리케이션들이 순차적으로 실행되기 때문이죠. 먼저 실행시킨 것이 종료해야만 다음 것이 실행을 하게 됩니다. 이래서야 완전한 Multiprocess 라고 할 수 없겠죠?

 

2) 각각의 프로세스들은 독립적인 Thread로 동작되어야 합니다.
(여기에서 Process에 대한 정보를 담고 있는 ProcessWrapper.java 가 필요하게 됩니다. 소스를 참조하세요!)

// ProcessManager.java
public static ProcessWrapper startAnotherClass (String classname, String[] args) {
  ProcessWrapper process = new Process(classname, args);
  // 매 프로세스를 Thread로 실행시킨다.
  Thread thread = new Thread(process);
  thread.start();
  return process;
}

 


3) 각각의 프로세스를 개별적으로 정지시킬 수 있어야 합니다.
이 문제는 ProcessWrapper.java에서 MainThread에 대한 Reference를 보존하고 있다가 stop()을 이용해 중지 시키는 방법으로 처리를 합니다.

 
1 2
References
 
1) O'REILY NETWORK : Multiprocess JVMs 2001/09/25
2) The Java Language Specification : Chapter 17 Threads and Locks 3) This article Source : jvm_process_src.zip
Copyright ⓒ 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD