更改JVM供应商对您的应用程序的影响

时间:2017-05-13 13:52:57

标签: java performance jvm jvm-hotspot

如果您想为您的应用程序更改JVM(仅供应商并坚持使用相同版本的JAVA),应该验证哪些方面以确保您的应用程序将以最佳状态运行。

这些JVM之间的差异将对您的应用程序的性能产生明显的影响。维护将是:

  • 内存管理&垃圾收集算法
  • 安全&稳定性补丁

因此,假设您的应用程序性能测试结果良好以及安全性和安全性如何,可以安全地进行。供应商提供的稳定性补丁支持是可以接受的,然后您可以继续进行更改。

我假设切换JVM不会产生任何功能影响,影响只会影响应用程序的性能。

1 个答案:

答案 0 :(得分:0)

JVMJava(以及隐式javac编译器)之间存在差异。

当您说更改vendor时,您可能意味着两者:使用新编译器重新编译.java文件并在新.class供应商上运行生成的jvm文件

在这种情况下,bytecode可能不同(.class文件的内容)。 通常你不关心这一点,因为你的代码仍然运行良好。但要知道这可能会改变而且你不能依赖它,这很好。

据我所知,不同jvm的问题要大得多。每个供应商都可以对其进行优化,但可能会有很大不同。 例如,您当前的 jvm可能会在2000次调用后内联方法,而您的新jvm可能会在10000次调用后执行此操作。所以 JIT可能会有所不同。它可能使用不同的垃圾收集器实现,甚至可能以不同于Oracle Hotspot的方式对内存进行切片,因此堆可能不同

您可能现在启用了调整参数(-XX:SomeProp),新供应商无法理解这些参数。为调试问题提供的工具也可能有所不同:要监视工具和启动属性

然后有bug。即使所有编译器都必须符合jls,它们都有错误(它仍然是软件),而有些东西通常现在编译/运行,它们可能会突然中断你正在做的改变。

我不知道是否有安全方式来改变这种情况。因为它取决于您实际定义的安全。如果您关心的是代码运行,那么测试和性能测试也没问题 - 那么您没问题。

最后一点:我们参与了从J9Oracle Hotspot的迁移。这种变化并不容易,主要是因为J9 AOT Compilerheap memory j9 != oracledifferent GC(很久以前,我不想重复这个故事)。