【24h】

Detecting Inefficiently-Used Containers to Avoid Bloat

机译:检测效率低下的容器以避免膨胀

获取原文
获取原文并翻译 | 示例

摘要

runtime bloat degrades significantly the performance and scalability of software systems. An important source of bloat is the inefficient use of containers. It is expensive to create inefficiently-used containers and to invoke their associated methods; as this may ultimately execute large volumes of code; with call stacks dozens deep; and allocate many temporary objects. This paper presents practical static and dynamic tools that can find inappropriate use of containers in java programs. At the core of these tools is a base static analysis that identifies; for each container; the objects that are added to this container and the key statements (I.e.; heap loads and stores) that achieve the semantics of common container operations such as add and get. The static tool finds problematic uses of containers by considering the nesting relationships among the loops where these semantics-achieving statements are located; while the dynamic tool can instrument these statements and find inefficiencies by profiling their execution frequencies. The high precision of the base analysis is achieved by taking advantage of a context-free language (cfl)-reachability formulation of points-to analysis and by accounting for container-specific properties. It is demand-driven and client-driven; facilitating refinement specific to each queried container object and increasing scalability. The tools built with the help of this analysis can be used both to avoid the creation of container-related performance problems early during development; and to help with diagnosis when problems are observed during tuning. Our experimental results show that the static tool has a low false positive rate and produces more relevant information than its dynamic counterpart. Further case studies suggest that significant optimization opportunities can be found by focusing on statically-identified containers for which high allocation frequency is observed at run time.
机译:运行时膨胀会严重降低软件系统的性能和可伸缩性。膨胀的重要来源是容器使用效率低下。创建效率低下的容器并调用其关联方法很昂贵;因为这最终可能会执行大量代码;具有数十个调用堆栈;并分配许多临时对象。本文介绍了实用的静态和动态工具,它们可以在Java程序中发现容器的不当使用。这些工具的核心是基础静态分析,可识别;对于每个容器;添加到此容器中的对象以及实现常用容器操作(如add和get)的语义的关键语句(即堆加载和存储)。静态工具通过考虑这些实现语义的语句所位于的循环之间的嵌套关系来发现容器的使用问题。动态工具可以分析这些语句并通过分析它们的执行频率来发现低效率。通过利用指向要分析的上下文无关语言(cfl)-可到达性公式并考虑容器的特定属性,可以实现基础分析的高精度。它是需求驱动和客户驱动的;促进特定于每个查询的容器对象的细化并增加可伸缩性。借助该分析构建的工具既可以避免在开发早期就产生与容器相关的性能问题,又可以避免在开发过程中出现容器相关的性能问题。并在调试过程中发现问题时帮助诊断。我们的实验结果表明,静态工具的误报率低,并且比动态工具产生的信息更多。进一步的案例研究表明,通过关注在运行时观察到高分配频率的静态标识的容器,可以找到重大的优化机会。

著录项

相似文献

  • 外文文献
  • 中文文献
  • 专利
获取原文

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号