我负责维护在IBM WebSphere 6.1(IBM J9 JVM)上运行的基于JSP的应用程序。所有JSP页面都有一个静态包含引用,在这个包含文件中声明了一些静态Java方法。它们包含在所有JSP页面中,以便“轻松访问”这些实用程序静态方法。我知道这是一种非常糟糕的工作方式,我正在努力改变它。但是,为了好奇,并支持我改变这一点的努力,我想知道这些“重复”的静态方法是如何通过JVM JIT编译器进行优化的。
答案 0 :(得分:11)
每个JSP页面都被编译为一个唯一的类,因此包含的代码也将被编译成不同的类。 JIT不会将代码的各种副本合并为一个。
为避免这种情况,您可以将导入的代码放入真正的Java类中,然后将其导入JSP中。然后就没有重复,因为你正在重复使用同一个类。
答案 1 :(得分:3)
@mdma的答案对于当前的JVM是正确的,但需要在几个方面进行限定。
未来JVM中的JIT可能支持积极的优化,以减少本机代码的内存占用。
另一方面,除非你有数千个不同的JSP,否则每个JSP类的一些静态方法的开销可能不会对你的webapp的内存占用产生很大的影响。
答案 2 :(得分:0)
您可以使用单个类中的静态导入:<%@ page import =“static foo。*”%>。
然后你不再拥有所有重复。除了导入之外,您不需要触摸其他东西。