跳到主要内容
文章
开放式访问

Java的转义分析TM(TM):理论与实践

出版:2003年11月1日出版历史
跳过抽象节

摘要

逃逸分析是一种静态分析,用于确定数据的生存期是否可能超过其静态范围。本文首先给出了一个Java转义分析的设计和正确性证明TM(TM)。此分析是过程间的、上下文相关的,并且与静态单一赋值形式一样具有流敏感性。因此,对对象字段的赋值是以流敏感性的方式进行分析的。由于Java是命令式语言,因此必须精确确定赋值的效果。这一目标的实现得益于我们使用两个相互依赖的分析技术,一个向前,一个向后。我们引入了一种新的方法来证明此分析的正确性,使用别名作为中间步骤。我们使用整数表示值的转义部分,从而实现快速准确的分析。然后介绍了我们的实现[Blanchet 1999],它适用于整个Java语言。逃逸分析用于堆栈分配和同步消除。在我们的基准测试中,我们堆栈分配13%到95%的数据,在大多数程序上消除了20%以上的同步(两个示例中分别为94%和99%),运行时减少了43%(平均减少21%)。我们对大型程序的详细实验研究表明,与ML的情况相反,这种改进更多地来自于垃圾收集和分配时间的减少,而不是数据局部性的改进。这是因为垃圾收集器的不同。

