Extracting library-based object-oriented applications

In an increasingly popular model of software distribution, software is developed in one computing environment and deployed in other environments by transfer over the internet. Extraction tools perform a static whole-program analysis to determine unused functionality in applications in order to reduce the time required to download applications. We have identified a number of scenarios where extraction tools require information beyond what can be inferred through static analysis: software distributions other than complete applications, the use of reflection, and situations where an application uses separately developed class libraries. This paper explores these issues, and introduces a modular specification language for expressing the information required for extraction. We implemented this language in the context of Jax, an industrial-strength application extractor for Java, and present a small case study in which different extraction scenarios are applied to a commercially available library-based application.

[1]  David F. Bacon,et al.  Fast and effective optimization of statically typed object-oriented languages , 1997 .

[2]  David Ungar,et al.  Sifting out the gold: delivering compact applications from an exploratory object-oriented programming environment , 1994, OOPSLA '94.

[3]  Frank Tip,et al.  A study of dead data members in C++ applications , 1998, PLDI.

[4]  Frank Tip,et al.  Class hierarchy specialization , 1997, OOPSLA '97.

[5]  Daniel Jackson,et al.  Lightweight extraction of object models from bytecode , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[6]  J. Mayer Advanced packaging , 1986 .

[7]  W ScheiflerRobert An analysis of inline substitution for a structured programming language , 1977 .

[8]  Urs Hölzle,et al.  Eliminating Virtual Function Calls in C++ Programs , 1996, ECOOP.

[9]  Emden R. Gansner,et al.  AC++ Data Model Supporting Reachability Analysis and Dead Code Detection , 1998, IEEE Trans. Software Eng..

[10]  David F Bacon Fast and Effective Optimization of Statically Typed Object-Oriented , 1998 .

[11]  Ole Agesen,et al.  Concrete type inference: delivering object-oriented applications , 1995 .

[12]  Dirk Grunwald,et al.  Reducing indirect function call overhead in C++ programs , 1994, POPL '94.

[13]  David F. Bacon,et al.  Fast static analysis of C++ virtual function calls , 1996, OOPSLA '96.

[14]  David Ungar,et al.  Sifting out the gold: delivering compact applications from an exploratory object-oriented programming environment , 1994, OOPSLA 1994.

[15]  Dustin R. Callaway Inside Servlets: Server-Side Programming for the Java Platform with Other , 1999 .

[16]  Emden R. Gansner,et al.  A C++ data model supporting reachability analysis and dead code detection , 1997, ESEC '97/FSE-5.

[17]  Robert Scheifler,et al.  An analysis of inline substitution for a structured programming language , 1977, CACM.

[18]  Jens Palsberg,et al.  Scalable propagation-based call graph construction algorithms , 2000, OOPSLA '00.

[19]  Amer Diwan,et al.  Simple and effective analysis of statically-typed object-oriented programs , 1996, OOPSLA '96.

[20]  Frank Tip,et al.  Practical experience with an application extractor for Java , 1999, OOPSLA '99.

[21]  David Grove,et al.  Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis , 1995, ECOOP.