将我们的应用程序迁移到Java 7.我们看到运行时性能问题用Java 7编译Java 6字节码。这是预期的吗?这样做的缺点/好处是什么?
我们有一个具有SOAP接口的Web应用程序。在我们的回归测试中,我们在其中搜索SOAP消息并获取SOAP消息。我们使用Groovy来帮助管理这个测试。
更明确一点,我们正在编译
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
使用Java 7 SDK。这不编译java 6字节代码吗? (使用Java 7)
我正在寻找的一些事例
https://www.servoy.com/forum/viewtopic.php?f=6&t=19140
对于我们的测试服务,我们模拟用户点击我们的网络服务。在我们的测试中将线程数减少到8而不是20,这大大降低了整体运行时间。这是基于上面的HashMap文章。任何人都可以看到多线程会降低性能的另一个原因吗?在java 6中,我们运行了20个线程,速度更快。
答案 0 :(得分:1)
我们看到运行时性能问题用Java 7编译Java 6字节码。这是预期的吗?
没有。这不是预期的。这是可能的......但我不会预测它,我无法想到一个明显的解释。
这样做的缺点/好处是什么?
我认为使用Java 7工具编译代码并设置为&#34; -target&#34;对您的问题(迁移)没有实际好处。到&#34; 1.6&#34;。我会直接编译Java 7平台。
当然,试图找出代码显然运行得慢的原因并没有任何好处。这可能是真实的效果,也可能是幻觉;例如您正在进行基准/性能测量的方式的人工制品。但不管怎样,如果您编译Java 7并在Java 7上运行,那么它并没有告诉您将会发生什么......这就是您要去的地方。
通常,您不希望在较新版本的Java中性能变慢。但是,有些因素可能会导致性能特征发生变化。例如:
JIT编译器中的更改可能会导致某些非典型应用程序运行速度变慢。
JIT编译策略的变化可能导致代码在以后编译JIT ......这可能会影响启动/预热期间的性能。 (基准测试应该旨在弥补这一点......)
堆组织/垃圾回收算法的更改可能需要调整/重新调整。
等等。