(1)引言:
java虚拟机一般都有一个几M的内存消耗预留空间.如果并行运行多个java小应用程序的话,有可能占用了很多不必要的内存空间,造成内存资源的枯竭,比如有时候经常开启一些系统监听进程和服务进程等.
(2)解决方案:
运行多个应用程序会启动多个java虚拟机进程,这就带来了一定的内存的开销,可以考虑将这些小应用程序合并到在一个java虚拟机进程中运 行,就可以节省一定数量的内存消耗,最终带来性能上的提高.
(3)程序代码如下:
Test类的源代码:
public class Test {
public static void main(String[] args) throws IOException{
System.out.println("Test has started");
System.in.read();
}
}
TestMerger类的源代码:
public class TestMerge {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException, IOException {
Class classobject = Class.forName("testrandomaccess.Test");
Class[] mainParamType = {args.getClass()};
Method main = classobject.getMethod("main", String[].class);
Object[] mainParam = {args};
main.invoke(null, mainParam);
System.in.read();
}
}
(4)说明:
该段程序使用了java中的反射机制 ,找到想运行的类的main方法,在TestMerger的main方法中启动运行,使得两者合并到了同一个java虚拟机中.
运行程序后,我使用windows的进程管理器,发现果然只产生了一个java虚拟机进程java.exe (一共有两个,还有一个是netbean产生的).
截图如下: