여러 개의 자바 프로그램이 동시적으로 배치 형태로 실행된다고 했을 때 매번 실행을 위해 VM이 실행 됩니다. 이 경우 자바 프로그램이 실행될 때 마다 VM이 실행되므로 프로그램의 크기가 작을 경우 실행 시간의 대부분은 VM을 로딩하는 시간이 될 수도 있습니다.
아래에 VM 로딩을 줄이기 위한 배치 프로그램을 소개하니 참고 바랍니다.
우선 실행할 프로그램 목록을 담아두는 txt 파일을 하나를 만듭니다.
-------------
startList.txt
-------------
#아래의 프로그램이 배치로 실행 됩니다.
Loader SW
Loader EV
Loader VO
Loader VI
----------------
LoadingBatch.java
----------------
import java.util.List;
import java.util.LinkedList;
import java.util.Iterator;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileInputStream;
import java.lang.reflect.Method;
public class LoadingBatch {
public static void main(String[] args) throws Exception{
if (args.length != 1) {
System.out.println("Usage : java LoadingBatch [startList.txt]");
return;
}
//program.list 파일을 읽어 실행할 명령을 List에 받아옴
List<String> list = loadBatchJobs(args[0]);
String cmd = null;
//List에 있는 명령을 반복하면서 실행을 위해 runApp 메소드 호출
for(Iterator<String> i=list.listIterator(); i.hasNext();) {
cmd = i.next();
runApp(cmd); //Loader SW, Loader EV, Loader VO, Loader VI 등 명령을 실행
}
}
public static List<String> loadBatchJobs(String fName) throws Exception{
LinkedList<String> list = new LinkedList<String>();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fName)));
String cmd = null;
while((cmd = br.readLine()) != null) {
cmd = cmd.trim();
if (cmd.startsWith("#")) continue; //주석 처리를 위해
list.add(cmd); //각 자바 실행 명령을 List에 담는디
}
return list;
}
public static void runApp(String cmd) throws Exception {
String[] cmds = cmd.split(" "); //실행할 프로그램과 인자를 구분
String className = cmds[0]; //실행할 프로그램
String[] args = null; //인자는 몇개가 될지 모르니...
if (cmds.length > 1) { //프로그램과 인자를 가지고 있는 경우
args = new String[cmds.length - 1];
System.arraycopy(cmds, 1, args, 0, cmds.length -1); //인자를 args 배열에 COPY
}
Class c = Class.forName(className); //클래스 로딩
Method m = c.getMethod("main", new Class[]{String[].class}); //Loader라는 클래스의 main 메소드를 얻어옴
m.invoke(null, new Object[]{args}); //인자를 주어 프로그램을 실행 합니다.
}
}
오라클자바커뮤니티 추천 실무강좌 - 개인80% 환급!!
댓글 없음:
댓글 쓰기