Wil*_*urn 5 java performance jvm rmi
我正在收集一些有关使用二进制协议(换句话说,不是SOAP)的JVM方法调用和远程方法调用之间性能差异的数据。我正在开发一个框架,该框架可以酌情决定在本地或远程进行方法调用,并且我想知道在更快的服务器或服务器上远程评估该方法的“价值”是什么?计算某种网格。我知道远程通话的速度会慢很多,所以我最想了解幅度的阶差。是慢10倍还是100或1,000?有人对此有任何数据吗?如有必要,我将编写自己的基准,但我希望重用一些现有知识。谢谢!
开发出低延迟 RMI(最少约 20 微秒)后,它仍然比直接调用慢 1000 倍。如果您使用普通 Java RMI(至少 500 微秒),速度可能会慢 25,000 倍。
注意:这只是一个非常粗略的估计,可以让您大致了解可能会看到的差异。有许多复杂的因素可能会极大地改变这些数字。根据方法的作用,差异可能会小得多,尤其是如果您对同一进程执行 RMI,如果网络相对较慢,差异可能会大得多。
此外,即使存在非常大的相对差异,也可能不会对整个应用程序产生太大影响。
详细说明我最后的评论......
假设您有一个 GUI,它必须每秒轮询一些数据,并且它使用后台线程来执行此操作。假设使用 RMI 需要 50 毫秒,而另一种方法是对分布式缓存的本地副本进行直接方法调用,需要 0.0005 毫秒。这看起来是一个巨大的差异,100,000 倍。然而,RMI 调用可以提前 50 毫秒开始,仍然每秒轮询,对用户来说差别几乎没有。
更重要的是,RMI 与使用其他方法相比要简单得多(如果它是适合这项工作的工具)
使用 RMI 的另一种方法是使用 JMS。哪个最好取决于您的情况。