Learn More
Our research group has analyzed many industrial, framework-based applications. In these applications, simple functionality often requires excessive runtime activity. It is increasingly difficult to assess if and how inefficiencies can be fixed. Much of this activity involves the transformation of information, due to framework couplings. We present an(More)
Today, programmers work in an environment of rapid global development of large-scale applications that have become increasingly interconnected. These drivers are the backdrop for four important software engineering trends: the wide adoption of object-oriented principles, the pervasive use of abstractions, system and data integration, and the increasing need(More)
Despite Java's automatic reclamation of memory, memory leaks remain an important problem. For example, we frequently encounter memory leaks that cause production servers to crash. These servers represent an increasingly common class of Java applications: they are large scale and they make heavy use of frameworks. For these applications , existing tools(More)
Framework-intensive applications (e.g., Web applications) heavily use temporary data structures, often resulting in performance bottlenecks. This paper presents an optimized blended escape analysis to approximate object lifetimes and thus, to identify these temporaries and their uses. Empirical results show that this optimized analysis on average prunes 37%(More)
Many opportunities for easy, big-win, program optimizations are missed by compilers. This is especially true in highly layered Java applications. Often at the heart of these missed optimization opportunities lie computations that, with great expense, produce data values that have little impact on the program's final output. Constructing a new date formatter(More)
This paper defines a new analysis paradigm, <i>blended program analysis</i>, that enables practical, effective analysis of large framework-based Java applications for performance understanding. Blended analysis combines a <i>dynamic</i> representation of the program calling structure, with a <i>static</i> analysis applied to a region of that calling(More)
The diagnosis of performance and memory problems can require the analysis of large and complex data sets describing a program's execution. An analysis tool must help the user both find the right organization of the data to uncover useful information, and work with the data through a lengthy and unpredicatable discovery process. In this paper we present(More)
Generally believed to be a problem belonging to the compiler and architecture communities, performance optimization has rarely gained attention in mainstream software engineering research. However, due to the proliferation of large-scale object-oriented software designed to solve increasingly complex problems, performance issues stand out, preventing(More)