工具书类

  1. Agesen,O.、Detlefs,D.、Garthwaite,A.、Knippel,R.、Ramakrishna,Y.S.和White,D.,1999年。一种有效的元锁,用于实现无处不在的同步。在面向对象编程、系统、语言和应用会议上(OOPSLA’99,丹佛,科罗拉多州)。纽约ACM出版社,207--222。]]谷歌学者谷歌学者数字图书馆数字图书馆
  2. Aiken,A.、Fähndrich,M.和Levien,R.,1995年。更好的静态内存管理:改进基于区域的高阶语言分析。SIGPLAN编程语言设计与实现会议(PLDI’95,加利福尼亚州拉荷亚)。ACM出版社,纽约州纽约市,174-185。]]谷歌学者谷歌学者数字图书馆数字图书馆
  3. Aldrich,J.、Chambers,C.、Sirer,E.G.和Eggers,S.1999。用于消除Java程序中不必要同步的静态分析。静态分析研讨会(SAS'99,意大利威尼斯)。《计算机科学讲义》,第1694卷。施普林格出版社,德国柏林,19-38.]]谷歌学者谷歌学者数字图书馆数字图书馆
  4. 培根,D.F.1997。快速高效地优化静态类型的面向对象语言。博士论文。加利福尼亚大学伯克利分校谷歌学者谷歌学者数字图书馆数字图书馆
  5. Bacon,D.F.、Konuru,R.、Murthy,C.和Serrano,M.1998年。瘦锁:Java的Featherweight同步。《ACM SIGPLAN’98编程语言设计与实现会议论文集》(PLDI’98,加拿大蒙特利尔)。ACM出版社,纽约州纽约市,258--268。]]谷歌学者谷歌学者数字图书馆数字图书馆
  6. Birkedal,L.、Tofte,M.和Vejlstrup,M.,1996年。通过区域表示推理,从区域推理到冯·诺依曼机器。第23届ACM SIGPLAN-SIGACT编程语言原理研讨会(POPL'96,佛罗里达州圣彼得堡海滩)。ACM出版社,纽约州纽约市,171-183。]]谷歌学者谷歌学者数字图书馆数字图书馆
  7. Blanchet,B.1998年。逃逸分析:正确性证明、实现和实验结果。第25届ACM SIGACT-SIGPLAN编程语言原理研讨会(POPL'98,加利福尼亚州圣地亚哥)。ACM出版社,纽约州纽约市,25-37。]]谷歌学者谷歌学者数字图书馆数字图书馆
  8. Blanchet,B.1999年。面向对象语言的转义分析。JavaTM应用程序。在面向对象编程、系统、语言和应用会议上(OOPSLA’99,丹佛,科罗拉多州)。ACM出版社,纽约州纽约市,20-34。]]谷歌学者谷歌学者数字图书馆数字图书馆
  9. Blanchet,B.2000年。逃生分析。ML和JavaTM应用程序。埃科尔理工学院博士论文。]]谷歌学者谷歌学者
  10. Bogda,J.和Hölzle,U.1999。删除Java中不必要的同步。在面向对象编程、系统、语言和应用会议上(OOPSLA’99,丹佛,科罗拉多州)。ACM出版社,纽约州纽约市,35-46。]]谷歌学者谷歌学者数字图书馆数字图书馆
  11. Carr,S.、McKinley,K.S.和Tseng,C.-W.1994年。用于改进数据局部性的编译器优化。第六届编程语言和操作系统体系结构支持国际会议(ASPLOS’94)。ACM出版社,纽约州纽约市,252--262。]]谷歌学者谷歌学者数字图书馆数字图书馆
  12. Chase,D.R.1988年。存储分配优化的安全注意事项。《SIGPLAN’88编程语言设计与实现会议论文集》(PLDI’88,佐治亚州亚特兰大)。ACM出版社,纽约,NY,1-10。]]谷歌学者谷歌学者数字图书馆数字图书馆
  13. Choi,J.-D.、Gupta,M.、Serrano,M.、Sreedhar,V.C.和Midkiff,S.,1999年。Java转义分析。在面向对象编程、系统、语言和应用会议上(OOPSLA’99,丹佛,科罗拉多州)。ACM出版社,纽约州纽约市,1-19。]]谷歌学者谷歌学者数字图书馆数字图书馆
  14. 库索特P.和库索特R.,1977年。抽象解释:通过构造或近似不动点对程序进行静态分析的统一格模型。第四届美国计算机学会编程语言原理年会会议记录(加利福尼亚州洛杉矶)。ACM出版社,纽约州纽约市,238-252。]]谷歌学者谷歌学者数字图书馆数字图书馆
  15. 库索特P.和库索特R.,1979年。程序分析框架的系统设计。第六届美国计算机学会编程语言原理研讨会会议记录(德克萨斯州圣安东尼奥)。ACM出版社,纽约州纽约市,269--282。]]谷歌学者谷歌学者数字图书馆数字图书馆
  16. Cytron,R.、Ferrante,J.、Rosen,B.K.、Wegman,M.N.和Zadeck,F.K.,1991年。有效计算静态单赋值表和控制依赖图。ACM事务处理。程序。语言系统。13,4(10月),451--490。]]谷歌学者谷歌学者数字图书馆数字图书馆
  17. Dean,J.、Grove,D.和Chambers,C.1995年。使用静态类层次分析优化面向对象程序。第九届欧洲面向对象编程会议论文集。计算机科学讲义,第952卷。施普林格-弗拉格,德国柏林,77-101。]]谷歌学者谷歌学者数字图书馆数字图书馆
  18. Deutsch,A.1990年。在高阶函数规范中确定动态分配数据的生存期和别名。在第17届ACM SIGACT-SIGPLAN编程语言原理研讨会上。(加利福尼亚州旧金山)。ACM出版社,纽约州纽约市,157-168。]]谷歌学者谷歌学者数字图书馆数字图书馆
  19. Deutsch,A.1994年。硬膜外可能-谎言指针分析:超越k限制。《SIGPLAN’94编程语言设计与实现会议论文集》(PLDI’94,佛罗里达州奥兰多)。ACM出版社,纽约州纽约市,230-241。]]谷歌学者谷歌学者数字图书馆数字图书馆
  20. Deutsch,A.1997年。关于逃逸分析的复杂性。在第24届ACM SIGACT-SIGPLAN编程语言原理年度研讨会上(POPL'97,法国巴黎)。ACM出版社,纽约州纽约市,358--371。]]谷歌学者谷歌学者数字图书馆数字图书馆
  21. Diniz,P.C.和Rinard,M.C.1998年。锁粗化:消除自动并行化的基于对象的程序中的锁开销。J.平行分布计算。49、2(3月)、218--244。]]谷歌学者谷歌学者数字图书馆数字图书馆
  22. Fitzgerald,R.、Knoblock,T.B.、Ruf,E.、Steensgaard,B.和Tarditi,D.2000年。Marmot:一个针对Java的优化编译器。柔和。实际。专家。30,3(3月),199--232.]]谷歌学者谷歌学者数字图书馆数字图书馆
  23. Gay,D.和Steensgaard,B.2000。基于对象程序的快速转义分析和堆栈分配。《编译器构造》,第九届国际会议,CC’2000,D.A.Watt,Ed.计算机科学讲义,第1781卷。施普林格-弗拉格,德国柏林,82-93。]]谷歌学者谷歌学者数字图书馆数字图书馆
  24. Harrison,W.1989年。Scheme程序的程序间分析和自动并行化。J.Lisp符号。计算。2, 176--396.]]谷歌学者谷歌学者
  25. Hederman,L.1988年。使用引用计数分析编译时间垃圾收集。德克萨斯州休斯顿莱斯大学Rice COMP TR88-75技术代表谷歌学者谷歌学者
  26. Horwitz,S.、Demers,A.和Teitelbaum,T.1987年。数据流分析的一种有效的通用迭代算法。学报信息24,6,679--694。]]谷歌学者谷歌学者数字图书馆数字图书馆
  27. Hudak,P.1986年。引用计数的语义模型及其抽象(详细摘要)。1986年ACM LISP和函数编程会议记录(马萨诸塞州剑桥)。ACM出版社,纽约州纽约市,351--363。]]谷歌学者谷歌学者数字图书馆数字图书馆
  28. Hughes,S.1992年。高阶函数语言的编译时垃圾收集。J.逻辑计算。2, 4, 483--509.]]谷歌学者谷歌学者交叉引用交叉引用
  29. Inoue,K.、Seki,H.和Yagi,H.1988年。分析功能程序以检测运行时垃圾单元。ACM事务处理。程序。语言系统。10月4日(10月),555--578。]]谷歌学者谷歌学者数字图书馆数字图书馆
  30. Jones,N.D.和Muchnick,S.1982年。使用递归数据结构进行过程间数据流分析和程序的灵活方法。在第九届ACM SIGACT-SIGPLAN编程语言原理研讨会上(新墨西哥州阿尔伯克基)。ACM出版社,纽约州纽约市,66-74。]]谷歌学者谷歌学者数字图书馆数字图书馆
  31. 麦克道尔,C.E.,1998年。减少Java中的垃圾。ACM Sigplan非。第33、9(9)、84至86页。]]谷歌学者谷歌学者数字图书馆数字图书馆
  32. Mohnen,M.1995年。通过高阶遗传分析有效利用闭包。静态分析研讨会(SAS’95)。《计算机科学讲义》,第983卷。施普林格出版社,德国柏林,261-278。]]谷歌学者谷歌学者数字图书馆数字图书馆
  33. Mohnen,M.1995年b。针对任意数据结构的高效编译时垃圾收集。在编程语言实现和逻辑编程研讨会(PLILP’95)上。计算机科学讲义,第982卷。施普林格·弗拉格,德国柏林,241-258。]]谷歌学者谷歌学者数字图书馆数字图书馆
  34. Muller,G.、Moura,B.、Bellard,F.和Consel,C.1997年。Harissa:一个灵活高效的Java环境,混合了字节码和编译代码。在第三届Usenix面向对象技术和系统会议上(COOTS’97)。俄勒冈州波特兰,1--20。]]谷歌学者谷歌学者数字图书馆数字图书馆
  35. Onodera,T.和Kawachiya,K.,1999年。使用双模场锁定对象的研究。在面向对象编程、系统、语言和应用会议上(OOPSLA’99,丹佛,科罗拉多州)。ACM出版社,纽约州纽约市,223--237。]]谷歌学者谷歌学者数字图书馆数字图书馆
  36. Park,Y.G.和Goldberg,B.1992年。对列表进行转义分析。《ACM SIGPLAN’92编程语言设计与实现会议论文集》(PLDI’92,加利福尼亚州旧金山)。ACM出版社,纽约州纽约市,116-127。]]谷歌学者谷歌学者数字图书馆数字图书馆
  37. 钱,Z.1998。用于对象、方法和子程序的JavaTM虚拟机指令的正式规范。《Java(tm)的形式语法和语义》,J.Alves-Foss,Ed.计算机科学讲义,第1523卷。施普林格-弗拉格,德国柏林。]]谷歌学者谷歌学者数字图书馆数字图书馆
  38. Ruf,E.2000年。有效删除Java的同步。在ACM SIGPLAN 2000编程语言设计与实现会议(PLDI'00,加拿大温哥华)上。ACM出版社,纽约州纽约市,208-218。]]谷歌学者谷歌学者数字图书馆数字图书馆
  39. Ruggieri,C.和Murtagh,T.P.,1988年。动态分配对象的生存期分析。第15届ACM SIGACT-SIGPLAN编程语言原理研讨会会议记录(POPL'88,加利福尼亚州圣地亚哥)。ACM出版社,纽约州纽约市,285--293。]]谷歌学者谷歌学者数字图书馆数字图书馆
  40. Serrano,M.和Feeley,M.,1996年。存储使用分析及其应用。1996年,ACM SIGPLAN功能编程国际会议(ICFP,宾夕法尼亚州费城)。ACM出版社,纽约州纽约市,50-61。]]谷歌学者谷歌学者数字图书馆数字图书馆
  41. Shivers,O.1988年。方案中的控制流分析。《SIGPLAN’88编程语言设计与实现会议论文集》(PLDI’88,佐治亚州亚特兰大)。ACM出版社,纽约州纽约市,164-174。]]谷歌学者谷歌学者数字图书馆数字图书馆
  42. Tofte,M.和Talpin,J.-P.1993年。多态类型语言中的堆栈分配理论。丹麦哥本哈根哥本哈根大学计算机科学系技术代表93/15谷歌学者谷歌学者
  43. Weiss,M.等人,1998年。TurboJ:Java字节码到本机编译器。嵌入式系统语言、编译器和工具研讨会论文集。计算机科学讲义,第1474卷。施普林格-弗拉格,德国柏林,119-130。]]谷歌学者谷歌学者数字图书馆数字图书馆
  44. Whaley,J.和Rinard,M.,1999年。Java程序的组合指针和转义分析。在面向对象编程、系统、语言和应用会议上(OOPSLA’99,丹佛,科罗拉多州)。ACM出版社,纽约州纽约市,187-206。]]谷歌学者谷歌学者数字图书馆数字图书馆

