×

去优化上下文中的数组边界检查消除。 (英语) Zbl 1183.68153号

摘要:每当访问数组元素时,Java虚拟机都会执行比较指令,以确保索引值在有效范围内。这会降低Java程序的执行速度。数组边界检查消除确定了这种检查是冗余的并且可以删除的情况。我们提出了一种基于实时编译器静态分析的Java HotSpot(^{text{TM}})虚拟机数组边界检查消除算法。
该算法在静态单赋值形式的中间表示上工作,并维护索引表达式的条件。如果可以证明边界检查从未失败,它将完全删除边界检查。只要可能,它就会将边界检查移出循环。静态检查数保持不变,但循环内的检查可能会执行得更频繁。如果这样的检查失败,执行程序将返回解释模式,从而避免在错误的位置抛出异常的问题。
评估表明,科学SciMark基准测试套件的加速速度接近理论上的最大值,一些JavaGrande基准测试也有显著改进。该算法略微提高了SPECjvm98基准套件的执行速度。对DaCapo基准测试的评估表明,数组边界检查对面向对象应用程序的性能没有显著影响。

MSC公司:

68甲15 编程语言理论
PDF格式BibTeX公司 XML格式引用
全文: DOI程序

参考文献:

[1] 阿加瓦尔,A。;Randall,K.H.:相关领域分析,214-220(2001)
[2] 布莱克本,S.M。;加纳,R。;霍夫曼,C。;A.M.Khan。;麦金利,K.S。;Bentzur,R。;迪万,A。;范伯格,D。;Frampton,D。;盖耶,S.Z。;Hirzel,M。;霍斯金,A。;跳跃,M。;Lee,H。;莫斯,J.E.B。;Phansalkar,A。;Stefanović博士。;Vandrunen,T。;冯·丁克拉奇,D。;维德曼,B.:达卡波基准测试:Java基准测试开发与分析,169-190(2006)
[3] 博迪克,R。;古普塔,R。;Sarkar,V.:ABCD:按需消除数组边界检查,321-333(2000)
[4] 布里格斯,P。;库珀,K.D。;Simpson,L.T.:价值编号,《软件:实践与经验》27,第6期,701-724(1997)
[5] 公牛,J.M。;洛杉矶史密斯。;医学博士韦斯特黑德。;Henty,D.S。;Davey,R.A.:高性能Java的基准套件,《并发:实践与经验》12,第6期,375-388(2000)
[6] 伯克,M.G。;Choi,J.-D。;芬克,S.J。;格罗夫,D。;Hind,M。;萨尔卡,V。;塞拉诺,M.J。;Sreedhar,V.C。;Srinivasan,H。;Whaley,J.:Java的jalapeño动态优化编译器,129-141(1999)
[7] 点击,C。;Paleczny,M.:简单的基于图形的中间表示法,35-49(1995)
[8] Cytron,R。;费兰特,J。;罗森,B.K。;韦格曼,M.N。;Zadeck,F.K.:高效计算静态单一赋值形式和控制依赖图,《编程语言和系统上的ACM事务》13,第4期,451-490(1991)
[9] M.Dmitriev,大型长寿命Java应用程序中的安全类和数据演化,技术代表TR-2001-98,Sun Microsystems Inc.,2001年
[10] Ghemawat,S。;Randall,K.H。;Scales,D.J.:《现场分析:获取有用且低成本的程序间信息》,334-344(2000)
[11] Griesemer,R。;Mitrovic,S.:Java(HotSpot^{TM})虚拟机的编译器,《niklaus wirth:简单的艺术》,133-152(2000)
[12] Gupta,R.:优化数组边界检查的新视角,272-282(1990)
[13] Gupta,R.:使用流分析优化数组绑定检查,ACM关于编程语言和系统的信件2,第1-4期,135-150(1993)
[14] Hölzle,美国。;钱伯斯,C。;Ungar,D.:用动态去优化调试优化代码,32-43(1992)
[15] Hölzle,美国。;Ungar,D.:使用运行时类型反馈优化动态调度调用,326-336(1994)
[16] Hummel,J。;阿泽夫多。;科尔森,D。;Nicolau,A.:注释Java字节码以支持优化,并发:实践与经验9,第11期,1003-1016(1997)
[17] 川崎,M。;小松,H。;Nakatani,T.:利用硬件陷阱有效消除空指针检查,139-149(2000)
[18] Kotzmann,T。;维默,C。;Mössenböck,H。;罗德里格斯,T。;罗素,K。;Cox,D.:Java客户端编译器的设计(HotSpot^{TM}),Java 6,关于架构和代码优化的ACM事务5,第1期(2008)
[19] 米切夫,V.V。;Fedoseev,S.A。;苏哈雷夫,V.V。;利普斯基,N.V.:Java中循环版本的有效增强,Lncs 2304,101-115(2002)·Zbl 1051.68741号
[20] M.Paleczny,C.Vick,C.Click,Java HotSpot\(^{TM}\)服务器编译器,载于:《Java虚拟机研究与技术研讨会论文集》,2001年,第1-12页
[21] R.Pozo,B.Miller,科学标志2.0,1999年。http://math.nist.gov/scimark2/
[22] 钱,F。;亨德伦·L·J。;Verbruge,C.:Java数组边界检查消除的综合方法,Lncs 2304325-342(2002)·Zbl 1051.68779号
[23] 标准绩效评估公司,SPECjvm98基准,1998年。http://www.spec.org/jvm98/
[24] Sun Microsystems Inc.,Java Platform,Standard Edition 7 Source Snapshot Releases,2007年。http://download.java.net/jdk7/
[25] Sun Microsystems Inc.,Java(^{TM})Platform Debugger Architecture,2007年。http://java.sun.com/javase/6/docs/technotes/guides/jpda/
[26] 维默,C。;Mössenböck,H.:线性扫描寄存器分配器中的优化间隔拆分,132-141(2005)
[27] Würthinger,T。;维默,C。;Mössenböck,H.:Java客户端编译器的数组边界检查消除,125-133(2007)
[28] Xi,H。;Xia,S.:走向(Java^{TM})虚拟机语言中的数组绑定检查消除,110-125(1999)
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。