Abstract:
In this work we investigate new and improved approaches to performance analysis for large-scale object-oriented applications. Such applications are challenging to analyse for performance due to the overwhelming scale of the runtime behaviour they exhibit. We conduct a systematic mapping study in which we identify 253 empirical performance analysis approaches that are applicable to object-oriented software and categorise them according to ten facets that capture their intent and implementation. e results allow us to highlight the contributions of the existing literature and identify areas where there are interesting challenges and opportunities. One challenge is that most existing profiling techniques report performance costs in a method-centric manner, but modern applications utilise thousands of methods with complex calling patterns. Consequently their performance costs are often thinly distributed across many locations with few easily identifiable bottlenecks. We formulate subsuming methods analysis, a technique that is able to automatically identify repeated patterns of method calls in the runtime behaviour that are induced by the libraries, design patterns and coding idioms used in the software. Identifying and aggregating costs over these patterns allows us to identify opportunities to improve performance based upon their optimisation. We evaluate subsuming methods analysis on the DaCapo benchmark suite and a real-world industrial application, showing that it significantly reduces the size of the performance data set, facilitating its interpretation. We demonstrate that it allows us to find significant performance optimisations (from 20% to 50% improvement in our case studies). Finally most performance engineering approaches focus only on understanding the use of runtime resources, they do not measure the value being provided in return. erefore it is impossible to say whether the runtime cost of a code path is reasonable given the benefit it provides. We devise efficiency analysis, an empirical approach that measures value in terms of the visible data generated by a code path. Combining this with runtime cost information we can quantify the efficiency of every code path in an application. We evaluate efficiency analysis, demonstrating it allows us to find novel optimisation opportunities, providing improvements of up to 36% in our case studies.