论文部分内容阅读
Java作为一种通用编成语言如今已在诸多领域得到了普遍的发展与应用,然而Java程序较低的执行效率却阻碍了其在诸多领域的进一步发展。随着Java即时编译技术与自适应动态编译技术的日趋成熟,造成Java性能瓶颈问题的一个主要原因是Java语言规范定义的精确异常模型和程序中频繁出现的异常检测严重限制和阻碍了诸多指令调度算法在Java本地代码编译中的应用。Java精确异常模型为程序引入了额外的精确异常相关依赖。为保证这些依赖关系不被破坏,指令调度通常只能在程序中不存在异常检测的区域发挥比较好的作用,然而异常检测在程序中的频繁出现使得对这些区域进行指令调度优化所起到的性能提升效果非常不明显;在存在异常检测的区域,很多被证明行之有效的指令调度方法由于精确异常相关依赖的存在和严格限制或是无法起到显著的效果、或是根本无法被应用,从而大大降低了Java程序代码的指令级并行度,严重阻碍了程序性能的提升。为完全化解指令调度与Java精确异常模型之间的矛盾,本文提出了一种全新的保证Java精确异常的指令调度技术。该方法允许编译器在进行指令调度的同时完全忽略Java精确异常模型的存在并打破其引入的相关依赖关系,由此使指令调度算法能够以最为有效的方式优化程序代码并充分发掘代码的指令级并行度,同时方法通过一定的机制保证当程序运行期抛出异常时,Java精确异常模型不会被之前所应用的指令调度破坏。与现有的研究工作相比,本文提出的方法具有以下优势:①通用性,即方法对Java程序中出现的异常检测普遍适用、对现有的指令调度算法普遍适用;②高效性,即在保证Java精确异常的前提下,方法可以使指令调度的效果在整个程序区域得到最大的发挥,而不仅限于不存在异常检测的区域,从而更加有效地提升程序的整体性能。实验结果显示本文提出的方法使基准程序达到了平均超过50%的净加速,从而证明了方法的可行性和有效性。