在多个jvm实例中运行java代码



我有一个windows服务应用程序和一个使用RMI与服务通信的客户端。我需要做一些并发测试与多个客户端,但我需要每个客户端运行到不同的jvm实例,因为有一些静态变量在其代码。我可以这么做吗?什么好主意吗?

是的,您可以使用JDI - VirtualMachineManager(您可以通过调用Bootstrap.virtualMachineManager();获得)提供(至少一个)启动连接器来做到这一点。然后,您可以在此连接器上调用launch();,它为您提供它创建的VM的VM镜像。该镜像允许您远程执行该VM上的方法。

您可以使用此方法设置任意数量的远程vm,尽管显然这样做会有相对较大的性能损失,并且需要付出相当大的努力。除非工作量是天文数字,否则我个人建议修改代码以保证线程安全(使用ThreadLocal),然后您就不必担心JDI(或类似的设置)。

您可以使用shell脚本在循环中生成具有自己的一组参数的新客户端。

但是,总的来说。仅仅因为共享一些静态变量就在多个vm中运行客户机代码,这绝对不是一个好的解决方案。的基本问题在您的客户机代码中,正如已经建议的那样,您可以使用ThreadLocalThreadPools或一些同步逻辑来隔离不同客户机线程之间的一组变量。

最新更新