索引术语

  1. Java的转义分析TM(TM):理论与实践

    建议

    评论

    迈克尔·扎斯特尔

    对于那些对构建Java编程语言编译器感兴趣的人来说,转义分析变得越来越重要。当一个对象可以从系统外部访问时,该对象被称为逃离子系统;该分析实际上是对传统混叠分析的扩展。如果我们知道对象没有逃逸子系统,那么我们可以使用该信息优化使用对象的一些开销(即,消除对象上的一些锁定/解锁操作,从而减少运行时开销)。这篇关于逃逸分析的论文分为三大部分。第一部分包括第1、2和3节,并描述了从Java转义分析中获得的好处,例如堆栈分配和同步消除。本文的这一部分还包括对该领域以往工作的回顾。第4节到第7节构成了论文的中间部分,这是最难理解的部分。不熟悉抽象解释的读者可能希望获得声明性语言的抽象解释[1] 阅读时很方便。特别有趣的是,这里描述了一种不太精确但快速的转义分析,它通过类型高度近似访问路径。这就是抽象解释发挥作用的地方,一种值(用于获取值的字段列表、数组索引等)由另一种更简单的值近似(例如,我们可以通过路径的长度推断路径之间的关系,长度表示为整数)。第8节至第12节是本文的最后一部分,重点是分析和优化的实际实现。将抽象解释应用于命令式语言的论文相对较少,鉴于本文对实际实现的描述,它与编译器作者的相关性更大。这篇论文绝对不容易阅读,但对于所有对将静态分析应用于Java感兴趣的人来说,应该是必读的。在线计算评论服务

    访问计算机文献的关键评论在这里

    成为评论员计算评论。

    评论

    登录选项

    检查您是否可以通过登录凭据或您的机构访问本文。

    登录

    完全访问权限

    • 发布于

      封面图片ACM编程语言和系统汇刊
      程序设计语言与系统学报 第25卷第6期
      2003年11月
      198页
      国际标准编号:0164-0925
      EISSN公司:1558-4593
      内政部:10.1145/945885
      期刊目录

      版权所有©2003 ACM

      如果复制品不是为了盈利或商业利益而制作或分发的,并且复制品的第一页载有本通知和完整引文,则允许免费制作本作品的全部或部分数字或硬拷贝以供个人或课堂使用。必须尊重ACM以外的其他人对本作品组成部分的版权。允许用信用证进行摘要。要以其他方式复制或重新发布,在服务器上发布或重新发布到列表,需要事先获得特定许可和/或付费。从请求权限[电子邮件保护]

      出版商

      计算机协会

      美国纽约州纽约市

      出版历史

      • 出版:2003年11月1日
      发布于托普拉斯第25卷第6期

      权限

      请求有关此文章的权限。

      请求权限

      检查更新

      限定符

      • 文章

    PDF格式

    以PDF文件查看或下载。

    PDF格式

    电子阅读器

    使用eReader联机查看。

    电子阅读器