RELEASE NOTES BLOAT 1.0 September 19, 2001 Why another BLOAT release? It's been quite a while since we've released a new version of the Byte-code-Level Optimizer and Analysis Tools (BLOAT). This release contains a handful of bug fixes, quite a bit of new functionality, and additional documentation for using BLOAT. Performing inter-procedural analysis and method inlining As part of his thesis work, Dave added several classes to perform inter-procedural analysis. The result of this analysis is used to perform call site specialization and method inlining. These classes reside in the EDU.purdue.cs.bloat.inline package. BLOAT "contexts" Previously, BLOAT had only operated on one class at a time. In order to perform inter-procedural (and hence, interclass) analysis, the "context" framework was created to edit and store classes, fields, methods, and various system-wide data structure such as the call graph. The context hierarchy is rooted with the EditorContext interface and is concretely implemented with classes in the EDU.purdue.cs.bloat.context package. Replacing loads and stores with stack manipulation instructions [Tom, do you want to say something about the work you've done?] Additional class editing capabilities As part of work he was doing at GemStone, Dave added the ability to add and remove methods and fields, as well as the ability to create a class from "scratch". For instance, you can create a new ClassEditor object giving a class name, its supertype, etc. These changes are reflected in new constructors for MethodEditor, FieldEditor, and the newClass() method of EditorContext. A Java class loader that BLOAT classes BLOAT 1.0 also contains a Java ClassLoader that intercepts a class as it is loaded, and BLOATs it. The BloatingClassLoader class in the EDU.purdue.cs.bloat.context package extends java.net.URLClassLoader and contains an abstract bloat() method that allows the user to edit the class being loaded as a BLOAT ClassEditor. Examples of how to use BLOAT There are several useful examples of to use the new features of BLOAT. In particular, the BuildBean and TraceMethods are useful. The bloat.BuildBean example program creates a JavaBean class from scratch. The bloat.TraceMethods example program uses a BloatingClassLoader to annotate a classes methods at runtime to print out "Entering " as each method is invoked.