JVM JIT编译器如何优化“重复”的Java代码?

时间:2010-06-17 23:10:02

标签: java jsp websphere compilation jit

我负责维护在IBM WebSphere 6.1(IBM J9 JVM)上运行的基于JSP的应用程序。所有JSP页面都有一个静态包含引用,在这个包含文件中声明了一些静态Java方法。它们包含在所有JSP页面中,以便“轻松访问”这些实用程序静态方法。我知道这是一种非常糟糕的工作方式,我正在努力改变它。但是,为了好奇,并支持我改变这一点的努力,我想知道这些“重复”的静态方法是如何通过JVM JIT编译器进行优化的。

  • 即使具有完全相同的签名,它们也会单独优化?
  • JVM JIT编译器“看到”这些方法是否完全相同,是否提供了“统一”的JIT代码?

3 个答案:

答案 0 :(得分:11)

每个JSP页面都被编译为一个唯一的类,因此包含的代码也将被编译成不同的类。 JIT不会将代码的各种副本合并为一个。

为避免这种情况,您可以将导入的代码放入真正的Java类中,然后将其导入JSP中。然后就没有重复,因为你正在重复使用同一个类。

答案 1 :(得分:3)

@mdma的答案对于当前的JVM是正确的,但需要在几个方面进行限定。

  1. 未来JVM中的JIT可能支持积极的优化,以减少本机代码的内存占用。

  2. 另一方面,除非你有数千个不同的JSP,否则每个JSP类的一些静态方法的开销可能不会对你的webapp的内存占用产生很大的影响。

答案 2 :(得分:0)

您可以使用单个类中的静态导入:<%@ page import =“static foo。*”%>。

然后你不再拥有所有重复。除了导入之外,您不需要触摸其他东西。