当前位置: X-MOL 学术Form. Asp. Comput. › 论文详情
Our official English website, www.x-mol.net, welcomes your feedback! (Note: you will need to create a separate account there.)
TFA: an efficient and precise virtual methodcall resolution for Java
Formal Aspects of Computing ( IF 1 ) Pub Date : 2020-10-06 , DOI: 10.1007/s00165-020-00518-z
Xilong Zhuo 1 , Chenyi Zhang 1
Affiliation  

The problem of statically resolving virtual method calls in object-oriented (OO) programming languages has been a long standing challenge, often due to the overly complicated class hierarchy structures in modern OO programming languages such as Java, C# and C++. Traditional ways of dealing with this problem include class hierarchy analysis (CHA), variable type analysis (VTA), and retrieval of type information after a sophisticated points-to analysis. In this paper, we tackle this problem by proposing a new approach called type flow analysis (TFA) which propagates type information as well as field access information through the syntactic structure of a program. Our methodology is purely algebraic and there is no need to explicitly construct a heap abstraction. We have assessed our methodology from two perspectives. Regarding its theoretical foundation, we have proved that in the context insensitive setting, our method is as precise as the standard Andersen’s subset based points-to analysis regarding the derived types for variables. For an experimental evaluation of TFA, we have implemented the algorithm in the Soot framework and used it to analyze the SPECjvm2008 benchmark suite. During the experiment, we have shown that our method is usually 30–100 times faster than the standard points-to analysis. We further conduct a range of detailed analysis based on the baseline data obtained by running a dynamic profiler, which is also implemented by us, on the SPECjvm2008. The experiment results confirm that TFA can achieve outstanding performance with acceptable accuracy when applied on real-world Java programs.

中文翻译:

TFA:一种高效且精确的 Java 虚拟方法调用解析

静态解决面向对象 (OO) 编程语言中的虚拟方法调用的问题一直是一个长期存在的挑战,这通常是由于现代 OO 编程语言(如 Java、C# 和 C++)中过于复杂的类层次结构。处理此问题的传统方法包括类层次分析 (CHA)、变量类型分析 (VTA) 以及在复杂的指向分析之后检索类型信息。在本文中,我们通过提出一种称为类型流分析 (TFA) 的新方法来解决这个问题,该方法通过程序的句法结构传播类型信息以及字段访问信息。我们的方法是纯代数的,不需要显式地构建堆抽象。我们从两个角度评估了我们的方法。关于其理论基础,我们已经证明,在上下文不敏感的设置中,我们的方法与标准的基于安徒生子集的关于变量派生类型的指向分析一样精确。对于 TFA 的实验评估,我们在 Soot 框架中实现了该算法,并用它来分析 SPECjvm2008 基准套件。在实验过程中,我们已经证明我们的方法通常比标准的指向分析快 30-100 倍。我们基于在 SPECjvm2008 上运行动态分析器(也是我们实现的)获得的基线数据进一步进行了一系列详细分析。实验结果证实,当 TFA 应用于实际 Java 程序时,可以以可接受的精度实现出色的性能。我们已经证明,在上下文不敏感的设置中,我们的方法与关于变量派生类型的标准安徒生基于子集的指向分析一样精确。对于 TFA 的实验评估,我们在 Soot 框架中实现了该算法,并用它来分析 SPECjvm2008 基准套件。在实验过程中,我们已经证明我们的方法通常比标准的指向分析快 30-100 倍。我们基于在 SPECjvm2008 上运行动态分析器(也是我们实现的)获得的基线数据进一步进行了一系列详细分析。实验结果证实,当 TFA 应用于实际 Java 程序时,可以以可接受的精度实现出色的性能。我们已经证明,在上下文不敏感的设置中,我们的方法与关于变量派生类型的标准安徒生基于子集的指向分析一样精确。对于 TFA 的实验评估,我们在 Soot 框架中实现了该算法,并用它来分析 SPECjvm2008 基准套件。在实验过程中,我们已经证明我们的方法通常比标准的指向分析快 30-100 倍。我们基于在 SPECjvm2008 上运行动态分析器(也是我们实现的)获得的基线数据进一步进行了一系列详细分析。实验结果证实,当 TFA 应用于实际 Java 程序时,可以以可接受的精度实现出色的性能。我们的方法与关于变量派生类型的标准安徒生基于子集的指向分析一样精确。对于 TFA 的实验评估,我们在 Soot 框架中实现了该算法,并用它来分析 SPECjvm2008 基准套件。在实验过程中,我们已经证明我们的方法通常比标准的指向分析快 30-100 倍。我们基于在 SPECjvm2008 上运行动态分析器(也是我们实现的)获得的基线数据进一步进行了一系列详细分析。实验结果证实,当 TFA 应用于实际 Java 程序时,可以以可接受的精度实现出色的性能。我们的方法与关于变量派生类型的标准安徒生基于子集的指向分析一样精确。对于 TFA 的实验评估,我们在 Soot 框架中实现了该算法,并用它来分析 SPECjvm2008 基准套件。在实验过程中,我们已经证明我们的方法通常比标准的指向分析快 30-100 倍。我们基于在 SPECjvm2008 上运行动态分析器(也是我们实现的)获得的基线数据进一步进行了一系列详细分析。实验结果证实,当 TFA 应用于实际 Java 程序时,可以以可接受的精度实现出色的性能。我们已经在 Soot 框架中实现了该算法,并用它来分析 SPECjvm2008 基准套件。在实验过程中,我们已经证明我们的方法通常比标准的指向分析快 30-100 倍。我们基于在 SPECjvm2008 上运行动态分析器(也是我们实现的)获得的基线数据进一步进行了一系列详细分析。实验结果证实,当 TFA 应用于实际 Java 程序时,可以以可接受的精度实现出色的性能。我们已经在 Soot 框架中实现了该算法,并用它来分析 SPECjvm2008 基准套件。在实验过程中,我们已经证明我们的方法通常比标准的指向分析快 30-100 倍。我们基于在 SPECjvm2008 上运行动态分析器(也是我们实现的)获得的基线数据进一步进行了一系列详细分析。实验结果证实,当 TFA 应用于实际 Java 程序时,可以以可接受的精度实现出色的性能。在 SPECjvm2008 上。实验结果证实,当 TFA 应用于实际 Java 程序时,可以以可接受的精度实现出色的性能。在 SPECjvm2008 上。实验结果证实,当 TFA 应用于实际 Java 程序时,可以以可接受的精度实现出色的性能。
更新日期:2020-10-06
down
wechat
bug