6
I Use This!
Inactive

News

Analyzed 1 day ago. based on code collected 2 days ago.
Posted over 17 years ago by Ian Rogers
Page edited by Ian Rogers - "Add Aleksey Shipilev and Apache Harmony." Jikes RVM was independently developed as part of the Jalapeño research project at the IBM ... [More] T.J. Watson Research Center. The following IBM Research employees, academic visitors, and student co-ops contributed to the initial and/or subsequent releases of Jikes RVM. Bowen Alpern Anthony Cocchi Han Lee Janice Shepherd Matthew Arnold Julian Dolby Derek Lieber Manu Sridharan Dick Attanasio Tracy Ferguson Mark Mergen Peter F. Sweeney David Bacon Stephen Fink Ton Ngo Martin Trapp John J. Barton Eugene Gluzberg Jeff Palm Kris Venstermans Steve Blackburn David Grove Igor Pechtchanski John Whaley Rastislav Bodik Michael Hind Vivek Sarkar   Maria Butrico Dave Hovemeyer Mauricio Serrano   Perry Cheng Susan Hummel Arvin Shepherd   Jong-Deok Choi Sergiy Kyrylkov Stephen Smith   The following people have greatly contributed to the success of the Jikes RVM project by having served as core team members. Steve Augart Julian Dolby, IBM Research Stephen Fink Matthias Hauswirth, University of Colorado at Boulder Chris Hoffmann, University of Massachussetts Feng Qian, McGill University Peter F. Sweeney, IBM Research The Jikes RVM project sincerely thanks the following contributors to the system: Eddie Aftandilian Steven Augart Michael Baer Greg Borota Shane Brewer Brian D. Carlstrom Peter Donald Philippe Faes Chapman Flack Daniel Frampton Robin Garner Georgios Gousios Andrew Gray Jungwoo Ha Matthias Hauswirth Matthew Hertz Chris Hoffmann Xianglong Huang Richard Jones Garrett Kolpin Christos-Efthymois Kotselidis Sergiy Kyrylkov Alan Lawrence Kien Le Han Lee John Leuner Lukas Loehrer Avery Moon J. Eliot B. Moss Elias Naur Anders Biehl Norgaard Jeff Palm Filip Pizlo Tuan Phan Ian Rogers Aleksey Shipilev Jeremy Singer Stephen Smaldone Sunil Soman Darko Stefanovic Tom VanDrunen Ian Warrington Mark Wielaard Yuval Yarom Lingli Zhang Jisheng Zhao Jikes RVM uses either the class libraries produced by the GNU Classpath project or Apache Harmony. Thanks to David R. Hanson,Christoper W. Fraser, and Todd Proebsting for making available the iburg tool, which we've enhanced for use in Jikes RVM. Contributors to the Jalapeño research project Thanks to Codehaus and Sourceforge for providing hosting services. View Online Changes between revision 11 and revision 12:  Jikes RVM was independently developed as part of the [Jalapeño research project|http://www.research.ibm.com/jalapeno] at the [IBM T.J. Watson Research Center|http://www.research.ibm.com]. The following IBM Research employees, academic visitors, and student co-ops contributed to the initial and/or subsequent releases of Jikes RVM.  | [Bowen Alpern|mailto:[email protected]] | [Anthony Cocchi|mailto:[email protected]] | [Han Lee|http://www.cs.colorado.edu/~hanlee] | Janice Shepherd |  | [Matthew Arnold|http://www.research.rutgers.edu/~marnold] | [Julian Dolby|mailto:[email protected]] | Derek Lieber | [Manu Sridharan|http://www.cs.berkeley.edu/~manu_s] |  | [Dick Attanasio|mailto:[email protected]] | Tracy Ferguson | [Mark Mergen|mailto:[email protected]] | [Peter F. Sweeney|http://www.research.ibm.com/people/p/pfs] |  | [David Bacon|http://www.research.ibm.com/people/d/dfb] | [Stephen Fink|http://www.research.ibm.com/people/s/sfink] | [Ton Ngo|mailto:[email protected]] | [Martin Trapp|mailto:[email protected]] |  | [John J. Barton|http://www.hpl.hp.com/personal/John_Barton] | Eugene Gluzberg | Jeff Palm | [Kris Venstermans|http://www.elis.ugent.be/~kvenster/research.html] |  | [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn] | [David Grove|http://www.research.ibm.com/people/d/dgrove] | [Igor Pechtchanski|mailto:[email protected]] | John Whaley |  | [Rastislav Bodik|http://www.cs.berkeley.edu/~bodik] | [Michael Hind|http://www.research.ibm.com/people/h/hind] | [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar] | |  | [Maria Butrico|mailto:[email protected]] | Dave Hovemeyer | [Mauricio Serrano|http://www.intel.com/research/mrl/people/serrano_m.htm] | |  | [Perry Cheng|http://www.research.ibm.com/people/p/perryche] | Susan Hummel | Arvin Shepherd | |  | [Jong-Deok Choi|http://www.research.ibm.com/people/j/jdchoi] | [Sergiy Kyrylkov|http://www.cs.unm.edu/~sergiy] | [Stephen Smith|mailto:[email protected]] | |  The following people have greatly contributed to the success of the Jikes RVM project by having served as core team members.  * Steve Augart  * [Julian Dolby|mailto:[email protected]], IBM Research  * [Stephen Fink|http://www.research.ibm.com/people/s/sfink]  * [Matthias Hauswirth|http://www.inf.unisi.ch/faculty/hauswirth], University of Colorado at Boulder  * [Chris Hoffmann|http://ali-www.cs.umass.edu/~hoffmann], University of Massachussetts  * [Feng Qian|http://www.sable.mcgill.ca/~fqian], McGill University  * [Peter F. Sweeney|http://www.research.ibm.com/people/p/pfs], IBM Research     The Jikes RVM project sincerely thanks the following contributors to the system:  | Eddie Aftandilian | [Steven Augart|http://www.augart.com/] | Michael Baer | Greg Borota |  | [Shane Brewer|http://www.cs.ualberta.ca/~brewer] | [Brian D. Carlstrom|http://carlstrom.com/] | Peter Donald | [Philippe Faes|mailto:Philippe.Faes @AT@ UGent dot be] |  | Chapman Flack | Daniel Frampton | Robin Garner | [Georgios Gousios|http://istlab.dmst.aueb.gr/~george/] |  | Andrew Gray | Jungwoo Ha | [Matthias Hauswirth|http://www.inf.unisi.ch/faculty/hauswirth] | [Matthew Hertz|http://www-ali.cs.umass.edu/~hertz/] |  | [Chris Hoffmann|http://ali-www.cs.umass.edu/~hoffmann] | [Xianglong Huang|http://www.cs.utexas.edu/users/xlhuang] | [Richard Jones|http://www.cs.kent.ac.uk/people/staff/rej/] | Garrett Kolpin |  |Christos-Efthymois Kotselidis | [Sergiy Kyrylkov|http://www.cs.unm.edu/~sergiy] | Alan Lawrence | Kien Le |  | Han Lee | John Leuner | Lukas Loehrer | Avery Moon |  | [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss] | Elias Naur | Anders Biehl Norgaard | Jeff Palm |  | [Filip Pizlo|http://homepage.mac.com/pizlo/] | Tuan Phan | [Ian Rogers|http://www.cs.man.ac.uk/~irogers] | [Jeremy Singer|http://www.cs.man.ac.uk/~jsinger/] |  | Stephen Smaldone | [Sunil Soman|http://www.cs.ucsb.edu/~sunils] | [Darko Stefanovic|http://www.cs.unm.edu/~darko] | [Tom VanDrunen|http://www.cs.purdue.edu/people/vandrutj] |  | Ian Warrington | [Mark Wielaard|http://klomp.org/mark] | [Yuval Yarom|http://www.cs.adelaide.edu.au/~yval/] | [Lingli Zhang|http://www.cs.ucsb.edu/~lingli_z] |  |[Jisheng Zhao|http://www.cs.manchester.ac.uk/apt/people/jzhao/] |   | [Filip Pizlo|http://homepage.mac.com/pizlo/] | Tuan Phan | [Ian Rogers|http://www.cs.man.ac.uk/~irogers] | Aleksey Shipilev |  | [Jeremy Singer|http://www.cs.man.ac.uk/~jsinger/] | Stephen Smaldone | [Sunil Soman|http://www.cs.ucsb.edu/~sunils] | [Darko Stefanovic|http://www.cs.unm.edu/~darko] |  | [Tom VanDrunen|http://www.cs.purdue.edu/people/vandrutj] | Ian Warrington | [Mark Wielaard|http://klomp.org/mark] | [Yuval Yarom|http://www.cs.adelaide.edu.au/~yval/] |  | [Lingli Zhang|http://www.cs.ucsb.edu/~lingli_z] | [Jisheng Zhao|http://www.cs.manchester.ac.uk/apt/people/jzhao/] |     Jikes RVM uses the class libraries produced by the [GNU Classpath project|http://www.gnu.org/software/classpath].   Jikes RVM uses either the class libraries produced by the [GNU Classpath project|http://www.gnu.org/software/classpath] or [Apache Harmony|http://harmony.apache.org/].     Thanks to [David R. Hanson|http://research.microsoft.com/~drh],[Christoper W. Fraser|http://research.microsoft.com/~cwfraser], and [Todd Proebsting|http://research.microsoft.com/~toddpro] for making available the [iburg tool|http://cs.princeton.edu/software/iburg], which we've enhanced for use in Jikes RVM.     [Contributors|http://www.research.ibm.com/jalapeno/members.html] to the Jalapeño research project     Thanks to [Codehaus|http://www.codehaus.org] and [Sourceforge|http://www.sourceforge.org] for providing hosting services. View All Revisions | Revert To Version 11 [Less]
Posted over 17 years ago by David Grove
Page edited by David Grove Releases of Jikes RVM are available from the Sourceforge download page. The most recent release of Jikes RVM is 3.0.0. ... [More] View Online Changes between revision 6 and revision 7:  Releases of Jikes RVM are available from the Sourceforge [download|http://sourceforge.net/project/showfiles.php?group_id=128805] page.      The most recent release of Jikes RVM is [2.9.3|http://downloads.sourceforge.net/jikesrvm/jikesrvm-2.9.3.tar.bz2].   The most recent release of Jikes RVM is [3.0.0|http://downloads.sourceforge.net/jikesrvm/jikesrvm-3.0.0.tar.bz2]. View All Revisions | Revert To Version 6 [Less]
Posted over 17 years ago by Ian Rogers
Page edited by Ian Rogers - "Update to reflect building of Harmony as a class library." This guide describes how to build Jikes RVM. The first section is an ... [More] overview of the Jikes RVM build process and this is followed by your system requirements and a detailed description of the steps required to build Jikes RVM. Note Once you have things working, as described below, the buildit  script will provide a fast and easy way to build the system.  We recommend you get things working as described below first, so you can be sure you've met the requisite dependencies etc. Overview Compiling the source code The majority of Jikes RVM is written in Java and will be compiled into class files just as with other Java applications. There is also a small portion of Jikes RVM that is written in C that must be compiled with a C compiler such as gcc.  Jikes RVM uses Ant version 1.6.5 or later as the build tool that orchestrates the build process and executes the steps required in building Jikes RVM. Note Jikes RVM requires a complete install of ant, including the optional tasks. These are present if you download and install ant manually. Some Linux distributions have decided to break ant into multiple packages. So if you are installing on a platform such as Debian you may need to install another package such as 'ant-optional'. Generating source code The build process also generates Java and C source code based on build time constants such as the selected instruction architecture, garbage collectors and compilers. The generation of the source code occurs prior to the compilation phase. Bootstrapping the RVM Jikes RVM compiles Java class files and produces arrays of code and data. To build itself Jikes RVM will execute on an existing Java Virtual Machine and compiles a copy of it's own class files into a boot image for the code and data using the boot image writer tool. The set of files compiled is called the Primordial Class List. The boot image runner is a small C program that loads the boot image and transfers control flow into Jikes RVM. Class libraries The Java class library is the mechanism by which Java programs communicate with the outside world. Jikes RVM has configurable class library support, the most mature of which is the the GNU Classpath class library. In the release version of Jikes RVM is support for the Apache Harmony class library. For GNU Classpath, the developer can either specify a particular version of GNU Classpath to use. By default the build process will download and build GNU Classpath. Setting the ant property classlib.provider to Harmony (see how to define ant properties) will change the build process to download and build the Apache Harmony class library. Target Requirements Jikes RVM is known to build and work on certain combinations of instruction architectures and operating systems. The following sections detail the supported architectures and operating systems. Architectures  The PowerPC (or ppc) and ia32 instruction set architectures are supported by Jikes RVM. Intel Intel's Instruction Set Architectures (ISAs) get known by different names: IA-32 is the name used to describe processors such as 386, 486 and the Pentium processors. It is popularly called x86 or sometimes in our documentation as x86-32. IA-32e is the name used to describe the extension of the IA-32 architecture to support 8 more registers and a 64-bit address space. It is popularly called x86_64 or AMD64, as AMD chips were the first to support it. It is found in processors such AMD's Opteron and Athlon 64, as well as in Intel's own Pentium 4 processors that have EM64T in their name. IA-64 is the name of Intel's Itanium processor ISA. Jikes RVM currently supports the IA-32 ISA. As IA-32e is backward compatible with IA-32, Jikes RVM can be built and run upon IA-32e processors. The IA-64 architecture supports IA-32 code through a compatibility mode or through emulation and Jikes RVM should run in this configuration. Operating Systems Jikes RVM is capable of running on any operating system that is supported by the GNU Classpath library, low level library support is implemented and memory layout is defined. The low level library support includes interaction with the threading and signal libraries, memory management facilities and dynamic library loading services. The memory layout must also be known, as Jikes RVM will attempt to locate the boot image code and data at specific memory locations. These memory locations must not conflict with where the native compiler places it's code and data. Operating systems that are known to work include AIX, Linux and OSX. At one stage a port to win32 was completed but it was never integrated into the main Jikes RVM codebase. Support Matrix The following table details the targets that have historically been supported and the current status of the support. The target.name column is the identifier that Jikes RVM uses to identify this target. target.name Operating System Instruction Architecture Address Size Status ia32-linux Linux ia32 32 bits OK ia32-osx OSX ia32 32 bits Unknown ia32-solaris Solaris ia32 32 bits OK ppc32-aix AIX PowerPC 32 bits OK ppc32-linux Linux PowerPC 32 bits OK ppc32-osx OSX PowerPC 32 bits OK ppc64-aix AIX PowerPC 64 bits OK ppc64-linux Linux PowerPC 64 bits Not Working x86_64-linux Linux ia32 32 bits* OK x86_64 is currently only supported using the legacy 32bit addressing mode and instructions.  Tool Requirements Java Virtual Machine Jikes RVM requires an existing Java Virtual Machine that conforms to Java 5.0 such as Sun JDK 1.5 or IBM JDK 5.0. Some Java Virtual Machines are unable to cope with compiling the Java class library so it is recomended that you install one of the above mentioned JVMs if they are not already installed on your system. The remaining build instructions assume that this Java Virtual Machine on your path. You can run "java -version" to check you are using the correct JVM. Ant Ant version 1.6.5 or later is the tool required to orchestrate the build process. You can download and install the Ant tool from http://ant.apache.org/ if it is not already installed on your system. The remaining build instructions assume that $ANT_HOME/bin is on your path. You can run "ant -version" to check you are running the correct version of ant. C Tool Chain Jikes RVM assumes that the GNU C Tool Chain is present on the system or a tool chain that is reasonably compatible. Most modern *nix environments satisfy this requirement. Bison As part of the build process, Jikes RVM uses the bison tool which should be present on most modern *nix environments. Perl Perl is trivially used as part of the build process but this requirement may be removed in future releases of Jikes RVM. Perl is also used as part of the regression and performance testing framework. Awk GNU Awk is required as part of the regression and performance testing framework but is not required when building Jikes RVM. Extra tools recommended for Solaris pkg-get will greatly simplify installing GNU packages on Solaris. Our patches require that GNU patch is picked up in preference to Sun's, to achieve this, for example, you can create a symbolic link to /usr/bin/gpatch from /opt/csw/bin/patch and make sure /opt/csw/bin is in your path before /usr/bin. Instructions Defining Ant properties There are a number of ant properties that are used to control the build process of Jikes RVM. These properties may either be specified on the command line by "-Dproperty=variable" or they may be specified in a file named ".ant.properties" in the base directory of the jikesrvm source tree. The ".ant.properties" file is a standard Java proeprty file with each line containing a "property=variable" and comments starting with a # and finishing at the end of the line. The following table describes some properties that are commonly specified. Property Description Default host.name The name of the host environment used for building Jikes RVM. The name should match one of the files located in the build/hosts/ directory minus the '.properties' extension. None target.name The name of the target environment for Jikes RVM. The name should match one of the files located in the build/targets/ directory minus the '.properties' extension. This should only be specified when cross compiling the Jikes RVM. See Cross-Platform Building for a detailed description of cross compilation. ${host.name} config.name The name of the configuration used when building Jikes RVM. The name should match one of the files located in the build/configs/ directory minus the '.properties' extension. This setting is further described in the section Configuring the RVM. None patch.name An identifier for the current patch applied to the source tree. See Building Patched Versions for a description of how this fits into the standard usage patterns of Jikes RVM. "" components.dir The directory where Ant looks for external components when building the RVM. ${jikesrvm.dir}/components dist.dir The directory where Ant stores the final Jikes RVM runtime. ${jikesrvm.dir}/dist build.dir The directory where Ant stores the intermediate artifacts generated when building the Jikes RVM. ${jikesrvm.dir}/target protect.config-files Define this property if you do not want the build process to update configuration files when auto downloading components. (Undefined) components.cache.dir The directory where Ant caches downloaded components.  If you explicitly download a component, place it in this directory. (Undefined, forcing download) At a minimum it is recommended that the user specify the host.name property in the ".ant.properties" file. The configuration files in "build/targets/" and "build/hosts/" are designed to work with a typical install but it may be necessary to overide specific properties. The easiest way to achieve this is to specify the properties to override in the ".ant.properties" file. Selecting a Configuration A "configuration" in terms of Jikes RVM is the combination of build time parameters and component selection used for a particular Jikes RVM image. The Configuring the RVM section describes the details of how to define a configuration. Typical configuration names include; production: This configuration defines a fully optimized version of the Jikes RVM. development: This configuration is the same as production but with debug options enabled. The debug options perform internal verification of Jikes RVM which means that it builds and executes more slowly. prototype: This configuration is compiled using an unoptimized compiler and includes minimal components which means it has the fastest build time. prototype-opt: This configuration is compiled using an unoptimized compiler but it includes the adaptive system and optimizing compiler. This configuration has a reasonably fast build time. If a user is working on a particular configuration most of the time they may specify the config.name ant property in ".ant.properties" otherwise it should be passed in on the command line "-Dconfig.name=...". Fetching Dependencies The Jikes RVM has a build time dependency on the GNU Classpath class library and depending on the configuration may have a dependency on GCSpy. The build system will attempt to download and build these dependencies if they are not present or are the wrong version. To just download and install the GNU Classpath class library you can run the command "ant -f build/components/classpath.xml". After this command has completed running it should have downloaded and built the GNU Classpath class library for the current host. See the Using GCSpy page for directions on building configurations with GCSpy support. If you wish to manually download components (for example you need to define a proxy, so ant is not correctly downloading), you can do so and identify the directory containing the downloads using "-Dcomponents.cache.dir=<download directory>" when you build with ant. Building the RVM The next step in building Jikes RVM is to run the ant command "ant" or "ant -Dconfig.name=...". This should build a complete RVM runtime in the directory "${dist.dir}/${config.name}_${target.name}". The following table describes some of the ant targets that can be executed. A complete list of documented targets can be listed by executing the command "ant -projecthelp" Target Description check-properties Check that all the required properties are defined. compile-mmtk Compile MMTk toolkit. prepare-source Generate configuration independent source code if required or force.generation property is set. prepare-config-source Generate source code for the current configuration if required or force.generation property is set. main or runtime Build a runtime image. clean Remove the build and image directory for the current configuration. very-clean As with clean but also remove Java files generated by scripts. real-clean As with very-clean but remove all compiled images. profiled-image Compile a baseline version of the RVM for profiling then use the profile information to recompile the given config.name image. Running the RVM Jikes RVM can be executed in a similar way to most Java Virtual Machines. The difference is that the command is "rvm" and resides in the runtime directory (i.e. "${dist.dir}/${config.name}_${target.name}"). See Running the RVM for a complete list of command line options. View Online Changes between revision 29 and revision 30:  This guide describes how to build Jikes RVM. The first section is an overview of the Jikes RVM build process and this is followed by your system requirements and a detailed description of the steps required to build Jikes RVM.  {note:title=Note}  Once you have things working, as described below, the [buildit|Using buildit]&nbsp; script will provide a fast and easy way to build the system.&nbsp; We recommend you get things working as described below first, so you can be sure you've met the requisite dependencies etc.     {note}     h2. Overview        h3. Compiling the source code     The majority of Jikes RVM is written in Java and will be compiled into class files just as with other Java applications. There is also a small portion of Jikes RVM that is written in C that must be compiled with a C compiler such as gcc.&nbsp; Jikes RVM uses [Ant|http://ant.apache.org] version 1.6.5 or later as the build tool that orchestrates the build process and executes the steps required in building Jikes RVM.  {note:title=Note}  Jikes RVM requires a complete install of ant, including the optional tasks. These are present if you download and install ant manually. Some Linux distributions have decided to break ant into multiple packages. So if you are installing on a platform such as Debian you may need to install another package such as 'ant-optional'.  {note}     h3. Generating source code     The build process also generates Java and C source code based on build time constants such as the selected instruction architecture, garbage collectors and compilers. The generation of the source code occurs prior to the compilation phase.     h3. Bootstrapping the RVM     Jikes RVM compiles Java class files and produces arrays of code and data. To build itself Jikes RVM will execute on an existing Java Virtual Machine and compiles a copy of it's own class files into a *boot image* for the code and data using the *boot image writer* tool. The set of files compiled is called the [Primordial Class List]. The *boot image runner* is a small C program that loads the boot image and transfers control flow into Jikes RVM.     h3. Class libraries     The Java class library is the mechanism by which Java programs communicate with the outside world. Jikes RVM uses the [GNU Classpath|http://www.gnu.org/software/classpath/] class library. The developer can either specify a particular version of GNU Classpath to use or they can allow the build process to download and build an appropriate version of the library.   The Java class library is the mechanism by which Java programs communicate with the outside world. Jikes RVM has configurable class library support, the most mature of which is the the [GNU Classpath|http://www.gnu.org/software/classpath/] class library. In the release version of Jikes RVM is support for the [Apache Harmony|http://harmony.apache.org/] class library.     For GNU Classpath, the developer can either specify a particular version of GNU Classpath to use. By default the build process will download and build GNU Classpath.     Setting the ant property *classlib.provider* to *Harmony* ([see how to define ant properties|#Defining Ant properties]) will change the build process to download and build the Apache Harmony class library.     h2. Target Requirements     Jikes RVM is known to build and work on certain combinations of instruction architectures and operating systems. The following sections detail the supported architectures and operating systems.     h3. Architectures&nbsp;     The PowerPC (or ppc) and ia32 instruction set architectures are supported by Jikes RVM.     h4. Intel     Intel's Instruction Set Architectures (ISAs) get known by different names:  * *IA-32* is the name used to describe processors such as 386, 486 and the Pentium processors. It is popularly called *x86* or sometimes in our documentation as x86-32.  * *IA-32e* is the name used to describe the extension of the IA-32 architecture to support 8 more registers and a 64-bit address space. It is popularly called *x86_64* or *AMD64*, as AMD chips were the first to support it. It is found in processors such AMD's Opteron and Athlon 64, as well as in Intel's own Pentium 4 processors that have *EM64T* in their name.  * *IA-64* is the name of Intel's Itanium processor ISA.     Jikes RVM currently supports the IA-32 ISA. As IA-32e is backward compatible with IA-32, Jikes RVM can be built and run upon IA-32e processors. The IA-64 architecture supports IA-32 code through a compatibility mode or through emulation and Jikes RVM should run in this configuration.     h3. Operating Systems     Jikes RVM is capable of running on any operating system that is supported by the [GNU Classpath|http://www.gnu.org/software/classpath/] library, low level library support is implemented and memory layout is defined. The low level library support includes interaction with the threading and signal libraries, memory management facilities and dynamic library loading services. The memory layout must also be known, as Jikes RVM will attempt to locate the boot image code and data at specific memory locations. These memory locations must not conflict with where the native compiler places it's code and data. Operating systems that are known to work include AIX, Linux and OSX. At one stage a port to win32 was completed but it was never integrated into the main Jikes RVM codebase.     h3. Support Matrix     The following table details the targets that have historically been supported and the current status of the support. The target.name column is the identifier that Jikes RVM uses to identify this target.  || target.name || Operating System || Instruction Architecture || Address Size || Status ||  | ia32-linux | Linux \\ | ia32 \\ | 32 bits \\ | OK \\ |  | ia32-osx | OSX \\ | ia32 \\ | 32 bits \\ | Unknown \\ |  | ia32-solaris | Solaris | ia32 | 32 bits | OK |  | ppc32-aix | AIX | PowerPC \\ | 32 bits \\ | OK \\ |  | ppc32-linux \\ | Linux \\ | PowerPC \\ | 32 bits \\ | OK \\ |  | ppc32-osx \\ | OSX \\ | PowerPC \\ | 32 bits \\ | OK \\ |  | ppc64-aix \\ | AIX \\ | PowerPC \\ | 64 bits \\ | OK \\ |  | ppc64-linux \\ | Linux \\ | PowerPC \\ | 64 bits | Not Working \\ |  | x86_64-linux \\ | Linux \\ | ia32 \\ | 32 bits\* \\ | OK \\ |  * x86_64 is currently only supported using the legacy 32bit addressing mode and instructions.     h2. &nbsp;Tool Requirements        h3. Java Virtual Machine     Jikes RVM requires an existing Java Virtual Machine that conforms to Java 5.0 such as [Sun JDK 1.5|http://java.sun.com] or IBM JDK 5.0. Some Java Virtual Machines are unable to cope with compiling the Java class library so it is recomended that you install one of the above mentioned JVMs if they are not already installed on your system. The remaining build instructions assume that this Java Virtual Machine on your path. You can run "{{java \-version}}" to check you are using the correct JVM.     h3. Ant     [Ant|http://ant.apache.org] version 1.6.5 or later is the tool required to orchestrate the build process. You can download and install the Ant tool from [http://ant.apache.org/] if it is not already installed on your system. The remaining build instructions assume that $ANT_HOME/bin is on your path. You can run "{{ant \-version}}" to check you are running the correct version of ant.     h3. C Tool Chain     Jikes RVM assumes that the GNU C Tool Chain is present on the system or a tool chain that is reasonably compatible. Most modern \*nix environments satisfy this requirement.     h3. Bison     As part of the build process, Jikes RVM uses the bison tool which should be present on most modern \*nix environments.     h3. Perl     Perl is trivially used as part of the build process but this requirement may be removed in future releases of Jikes RVM. Perl is also used as part of the regression and performance testing framework.     h3. Awk     GNU Awk is required as part of the regression and performance testing framework but is not required when building Jikes RVM.     h3. Extra tools recommended for Solaris     pkg-get will greatly simplify installing GNU packages on Solaris. Our patches require that GNU patch is picked up in preference to Sun's, to achieve this, for example, you can create a symbolic link to /usr/bin/gpatch from /opt/csw/bin/patch and make sure /opt/csw/bin is in your path before /usr/bin.     h2. Instructions        h3. Defining Ant properties     There are a number of ant properties that are used to control the build process of Jikes RVM. These properties may either be specified on the command line by "{{\-Dproperty=variable}}" or they may be specified in a file named "{{.ant.properties}}" in the base directory of the jikesrvm source tree. The "{{.ant.properties}}" file is a standard Java proeprty file with each line containing a "{{property=variable}}" and comments starting with a _\#_ and finishing at the end of the line. The following table describes some properties that are commonly specified.  || Property || Description || Default ||  | host.name | The name of the host environment used for building Jikes RVM. The name should match one of the files located in the [{{build/hosts/}}|http://svn.sourceforge.net/viewvc/jikesrvm/rvmroot/trunk/build/hosts/] directory minus the '{{.properties}}' extension. \\ | None |  | target.name | The name of the target environment for Jikes RVM. The name should match one of the files located in the [{{build/targets/}}|http://svn.sourceforge.net/viewvc/jikesrvm/rvmroot/trunk/build/targets/] directory minus the '{{.properties}}' extension. This should only be specified when cross compiling the Jikes RVM. See [Cross-Platform Building] for a detailed description of cross compilation. \\ | {{$\{host.name\}}} \\ |  | config.name | The name of the configuration used when building Jikes RVM. The name should match one of the files located in the [{{build/configs/}}|http://svn.sourceforge.net/viewvc/jikesrvm/rvmroot/trunk/build/configs/] directory minus the '{{.properties}}' extension. This setting is further described in the section [Configuring the RVM]. | None |  | patch.name \\ | An identifier for the current patch applied to the source tree. See [Building Patched Versions] for a description of how this fits into the standard usage patterns of Jikes RVM. | "" |  | components.dir \\ | The directory where Ant looks for external components when building the RVM. \\ | {{$\{jikesrvm.dir\}/components}} \\ |  | dist.dir \\ | The directory where Ant stores the final Jikes RVM runtime. \\ | {{$\{jikesrvm.dir\}/dist}} \\ |  | build.dir \\ | The directory where Ant stores the intermediate artifacts generated when building the Jikes RVM. | {{$\{jikesrvm.dir\}/target}} \\ |  | protect.config-files | Define this property if you do not want the build process to update configuration files when auto downloading components. | (Undefined) |  | components.cache.dir | The directory where Ant caches downloaded components.&nbsp; If you explicitly download a component, place it in this directory. \\ | (Undefined, forcing download) |  At a minimum it is recommended that the user specify the {{host.name}} property in the "{{.ant.properties}}" file.     The configuration files in "[{{build/targets/}}|http://svn.sourceforge.net/viewvc/jikesrvm/rvmroot/trunk/build/targets/]" and "[{{build/hosts/}}|http://svn.sourceforge.net/viewvc/jikesrvm/rvmroot/trunk/build/hosts/]" are designed to work with a typical install but it may be necessary to overide specific properties. The easiest way to achieve this is to specify the properties to override in the "_.ant.properties_" file.     h3. Selecting a Configuration     A "configuration" in terms of Jikes RVM is the combination of build time parameters and component selection used for a particular Jikes RVM image. The [Configuring the RVM] section describes the details of how to define a configuration. Typical configuration names include;  * *production*: This configuration defines a fully optimized version of the Jikes RVM.  * *development*: This configuration is the same as production but with debug options enabled. The debug options perform internal verification of Jikes RVM which means that it builds and executes more slowly.  * *prototype*: This configuration is compiled using an unoptimized compiler and includes minimal components which means it has the fastest build time.  * *prototype-opt*: This configuration is compiled using an unoptimized compiler but it includes the adaptive system and optimizing compiler. This configuration has a reasonably fast build time.     If a user is working on a particular configuration most of the time they may specify the config.name ant property in "{{.ant.properties}}" otherwise it should be passed in on the command line "{{\-Dconfig.name=...}}".     h3. Fetching Dependencies     The Jikes RVM has a build time dependency on the [GNU Classpath|http://www.gnu.org/software/classpath/] class library and depending on the configuration may have a dependency on [GCSpy|http://www.cs.kent.ac.uk/projects/gc/gcspy/]. The build system will attempt to download and build these dependencies if they are not present or are the wrong version.     To just download and install the [GNU Classpath|http://www.gnu.org/software/classpath/] class library you can run the command "{{ant \-f build/components/classpath.xml}}". After this command has completed running it should have downloaded and built the [GNU Classpath|http://www.gnu.org/software/classpath/] class library for the current host. See the [Using GCSpy] page for directions on building configurations with GCSpy support.     If you wish to manually download components (for example you need to define a proxy, so ant is not correctly downloading), you can do so and identify the directory containing the downloads using "{{\-Dcomponents.cache.dir=<download directory>}}" when you build with ant.     h3. Building the RVM     The next step in building Jikes RVM is to run the ant command "{{ant}}" or "{{ant \-Dconfig.name=...}}". This should build a complete RVM runtime in the directory "$\{dist.dir\}/$\{config.name\}_$\{target.name\}". The following table describes some of the ant targets that can be executed. A complete list of documented targets can be listed by executing the command "{{ant \-projecthelp}}"  || Target || Description ||  | check-properties | Check that all the required properties are defined. |  | compile-mmtk | Compile MMTk toolkit. \\ |  | prepare-source | Generate configuration independent source code if required or force.generation property is set. |  | prepare-config-source | Generate source code for the current configuration if required or force.generation property is set. \\ |  | main or runtime \\ | Build a runtime image. |  | clean | Remove the build and image directory for the current configuration. \\ |  | very-clean | As with clean but also remove Java files generated by scripts. \\ |  | real-clean | As with very-clean but remove all compiled images. \\ |  | profiled-image | Compile a baseline version of the RVM for profiling then use the profile information to recompile the given {{config.name}} image. \\ |     h3. Running the RVM     Jikes RVM can be executed in a similar way to most Java Virtual Machines. The difference is that the command is "{{rvm}}" and resides in the runtime directory (i.e. "$\{dist.dir\}/$\{config.name\}_$\{target.name\}"). See [Running the RVM] for a complete list of command line options. View All Revisions | Revert To Version 29 [Less]
Posted over 17 years ago by jisheng zhao
Page edited by jisheng zhao Jikes™ RVM executes Java virtual machine byte code instructions from .class files. It does not compile Java™ source code. Therefore, you must ... [More] compile all Java source files into bytecode using your favorite Java compiler. For example, to run class foo with source code in file foo.java: % javac foo.java % rvm foo The general syntax is rvm [rvm options...] class [args...] You may choose from a myriad of options for the rvm command-line. Options fall into two categories: standard and non-standard. Non-standard options are preceded by "-X:". Standard Command-Line Options We currently support a subset of the JDK 1.5 standard options. Below is a list of all options and their descriptions. Unless otherwise noted each option is supported in Jikes RVM. Option Description {-cp or -classpath} <directories and zip/jar files separated by ":"> set search path for application classes and resources -D<name>=<value> set a system property -verbose:[ class | gc | jni ] enable verbose output -version print current VM version and terminate the run -showversion print current VM version and continue running -fullversion like "-version", but with more information -? or -help print help message -X print help on non-standard options -jar execute a jar file -javaagent:<jarpath>[=<options>] load Java programming language agent, see java.lang.instrument Non-Standard Command-Line Options The non standard command-line options are grouped according to the subsystem that they control. The following sections list the available options in each group. Core Non-Standard Command-Line Options Option Description -X:verbose Print out additional lowlevel information for GC and hardware trap handling -X:verboseBoot=<number> Print out additional information while VM is booting, using verbosity level <number> -X:sysLogfile=<filename> Write standard error message to <filename> -X:ic=<filename> Read boot image code from <filename> -X:id=<filename> Read boot image data from <filename> -X:ir=<filename> Read boot image ref map from <filename> -X:vmClasses=<path> Load the com.ibm.jikesrvm.* and java.* classes from <path> -X:cpuAffinity=<number> The physical CPU to which first virtual processor is bound -X:processors=<number|"all"> The number of virtual processors Memory Non-Standard Command-Line Options Option Description -Xms<number><unit> Initial size of heap where <number> is an integer, an extended-precision floating point or a hexadecimal value and <unit> is one of T (Terabytes), G (Gigabytes), M (Megabytes), pages (of size 4096), K (Kilobytes) or <no unit> for bytes -Xmx<number><unit> Maximum size of heap. See above for definition of <number> and <unit> Garbage Collector Non-Standard Command-Line Options These options are all prefixed by -X:gc:. Boolean options. Option Description protectOnRelease Should memory be protected on release? echoOptions Echo when options are set? printPhaseStats When printing statistics, should statistics for each gc-mutator phase be printed? xmlStats Print end-of-run statistics in XML format eagerCompleteSweep Should we eagerly finish sweeping at the start of a collection fragmentationStats Should we print fragmentation statistics for the free list allocator? verboseFragmentationStats Should we print verbose fragmentation statistics for the free list allocator? verboseTiming Should we display detailed breakdown of where GC time is spent? noFinalizer Should finalization be disabled? noReferenceTypes Should reference type processing be disabled? fullHeapSystemGC Should a major GC be performed when a system GC is triggered? ignoreSystemGC Should we ignore calls to java.lang.System.gc? variableSizeHeap Should we shrink/grow the heap to adjust to application working set? eagerMmapSpaces If true, all spaces are eagerly demand zero mmapped at boot time sanityCheck Perform sanity checks before and after each collection? Value options. Option Type Description markSweepMarkBits int Number of bits to use for the header cycle of mark sweep spaces verbose int GC verbosity level stressFactor bytes Force a collection after this much allocation metaDataLimit bytes Trigger a GC if the meta data volume grows to this limit boundedNursery bytes Bound the maximum size of the nursery to this value fixedNursery bytes Fix the minimum and maximum size of the nursery to this value debugAddress address Specify an address at runtime for use in debugging Base Compiler Non-Standard Command-Line Options Boolean options Option Description edge_counters Insert edge counters on all bytecode-level conditional branches invocation_counters Select methods for optimized recompilation by using invocation counters Opt Compiler Non-Standard Command-Line Options Boolean options. Option Description local_constant_prop Perform local constant propagation local_copy_prop Perform local copy propagation local_cse Perform local common subexpression elimination global_bounds_check Perform global Array Bound Check elimination on Demand monitor_removal Try to remove unnecessary monitor operations invokee_thread_local Compile the method assuming the invokee is thread-local no_callee_exceptions Assert that any callee of this compiled method will not throw exceptions? simple_escape_ipa Eagerly compute method summaries for simple escape analysis field_analysis Eagerly compute method summaries for flow-insensitive field analysis scalar_replace_aggregates Perform scalar replacement of aggregates reorder_code Reorder basic blocks for improved locality and branch prediction reorder_code_ph Reorder basic blocks using Pettis and Hansen Algo2 inline_new Inline allocation of scalars and arrays inline_write_barrier Inline write barriers for generational collectors inline Inline statically resolvable calls guarded_inline Guarded inlining of non-final virtual calls guarded_inline_interface Speculatively inline non-final interface calls static_splitting CFG splitting to create hot traces based on static heuristics redundant_branch_elimination Eliminate redundant conditional branches preex_inline Pre-existence based inlining ssa Should SSA form be constructed on the HIR? load_elimination Should we perform redundant load elimination during SSA pass? coalesce_after_ssa Should we coalesce move instructions after leaving SSA? expression_folding Should we try to fold expressions with constants in SSA form? live_range_splitting Split live ranges using LIR SSA pass? gcp Perform global code placement gcse Perform global code placement verbose_gcp Perform noisy global code placement licm_ignore_pei Assume PEIs do not throw or state is not observable turn_whiles_into_until Turn whiles into untils loop_versioning Loop versioning handler_liveness Store liveness for handlers to improve dependence graph at PEIs schedule_prepass Perform prepass instruction scheduling no_checkcast Should all checkcast operations be (unsafely) eliminated? no_checkstore Should all checkstore operations be (unsafely) eliminated? no_bounds_check Should all bounds check operations be (unsafely) eliminated? no_null_check Should all null check operations be (unsafely) eliminated? no_synchro Should all synchronization operations be (unsafely) eliminated? no_threads Should all yield points be (unsafely) eliminated? no_cache_flush Should cache flush instructions (PowerPC SYNC/ISYNC) be omitted? NOTE: Cannot be correctly changed via the command line! reads_kill Should we constrain optimizations by enforcing reads-kill? monitor_nop Should we treat all monitorenter/monitorexit bytecodes as nops? static_stats Should we dump out compile-time statistics for basic blocks? code_patch_nop Should all patch point be (unsafely) eliminated (at initial HIR)? instrumentation_sampling Perform code transformation to sample instrumentation code. no_duplication When performing inst. sampling, should it be done without duplicating code? processor_specific_counter Should there be one CBS counter per processor for SMP performance? remove_yp_from_checking Should yieldpoints be removed from the checking code (requires finite sample interval). Value options. Option Description ic_max_target_size Static inlining heuristic: Upper bound on callee size ic_max_inline_depth Static inlining heuristic: Upper bound on depth of inlining ic_max_always_inline_target_size Static inlining heuristic: Always inline callees of this size or smaller ic_massive_method_size Static inlining heuristic: If root method is already this big, then only inline trivial methods ai_max_target_size Adaptive inlining heuristic: Upper bound on callee size ai_min_callsite_fraction Adaptive inlining heuristc: Minimum fraction of callsite distribution for guarded inlining of a callee edge_count_input_file Input file of edge counter profile data inling_guard Selection of guard mechanism for inlined virtual calls that cannot be statically bound fp_mode Selection of strictness level for floating point computations exclude Exclude methods from being opt compiled unroll_log Unroll loops. Duplicates the loop body 2^n times. cond_move_cutoff How many extra instructions will we insert in order to remove a conditional branch? load_elimination_rounds How many rounds of redundant load elimination will we attempt? alloc_advice_sites Read allocation advice attributes for all classes from this file frequency_strategy How to compute block and edge frequencies? spill_cost_estimate Selection of spilling heuristic infrequent_threshold Cumulative threshold which defines the set of infrequent basic blocks cbs_hotness Threshold at which a conditional branch is considered to be skewed ir_print_level Only print IR compiled above this level Adaptive System Non-Standard Command-Line Options Boolean options Option Description enable_recompilation  Should the adaptive system recompile hot methods? enable_advice_generation Do we need to generate advice file? enable_precompile Should the adaptive system precompile all methods given in the advice file before the user thread is started? enable_replay_compile Should the adaptive system use the pseudo-adaptive system that solely relies on the advice file? gather_profile_data Should profile data be gathered and reported at the end of the run? adaptive_inling Should we use adaptive feedback-directed inlining? early_exit Should AOS exit when the controller clock reaches early_exit_value? osr_promotion Should AOS promote baseline-compiled methods to opt? background_recompilation Should recompilation be done on a background thread or on next invocation? insert_yieldpoint_counters Insert instrumentation in opt recompiled code to count yieldpoints executed? insert_method_counters_opt Insert intrusive method counters in opt recompiled code? insert_instruction_counters Insert counters on all instructions in opt recompiled code? insert_debugging_counters Enable easy insertion of (debugging) counters in opt recompiled code. report_interrupt_stats Report stats related to timer interrupts and AOS listeners on exit. disable_recompile_all_methods Disable the ability for an app to request all methods to be recompiled. Value options Option Description method_sample_size How many timer ticks of method samples to take before reporting method hotness to controller. initial_compiler Selection of initial compiler. recompilation_strategy Selection of mechanism for identifying methods for optimizing recompilation. method_listener_trigger What triggers us to take a method sample? call_graph_listener_trigger What triggers us to take a method sample? logfile_name  Name of log file. compilation_advice_file_output Name of advice file. dynamic_call_file_output Name of dynamic call graph file. compiler_dna_file Name of compiler DNA file (no name ==> use default DNA).  Discussed in a comment at the head of VM_CompilerDNA.java. compiler_advice_file_input File containing information about the methods to Opt compile. dynamic_call_file_input File containing information about the hot call sites. logging_level Control amount of event logging (larger ==> more). final_report_level Control amount of info reported on exit (larger ==> more). decay_frequency After how many clock ticks should we decay. dcg_decay_rate What factor should we decay call graph edges hotness by. dcg_sample_size After how many timer interrupts do we update the weights in the dynamic call graph? ai_seed_multipiler   Initial edge weight of call graph is set to ai_seed_multipler * (1/ai_control_point). offline_inline_plan_name Name of offline inline plan to be read and used for inlining. early_exit_time Value of controller clock at which AOS should exit if early_exit is true. invocation_count_threshold Invocation count at which a baseline compiled method should be recompiled. invocation_count_opt_level Opt level for recompilation in invocation count based system. counter_based_sample_interval What is the sample interval for counter-based sampling. ai_hot_callsite_threshold What percentage of the total weight of the dcg demarcates warm/hot edges. max_opt_level The maximum optimization level to enable. Virtual Machine Non-Standard Command-Line Options Boolean Options Option Description measureCompilation Time all compilations and report on exit. measureCompilationPhases Time all compilation sub-phases and report on exit. stackTraceFull Stack traces to consist of VM and application frames. stackTraceAtExit Dump a stack trace (via VM.syswrite) upon exit. verboseTraceClassLoading More detailed tracing then -verbose:class. errorsFatal Exit when non-fatal errors are detected; used for regression testing.  Value options Option Description maxSystemTroubleRecursionDepth If we get deeper than this in one of the System Trouble functions, try to die. interruptQuantum Timer interrupt scheduling quantum in ms. schedulingMultiplier Scheduling quantum = interruptQuantum * schedulingMultiplier. traceThreadScheduling Trace actions taken by thread scheduling. verboseStackTracePeriod Trace every nth time a stack trace is created. edgeCounterFile Input file of edge counter profile data. CBSCallSamplesPerTick How many CBS call samples (Prologue/Epilogue) should we take per time tick. CBSCallSampleStride Stride between each CBS call sample (Prologue/Epilogue) within a sampling window. CBSMethodSamplesPerTick How many CBS method samples (any yieldpoint) should we take per time tick. CBSMethodSampleStride Stride between each CBS method sample (any yieldpoint) within a sampling window. Running Jikes RVM with valgrind  Jikes RVM can run under valgrind, as of SVN revision 6791 (29-Aug-2007).  Applying a patch of this revision to release 3.2.1 should also produce a working system.  Versions of valgrind CVS prior to release 3.0 are also known to have worked. To run a Jikes RVM build with valgrind, use the -wrap flag to invoke valgrind, eg rvm -wrap "path/to/valgrind --smc-check=all <valgrind-options>" <jikesrvm-options> ... this will insert the invocation of valgrind at the appropriate place for it to operate on Jikes RVM proper rather than a wrapper script.  Under some circumstances, valgrind will load shared object libraries or allocate memory in areas of the heap that conflict with Jikes RVM.  Using the flag -X:gc:eagerMmapSpaces=true will prevent and/or detect this.  If this flag reveals errors while mapping the spaces, you will need to rearrange the heap to avoid the addresses that valgrind is occupying. View Online Changes between revision 20 and revision 21:  Jikes[™|Trademarks] RVM executes Java virtual machine byte code instructions from {{.class}} files. It does _not_ compile Java[™|Trademarks] source code. Therefore, you must compile all Java source files into bytecode using your favorite Java compiler.     For example, to run class {{foo}} with source code in file {{foo.java}}:  {noformat}  % javac foo.java  % rvm foo  {noformat}  The general syntax is  {noformat}  rvm [rvm options...] class [args...]  {noformat}  You may choose from a myriad of options for the {{rvm}} command-line. Options fall into two categories: _standard_ and _non-standard_. Non-standard options are preceded by "{{*\-X:*}}".     h3. Standard Command-Line Options     We currently support a subset of the JDK 1.5 standard options. Below is a list of all options and their descriptions. Unless otherwise noted each option is supported in Jikes RVM.  || Option || Description ||  | \{-cp or \-classpath\} <directories and zip/jar files separated by ":"> | set search path for application classes and resources |  | \-D<name>=<value> | set a system property |  | \-verbose:\[ class \| gc \| jni \] | enable verbose output |  | \-version | print current VM version and terminate the run |  | \-showversion | print current VM version and continue running |  | \-fullversion | like "-version", but with more information |  | \-? or \-help | print help message |  | \-X | print help on non-standard options |  | \-jar | execute a jar file |  | \-javaagent:<jarpath>\[=<options>\] | load Java programming language agent, see java.lang.instrument |     h3. Non-Standard Command-Line Options     The non standard command-line options are grouped according to the subsystem that they control. The following sections list the available options in each group.     h4. Core Non-Standard Command-Line Options     || Option || Description ||  | \-X:verbose | Print out additional lowlevel information for GC and hardware trap handling |  | \-X:verboseBoot=<number> | Print out additional information while VM is booting, using verbosity level <number> |  | \-X:sysLogfile=<filename> | Write standard error message to <filename> |  | \-X:ic=<filename> | Read boot image code from <filename> |  | \-X:id=<filename> | Read boot image data from <filename> |  | \-X:ir=<filename> | Read boot image ref map from <filename> |  | \-X:vmClasses=<path> | Load the com.ibm.jikesrvm.\* and java.\* classes from <path> |  | \-X:cpuAffinity=<number> | The physical CPU to which first virtual processor is bound |  | \-X:processors=<number\|"all"> | The number of virtual processors |     h4. Memory Non-Standard Command-Line Options     || Option || Description ||  | \-Xms<number><unit> | Initial size of heap where <number> is an integer, an extended-precision floating point or a hexadecimal value and <unit> is one of T (Terabytes), G (Gigabytes), M (Megabytes), pages (of size 4096), K (Kilobytes) or <no unit> for bytes |  | \-Xmx<number><unit> | Maximum size of heap. See above for definition of <number> and <unit> |     h4. Garbage Collector Non-Standard Command-Line Options     These options are all prefixed by {{\-X:gc:}}.     Boolean options.  || Option || Description ||  | protectOnRelease | Should memory be protected on release? |  | echoOptions | Echo when options are set? |  | printPhaseStats | When printing statistics, should statistics for each gc-mutator phase be printed? |  | xmlStats | Print end-of-run statistics in XML format |  | eagerCompleteSweep | Should we eagerly finish sweeping at the start of a collection |  | fragmentationStats | Should we print fragmentation statistics for the free list allocator? |  | verboseFragmentationStats | Should we print verbose fragmentation statistics for the free list allocator? |  | verboseTiming | Should we display detailed breakdown of where GC time is spent? |  | noFinalizer | Should finalization be disabled? |  | noReferenceTypes | Should reference type processing be disabled? |  | fullHeapSystemGC | Should a major GC be performed when a system GC is triggered? |  | ignoreSystemGC | Should we ignore calls to java.lang.System.gc? |  | variableSizeHeap | Should we shrink/grow the heap to adjust to application working set? |  | eagerMmapSpaces | If true, all spaces are eagerly demand zero mmapped at boot time |  | sanityCheck | Perform sanity checks before and after each collection? |  Value options.  || Option || Type || Description ||  | markSweepMarkBits | int | Number of bits to use for the header cycle of mark sweep spaces |  | verbose | int | GC verbosity level |  | stressFactor | bytes | Force a collection after this much allocation |  | metaDataLimit | bytes | Trigger a GC if the meta data volume grows to this limit |  | boundedNursery | bytes | Bound the maximum size of the nursery to this value |  | fixedNursery | bytes | Fix the minimum and maximum size of the nursery to this value |  | debugAddress | address | Specify an address at runtime for use in debugging |     h4. Base Compiler Non-Standard Command-Line Options     Boolean options  || Option || Description ||  | edge_counters | Insert edge counters on all bytecode-level conditional branches |  | invocation_counters | Select methods for optimized recompilation by using invocation counters |     h4. Opt Compiler Non-Standard Command-Line Options     Boolean options.  || Option || Description ||  | local_constant_prop | Perform local constant propagation |  | local_copy_prop | Perform local copy propagation |  | local_cse | Perform local common subexpression elimination |  | global_bounds_check | Perform global Array Bound Check elimination on Demand |  | monitor_removal | Try to remove unnecessary monitor operations |  | invokee_thread_local | Compile the method assuming the invokee is thread-local |  | no_callee_exceptions | Assert that any callee of this compiled method will not throw exceptions? |  | simple_escape_ipa | Eagerly compute method summaries for simple escape analysis |  | field_analysis | Eagerly compute method summaries for flow-insensitive field analysis |  | scalar_replace_aggregates | Perform scalar replacement of aggregates |  | reorder_code | Reorder basic blocks for improved locality and branch prediction |  | reorder_code_ph | Reorder basic blocks using Pettis and Hansen Algo2 |  | inline_new | Inline allocation of scalars and arrays |  | inline_write_barrier | Inline write barriers for generational collectors |  | inline | Inline statically resolvable calls |  | guarded_inline | Guarded inlining of non-final virtual calls |  | guarded_inline_interface | Speculatively inline non-final interface calls |  | static_splitting | CFG splitting to create hot traces based on static heuristics |  | redundant_branch_elimination | Eliminate redundant conditional branches |  | preex_inline | Pre-existence based inlining |  | ssa | Should SSA form be constructed on the HIR? |  | load_elimination | Should we perform redundant load elimination during SSA pass? |  | coalesce_after_ssa | Should we coalesce move instructions after leaving SSA? |  | expression_folding | Should we try to fold expressions with constants in SSA form? |  | live_range_splitting | Split live ranges using LIR SSA pass? |  | gcp | Perform global code placement |  | gcse | Perform global code placement |  | verbose_gcp | Perform noisy global code placement |  | licm_ignore_pei | Assume PEIs do not throw or state is not observable |  | turn_whiles_into_until | Turn whiles into untils |  | loop_versioning | Loop versioning |  | handler_liveness | Store liveness for handlers to improve dependence graph at PEIs |  | schedule_prepass | Perform prepass instruction scheduling |  | no_checkcast | Should all checkcast operations be (unsafely) eliminated? |  | no_checkstore | Should all checkstore operations be (unsafely) eliminated? |  | no_bounds_check | Should all bounds check operations be (unsafely) eliminated? |  | no_null_check | Should all null check operations be (unsafely) eliminated? |  | no_synchro | Should all synchronization operations be (unsafely) eliminated? |  | no_threads | Should all yield points be (unsafely) eliminated? |  | no_cache_flush | Should cache flush instructions (PowerPC SYNC/ISYNC) be omitted? NOTE: Cannot be correctly changed via the command line\! |  | reads_kill | Should we constrain optimizations by enforcing reads-kill? |  | monitor_nop | Should we treat all monitorenter/monitorexit bytecodes as nops? |  | static_stats | Should we dump out compile-time statistics for basic blocks? |  | code_patch_nop | Should all patch point be (unsafely) eliminated (at initial HIR)? |  | instrumentation_sampling | Perform code transformation to sample instrumentation code. |  | no_duplication | When performing inst. sampling, should it be done without duplicating code? |  | processor_specific_counter | Should there be one CBS counter per processor for SMP performance? |  | remove_yp_from_checking | Should yieldpoints be removed from the checking code (requires finite sample interval). |  Value options.  || Option || Description ||  | ic_max_target_size | Static inlining heuristic: Upper bound on callee size |  | ic_max_inline_depth | Static inlining heuristic: Upper bound on depth of inlining |  | ic_max_always_inline_target_size | Static inlining heuristic: Always inline callees of this size or smaller |  | ic_massive_method_size | Static inlining heuristic: If root method is already this big, then only inline trivial methods |  | ai_max_target_size | Adaptive inlining heuristic: Upper bound on callee size |  | ai_min_callsite_fraction | Adaptive inlining heuristc: Minimum fraction of callsite distribution for guarded inlining of a callee |  | edge_count_input_file | Input file of edge counter profile data |  | inling_guard | Selection of guard mechanism for inlined virtual calls that cannot be statically bound |  | fp_mode | Selection of strictness level for floating point computations |  | exclude | Exclude methods from being opt compiled |  | unroll_log \\ | Unroll loops. Duplicates the loop body 2^n times. |  | cond_move_cutoff | How many extra instructions will we insert in order to remove a conditional branch? |  | load_elimination_rounds | How many rounds of redundant load elimination will we attempt? |  | alloc_advice_sites | Read allocation advice attributes for all classes from this file |  | frequency_strategy | How to compute block and edge frequencies? |  | spill_cost_estimate | Selection of spilling heuristic |  | infrequent_threshold | Cumulative threshold which defines the set of infrequent basic blocks \\ |  | cbs_hotness | Threshold at which a conditional branch is considered to be skewed |  | ir_print_level \\ | Only print IR compiled above this level |     h4. Adaptive System Non-Standard Command-Line Options     Boolean options  || Option || Description ||  | enable_recompilation&nbsp; \\ | Should the adaptive system recompile hot methods? |  | enable_advice_generation | Do we need to generate advice file? |  | enable_precompile | Should the adaptive system precompile all methods given in the advice file before the user thread is started? |  | enable_replay_compile | Should the adaptive system use the pseudo-adaptive system that solely relies on the advice file? |  | gather_profile_data | Should profile data be gathered and reported at the end of the run? |  | adaptive_inling | Should we use adaptive feedback-directed inlining? |  | early_exit | Should AOS exit when the controller clock reaches early_exit_value? |  | osr_promotion | Should AOS promote baseline-compiled methods to opt? |  | background_recompilation | Should recompilation be done on a background thread or on next invocation? |  | insert_yieldpoint_counters | Insert instrumentation in opt recompiled code to count yieldpoints executed? |  | insert_method_counters_opt | Insert intrusive method counters in opt recompiled code? |  | insert_instruction_counters | Insert counters on all instructions in opt recompiled code? |  | insert_debugging_counters | Enable easy insertion of (debugging) counters in opt recompiled code. |  | report_interrupt_stats \\ | Report stats related to timer interrupts and AOS listeners on exit. |  | disable_recompile_all_methods \\ | Disable the ability for an app to request all methods to be recompiled. |  Value options  || Option || Description ||  | method_sample_size \\ | How many timer ticks of method samples to take before reporting method hotness to controller. |  | initial_compiler \\ | Selection of initial compiler. |  | recompilation_strategy | Selection of mechanism for identifying methods for optimizing recompilation. |  | method_listener_trigger | What triggers us to take a method sample? \\ |  | call_graph_listener_trigger | What triggers us to take a method sample? |  | logfile_name&nbsp; \\ | Name of log file. |  | compilation_advice_file_output \\ | Name of advice file.\\ |   | compilation_advice_file_output \\ | Name of advice file. \\ |  | dynamic_call_file_output | Name of dynamic call graph file. |  | compiler_dna_file | Name of compiler DNA file (no name ==> use default DNA).&nbsp; Discussed in a comment at the head of VM_CompilerDNA.java. |  | compiler_advice_file_input | File containing information about the methods to Opt compile. |  | dynamic_call_file_input | File containing information about the hot call sites. |  | logging_level | Control amount of event logging (larger ==> more). |  | final_report_level | Control amount of info reported on exit (larger ==> more). |  | decay_frequency | After how many clock ticks should we decay. |  | dcg_decay_rate | What factor should we decay call graph edges hotness by. |  | dcg_sample_size | After how many timer interrupts do we update the weights in the dynamic call graph? |  | ai_seed_multipiler &nbsp; \\ | Initial edge weight of call graph is set to ai_seed_multipler * (1/ai_control_point). |  | offline_inline_plan_name | Name of offline inline plan to be read and used for inlining. |  | early_exit_time | Value of controller clock at which AOS should exit if early_exit is true. |  | invocation_count_threshold | Invocation count at which a baseline compiled method should be recompiled. |  | invocation_count_opt_level | Opt level for recompilation in invocation count based system. |  | counter_based_sample_interval | What is the sample interval for counter-based sampling. |  | ai_hot_callsite_threshold \\ | What percentage of the total weight of the dcg demarcates warm/hot edges. |  | max_opt_level | The maximum optimization level to enable. \\ |     h4. Virtual Machine Non-Standard Command-Line Options     Boolean Options  || Option || Description \\ ||  | measureCompilation\\ | Time all compilations and report on exit. |  | measureCompilationPhases \\ | Time all compilation sub-phases and report on exit. \\ |  | stackTraceFull \\ | Stack traces to consist of VM and application frames. \\ |  | stackTraceAtExit | Dump a stack trace (via VM.syswrite) upon exit. |  | verboseTraceClassLoading | More detailed tracing then \-verbose:class. |  | errorsFatal | Exit when non-fatal errors are detected; used for regression testing. |  &nbsp;Value options  || Option || Description ||  | maxSystemTroubleRecursionDepth\\ | If we get deeper than this in one of the System Trouble functions, try to die. |  | interruptQuantum | Timer interrupt scheduling quantum in ms. |  | schedulingMultiplier \\ | Scheduling quantum = interruptQuantum * schedulingMultiplier. |  | traceThreadScheduling \\ | Trace actions taken by thread scheduling. |  | verboseStackTracePeriod | Trace every nth time a stack trace is created.\\ |  | edgeCounterFile \\ | Input file of edge counter profile data. \\ |  | CBSCallSamplesPerTick \\ | How many CBS call samples (Prologue/Epilogue) should we take per time tick. |  | CBSCallSampleStride | Stride between each CBS call sample (Prologue/Epilogue) within a sampling window. \\ |  | CBSMethodSamplesPerTick | How many CBS method samples (any yieldpoint) should we take per time tick. \\ |  | CBSMethodSampleStride \\ | Stride between each CBS method sample (any yieldpoint) within a sampling window. |  \\     h2. Running Jikes RVM with valgrind     &nbsp;Jikes RVM can run under valgrind, as of SVN revision 6791 (29-Aug-2007).&nbsp; Applying a patch of this revision to release 3.2.1 should also produce a working system.&nbsp; Versions of valgrind CVS prior to release 3.0 are also known to have worked.     To run a Jikes RVM build with valgrind, use the {{\-wrap}} flag to invoke valgrind, eg  {code}  rvm -wrap "path/to/valgrind --smc-check=all <valgrind-options>" <jikesrvm-options> ...  {code}  this will insert the invocation of valgrind at the appropriate place for it to operate on Jikes RVM proper rather than a wrapper script.&nbsp;     Under some circumstances, valgrind will load shared object libraries or allocate memory in areas of the heap that conflict with Jikes RVM.&nbsp; Using the flag \-X:gc:eagerMmapSpaces=true will prevent and/or detect this.&nbsp; If this flag reveals errors while mapping the spaces, you will need to rearrange the heap to avoid the addresses that valgrind is occupying. View All Revisions | Revert To Version 20 [Less]
Posted over 17 years ago by Ian Rogers
Page edited by Ian Rogers Below is a list of all publications that use Jikes RVM. This list includes both papers written by Jikes RVM developers, as well as users of the ... [More] system. We strongly encourage authors to utilize the Research Archive to publish source code used in their studies, and thus, allow others to build on their results. When the implementation described in a paper is available in a Jikes RVM release, this is noted with the paper. Information of dissertations relating to the Jikes RVM is available here. If you would like to see a paper listed then please send details to the RVM researchers mailing list. 2008 Constraint Based Optimization of Stationary Fields Ian Rogers, Jisheng Zhao, Chris Kirkham, Ian Watson Principles and Practice of Programming in Java (PPPJ '08), Modena, Italy, 9-11 September 2008. Boot Image Layout for Jikes RVM Ian Rogers, Jisheng Zhao and Ian Watson Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS), Cyprus, 7 July 2008. Presentation, tracker and source code Pure Method Analysis within Jikes RVM Jisheng Zhao, Ian Rogers, Chris Kirkham and Ian Watson Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS), Cyprus, 7 July 2008. Presentation, tracker and source code Approaches to Reflective Method Invocation Ian Rogers, Jisheng Zhao and Ian Watson Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS), Cyprus, 7 July 2008. Presentation, tracker and source code Speculative Multithreading: An Object-Driven Approach Simon Wilkinson, Ian Watson Parallel Execution of Sequential Programs on Multi-core Architectures (PESPMA), Beijing, China, 22 June 2008. No Bit Left Behind: The Limits of Heap Data Compression J.B. Sartor, M. Hirzel, and K.S. McKinley The 2008 International Symposium on Memory Management. Tucson, AZ, June 2008. Immix: A Mark-Region Garbage Collector with Space Efficiency, Fast Collection, and Mutator Performance Stephen Blackburn and Kathryn McKinley ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2008), Tucson, AZ, June 7-13, 2008 Patch against r13767 here.  Code being integrated into svn head April-May 2008.  Adaptive Loop Tiling for a Multi-Cluster CMP Jisheng Zhao, Matthew Horsnell, Mikel Lujan, Ian Rogers, Chris Kirkham and Ian Watson International Conference on Algorithms and Architectures, Cyprus, 9-11 June 2008. A Study of Java Object Demographics Richard Jones and Chris Ryder International Symposium on Memory Management, Tucson, AZ, June 7-8, 2008 Phase-based Adaptive Recompilation in a JVM Dayong Gu and Clark Verbrugge 2008 International Symposium on Code Generation and Optimization (CGO), Boston, Massachusetts, 6-9 April. Branch-on-Random Edward Lee and Craig Zilles 2008 International Symposium on Code Generation and Optimization (CGO), Boston, Massachusetts, 6-9 April. GC Assertions: Using the Garbage Collector to Check Heap Properties Edward Aftandilian and Samuel Guyer ACM SIGPLAN Workshop on Memory Systems Performance and Correctness, Seattle, Washington, USA, 2 March, 2008 Dynamic Analysis of Java Program Concepts for Visualization and Profiling Jeremy Singer and Chris Kirkham Science of Computer Programming, vol. 70, no.2-3, pp.111-126, Elsevier, Feb 2008. Object Co-location and Memory Reuse for Java Programs Zoe C. H. Yu, Francis C. M. Lau, and Cho-Li Wang ACM Transactions on Architecture and Code Optimization, Vol. 4, No. 4, Article 23, January 2008. 2007 Effective Prefetch for Mark-Sweep Garbage Collection Robin Garner, Stephen Blackburn, & Daniel Frampton ACM SIGPLAN International Symposium on Memory Management (ISMM), Montreal, October 2007 Patch against Jikes RVM r10327 available here. Decrypting the Java Gene Pool: Predicting Object Lifetimes with Micro-Patterns Sebastien Marion, Richard Jones, & Chris Ryder ACM SIGPLAN International Symposium on Memory Management (ISMM), Montreal, October 2007 Uniqueness Inference for Compile-Time Object Deallocation Sigmund Cherem & Radu Rugina ACM SIGPLAN International Symposium on Memory Management (ISMM), Montreal, October 2007 Statistically Rigorous Java Performance Evaluation Andy Georges, Dries Buytaert, Lieven Eeckhout ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Montreal, October 2007 Using HPM-Sampling to Drive Dynamic Compilation Dries Buytaert, Andy Georges, Michael Hind, Matthew Arnold, Lieven Eeckhout, Koen De Bosschere ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Montreal, October 2007 Intelligent Selection of Application-Specific Garbage Collectors Jeremy Singer, Gavin Brown, Ian Watson, John Cavazos ACM SIGPLAN International Symposium on Memory Management (ISMM), Montreal, October 2007 Probabilistic Calling Context Michael D. Bond, Kathryn S. McKinley. ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Montreal, October 2007 Source code available on the Research Archive. Tracking Bad Apples: Reporting the Origin of Null and Undefined Value Errors Michael D. Bond, Nicholas Nethercote, Stephen W. Kent, Samuel Z. Guyer, Kathryn S. McKinley. ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Montreal, October 2007 Source code available on the Research Archive. Java Object Header Elimination for Reduced Memory Consumption in 64-Bit Virtual Machines Kris Venstermans, Lieven Eeckhout, and Koen De Bosschere. ACM Transactions on Code Optimizations (TACO), Vol 4, No. 3, Article 17, September 2007 Optimizing Chip Multiprocessor Work Distribution using Dynamic Compilation Jisheng Zhao, Matthew Horsnell, Ian Rogers, Andrew Dinn, Chris Kirkham, Ian Watson. Proceedings of  Euro-Par, IRISA/ENS Cachan, Rennes, France, 28-31 August 2007 Object-Relative Addressing: Compressed Pointers in 64-Bit Java Virtual Machines Kris Venstermans, Lieven Eeckhout, and Koen De Bosschere. Proceedings of 21st European Conference on Object-Oriented Programming (ECOOP '07), July 30 - August 3, 2007 Correcting the Dynamic Call Graph Using Control Flow Constraints Byeongcheol Lee, Kevin Resnick, Michael D. Bond, Kathryn S. McKinley Proceedings of the 16th International Conference on Compiler Construction (CC 2007), Braga, Portugal, March 2007 Isla Vista Heap Sizing: Using Feedback to Avoid Paging Chris Grzegorczyk, Sunil Soman, Chandra Krintz, Rich Wolski Proceedings of the 5th International Symposium on Code Generation and Optimization (CGO 2007), San Jose, California, March 2007 A Scalable, Non-blocking Approach to Transactional Memory H. Chafi, J. Casper, B. Carlstrom, A. McDonald, C. Cao Minh, W. Baek, C. Kozyrakis, and K. Olukotun (Stanford University) The 13th International Symposium on High-Performance Computer Architecture (HPCA), Phoenix, Arizona, February 10-14, 2007. Mobility of Data in Distributed Hybrid Computing Systems Philippe Faes, Mark Christiaens and Dirk Stroobandt Proceedings of the 21st International Parallel and Distributed Processing Symposium, 2007 Cork: Dynamic Memory Leak Detection for Java Maria Jump, Kathryn S. McKinley Proceedings of the 2007 Principles of Programming Languages, Nice, France, January 2007 2006 Lazy Interprocedural Analysis for Dynamic Loop Parallelization Jisheng Zhao, Chris Kirkham, Ian Rogers New Horizons in Compilers, Bangalore, India, December 18, 2006. CRAMM: Virtual Memory Support for Garbage-Collected Applications Ting Yang and Emery D. Berger and Scott F. Kaplan and J. Eliot B. Moss Proceedings of the 7th USENIX Symposium on Operating Systems Design and Implementation (OSDI), Seattle, Washington, November, 2006. Revocation techniques for Java concurrency Welc A, Jagannathan S and Hosking AL. Concurrency and Computation - Practice and Experience 18(2):1613-1656, October 2006. JAVANA: A System for Building Customized Java Program Analysis Tools Jonas Maebe, Dries Buytaert, Lieven Eeckhout, Koen De Bosschere ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Portland, Oregon, October 22-26, 2006. The DaCapo Benchmarks: Java Benchmarking Development and Analysis Stephen M Blackburn, Robin Garner, Chris Hoffmann, Asjad M Khan, Kathryn S. McKinley, Rotem Bentzur, Amer Diwan, Daniel Feinberg, Daniel Frampton, Samuel Z. Guyer, Martin Hirzel, Antony Hosking, Maria Jump, Han Lee, J. Eliot B. Moss, Aashish Phansalkar, Darko Stefanovic, Thomas VanDrunen, Daniel von Dincklage, Benjamin Wiedermann ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Portland, Oregon, October 22-26, 2006. Method-Specific Dynamic Compilation using Logistic Regression John Cavazos, Michael O'Boyle ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Portland, Oregon, October 22-26, 2006. Adapting VM Techniques for Seamless Aspect Support Christoph Bockisch, Matthew Arnold, Tom Dinkelaker, Mira Mezini ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Portland, Oregon, October 22-26, 2006. Efficient Control Flow Quantification Christoph Bockisch, Sebastian Kanthak, Michael Haupt, Matthew Arnold, Mira Mezini, ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Portland, Oregon, October 22-26, 2006. Bell: Bit-Encoding Online Memory Leak Detection Michael D. Bond, Kathryn S. McKinley. Proceedings of the 12th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS-XII), San Jose, October 21-25, 2006. Source code available on the Research Archive. Trace-based automatic parallelization in the Jikes RVM Borys Bradel and Tarek S. Abdelrahman ''Proceedings of the 5th Workshop on Compiler-Driven Performance,'' Toronto, Canada, Oct 16, 2006. Enabling Java Mobile Computing on the IBM Jikes Research Virtual Machine Giacomo Cabri, Letizia Leonardi, '''Raffaele Quitadamo'''. ''Proceedings of the 4th International Conference on the Principles and Practice of Programming in Java 2006 (PPPJ)'', Mannheim, Germany, August 2006, ACM Press. Transparently reconciling transactions with locking for Java synchronization Welc A, Hosking AL, Jagannathan S. Proceedings of the 20th European Conference on Object-Oriented Programming (ECOOP):148-173 (Nantes, France, July 2006), Lecture Notes in Computer Science 4067, Springer-Verlag, 2006. Architectural Semantics for Practical Transactional Memory Austen McDonald, JaeWoong Chung, Brian D. Carlstrom, Chi Cao Minh, Hassan Chafi, Christos Kozyrakis, and Kunle Olukotun. ''Proceedings of the 33rd Annual International Symposium on Computer Architecture'', Boston, Massachusetts, June 17-21, 2006. Relative Factors in Performance Analysis of JVMs Dayong Gu, Clark Verbrugge, and Etienne M. Gagnon ''Proceedings of the 2nd Annual International Conference on Virtual Execution Environments'', Ottawa, Canada, June 14-16, 2006. Impact of Virtual Execution Environments on Processor Energy Consumption and Hardware Adaptation Shiwen Hu and Lizy K. John ''Proceedings of the 2nd Annual International Conference on Virtual Execution Environments'', Ottawa, Canada, June 14-16, 2006. Free-Me: A Static Analysis for Automatic Individual Object Reclamation Samuel Z. Guyer, Kathryn S. McKinley, and Daniel Frampton. ''Proceedings of the ACM SIGPLAN 2006 Conference on Programming Language Design and Implementation'', Ottawa, Canada, June 10-16, 2006. The Compressor: Concurrent, Incremental, and Parallel Compaction Haim Kermany, Erez Petrank. ''Proceedings of the ACM SIGPLAN 2006 Conference on Programming Language Design and Implementation'', Ottawa, Canada, June 10-16, 2006. The Atomos Transactional Programming Language Brian D. Carlstrom, Austen McDonald, Hassan Chafi, JaeWoong Chung, Chi Cao Minh, Christos Kozyrakis, and Kunle Olukotun. ''Proceedings of the ACM SIGPLAN 2006 Conference on Programming Language Design and Implementation'', Ottawa, Canada, June 10-16, 2006. Parallelizing SPECjbb2000 with Transactional Memory JaeWoong Chung, Chi Cao Minh, Brian D. Carlstrom, and Christos Kozyrakis. ''Workshop on Transactional Memory Workloads'', Ottawa, Canada, June 10, 2006. Reducing generational copy reserve overhead with fallback compaction McGachey P, Hosking AL. Proceedings of the 4th ACM SIGPLAN International Symposium on Memory Management (ISMM):17-28 (Ottawa, Canada, June 2006), ACM. Hybrid Optimizations: Which Optimization Algorithm to Use? John Cavazos, J. Eliot B. Moss, and Michael F.P. O'Boyle ''15th International Conference on Compiler Construction (CC 2006)'', Vienna, Austria, March 30 - 31, 2006. Space-Efficient 64-bit Java Objects through Selective Typed Virtual Addressing Kris Venstermans, Lieven Eeckhout, and Koen De Bosschere. ''The 4th Annual International Symposium on Code Generation and Optimization (CGO)'', New York. March 26-29, 2006. Dynamic Class Hierarchy Mutation Lixin Su and Mikko H Lipasti. ''The 4th Annual International Symposium on Code Generation and Optimization (CGO)'', New York. March 26-29, 2006. Online Phase Detection Algorithms Priya Nagpurkar, Michael Hind, Chandra Krintz, Peter F. Sweeney, and V.T. Rajan. ''The 4th Annual International Symposium on Code Generation and Optimization (CGO)'', New York. March 26-29, 2006. The Common Case Transactional Behavior of Multithreaded Programs JaeWoong Chung, Chi Cao Minh, Hassan Chafi, Austen McDonald, Brian D. Carlstrom, Christos Kozyrakis, and Kunle Olukotun. ''12th International Symposium on High Performance Computer Architecture (HPCA)'', Austin, Texas, USA, February 11-15, 2006. 64-bit versus 32-bit Virtual Machines for Java Kris Venstermans, Lieven Eeckhout, and Koen De Bosschere ''Software: Practice and Experience'', January 2006. Compiler Techniques for High Performance Sequentially Consistant Java Programs. Zehra Sura, Xing Fang, Chi-Leung Wong, [ Samuel P. Midkiff|http://www.research.ibm.com/people/m/midkiff], Jaejin Lee, David Padua. ''11th International Workshop on Compilers for Parallel Computers (CPC 2006)'', A Coruna, Spain. January 2006. Automatic Tuning of Inlining Heuristics John Cavazos and Michael F.P. O'Boyle ''11th International Workshop on Compilers for Parallel Computers (CPC 2006)'', A Coruna, Spain. January 2006. 2005 Loop Parallelisation for the Jikes RVM Jisheng Zhao, Ian Rogers, Chris Kirkham, and Ian Watson. ''6th Parallel and Distributed Computing, Applications and Technologies (PDCAT)'', Dalian, China, December 5-8, 2005. Continuous Path and Edge Profiling Michael D. Bond and Kathryn S. McKinley. 38th International Symposium on Microarchitecture (MICRO), Barcelona, November 14-16, 2005. Source code available on the Research Archive. Garbage Collection Hints Dries Buytaert, Kris Venstermans, Lieven Eeckhout, and Koen De Bosschere. ''International Conference on High Performance Embedded Architectures & Compilers (HIPEAC'05)'', Lecture Notes in Computer Science Volume 3793, Springer-Verlag. Barcelona, Spain, November 2005. Towards Continuous Usage Control on Grid Computational Services. Fabio Martinelli, Paolo Mori, and Anna Vaccarelli ''International Conference on Autonomic and Autonomous Systems and International Conference on Networking and Services'', Papeete, Tahiti, October 23-28, 2005. A Platform to Use Hardware Performance Counters for Dynamic Compilation Florian Schneider and Thomas Gross. ''Languages and Compilers for Parallel Computing (LCPC)'', IBM, Hawthorne, New York, October 20-21, 2005.'' Are Patches Cutting it? Structuring Distribution within a JVM using Aspects Jennifer Baldwin, Yvonne Coady ''2005 conference of the Centre for Advanced Studies on Collaborative research (CASCON)'', Toronto, Canada, Oct 17-20, 2005. Automating Vertical Profiling Matthias Hauswirth, Amer Diwan, Peter F. Sweeney, and Michael Mozer. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005. Improving Virtual Machine Performance Using a Cross-Run Repository Matthew Arnold, Adam Welc, and V.T. Rajan. *''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005. Quantifying the Performance of Garbage Collection vs. Explicit Memory Management Matthew Hertz and Emery Berger. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005. Quantifying the Performance of Garbage Collection vs.Explicit Memory Management Matthew Hertz and Emery Berger. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005. Runtime Specialization With Optimistic Heap Analysis Ajeet Shanker, Rastislav Bodik, Subramanya Sastry, and James Smith. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005. Safe Futures for Java Adam Welc, Suresh Jagannathan, and Antony L. Hosking. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005. Transactional Execution of Java Programs Brian D. Carlstrom, JaeWoong Chung, Hassan Chafi, Austen McDonald, Chi Cao Minh, Lance Hammond, Christos Kozyrakis, and Kunle Olukotun. ''OOPSLA 2005 Workshop on Synchronization and Concurrency in Object-Oriented Languages (SCOOL)'', San Diego, California, USA, October 16, 2005. Automatic Tuning of Inlining Heuristics John Cavazos and Michael F.P. O'Boyle ''SC|05 (Supercomputing): International Conference for High Performance Computing, Networking, and Storage'', Seattle WA, November 12-18, 2005. Testing in Resource Constrained Execution Environments Gregory M. Kapfhammer, Mary Lou Soffa, and Daniel Mosse ''ACM/IEEE International Conference on Automated Software Engineering'', LongBeach, CA, November 7-11, 2005. JikesNode and PearColator: A Jikes RVM Operating System and Legacy Code Execution Environment Ian Rogers and Chris Kirkham. ''The 2nd ECOOP Workshop on Programming Languages and Operating Systems (ECOOP-PLOS '05)'', Glasgow, UK, July 26, 2005. An Automatic Runtime DOALL Loop Parallelisation Optimization for Java Ian Rogers, Jisheng Zhao, Chris Kirkham, Ian Watson. ''Parallel/High-Performance Object-Oriented Scientific Computing (POOSC '05)'', Glasgow, UK, July 25, 2005. Characterization of TCC on Chip-Multiprocessors Austen McDonald, JaeWoong Chung, Hassan Chafi, Chi Cao Minh, Brian D. Carlstrom, Lance Hammond, Christos Kozyrakis, and Kunle Olukotun. *''The Fourteenth International Conference on Parallel Architectures and Compilation Techniques (PACT '05)'', Saint Louis, Missouri, September 19, 2005. FPGA-Aware Garbage Collection in Java Faes, Ph.; Christiaens, M.; Buytaert, D. ; Stroobandt, D. ''IEEE 2005 International Conference on Field Programmable Logic and Applications (FPL).'', August 2005. Garbage Collection Without Paging Matthew Hertz, Yi Feng, and Emery Berger. ''ACM SIGPLAN Conference on Programming Languages Design and and Implementation (PLDI '05)'', Chicago, Il, June 13, 2005 An Execution Layer for Aspect-Oriented Programming Languages Michael Haupt, Mira Mezini, Christoph Bockisch, Tom Dinelaker, Michael Eichberg, and Michael Krebs ''ACM SIGPLAN/USENIX Conference on Virtual Execution Environments (VEE '05)'', Chicago, Il, June 11-12, 2005 Immutability Specification and its Application Igor Pechtchanski and Vivek Sarkar. ''Concurrency and Computation: Practice and Experience'', Vol 17, No 5-6, April/May 2005. Age-Oriented Concurrent Garbage Collection Harel Paz, Erez Petrank, and Steve Blackburn. ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Edinburgh, UK, April 2005. An Efficient On-The-Fly Cycle Collection Harel Paz, Erez Petrank, David F. Bacon, Eliot K. Kolodner, and V.T. Rajan. ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Edinburgh, UK, April 2005. Jazz: A Tool for Demand-Driven Structural Testing Jonathan Misurda, Jim Clause, Juliya Reed, Bruce R. Childers, and Mary Lou Soffa. ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Edinburgh, UK, April 2005. A Study of Type Analysis for Speculative Method Inlining in a JIT Environment Feng Qian and Laurie Hendren. ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Edinburgh, UK, April 2005. Using Interprocedural Side-effect Information in JIT Optimizations Anatole Le, Ondrej Lhotak, and Laurie Hendren. ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Edinburgh, UK, April 2005. Effective Adaptive Computing Environment Management via Dynamic Optimization Shiwen Hu, Madhavi Valluri, Lizy K. John ''2005 International Symposium on Code Generation and Optimization'', San Jose, California, March 2005. Collecting and Exploiting High-Accuracy Call Graph Profiles in Virtual Machines Matthew Arnold and David Grove ''2005 International Symposium on Code Generation and Optimization'', San Jose, California, March 2005. '''(Source code available as of version 2.3.5 of Jikes RVM.)''' The Jikes Research Virtual Machine project: Building an open-source research community B. Alpern, S. Augart, S.M. Blackburn, M. Butrico, A. Cocchi, P Cheng, J. Dolby, S. Fink, D. Grove, M. Hind, K.S. McKinley, M. Mergen, J.E.B. Moss, T. Ngo, V. Sarkar, and M. Trapp. ''IBM Systems Journal'', Vol 44, No 2, 2005. 2004 Anticipation-Based Partial Redundancy Elimination for Static Single Assignment Form Thomas VanDrunen and Antony Hosking. ''Software - Practice and Experience'', 34(15):1413-1439, December 2004. An Inlining Technique in Jikes RVM to Improve Performance Ritesh Kumar, Ragesh Jaiswal, and Sanjeev K. Aggarwal. ''Advances in Computer Science and Technology'', St. Thomas, Virgin Islands, November 2004. Finding Your Cronies: Static Analysis for Dynamic Object Colocation Samuel Z. Guyer and Kathryn McKinley. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Vancouver, British Columbia, Canada, October 2004. MC2: High-Performance Garbage Collection for Memory-Constrained Environments Narendran Sachindran, J. Eliot B. Moss, and Emery Berger. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Vancouver, British Columbia, Canada, October 2004. Method-Level Phase Behavior in Java Workloads Andy Georges, Dries Buytaert, Lieven Eeckhout, and Koen De Bosschere. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Vancouver, British Columbia, Canada, October 2004. Program Locality: The Garbage Collection Advantage Xianglong Huang, Steve Blackburn, Kathryn McKinley, J. Eliot B. Moss, Zhenlin Wang, and Perry Cheng. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Vancouver, British Columbia, Canada, October 2004. Vertical Profiling: Understanding the Behavior of Object-Oriented Applications Matthias Hauswirth, Peter F. Sweeney, Amer Diwan, and Michael Hind. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Vancouver, British Columbia, Canada, October 2004. Automatic Heap Sizing: Taking Real Memory Into Account Ting Yang, Emery Berger, Matthew Hertz, Scott F. Kaplan, and J. Eliot B. Moss. ''ACM SIGPLAN International Symposium on Memory Management (ISMM '04)'', Vancouver, British Columbia, Canada, October 2004. Barriers: Friend or Foe? Steve Blackburn, and Antony Hosking. ''ACM SIGPLAN International Symposium on Memory Management (ISMM '04)'', Vancouver, British Columbia, Canada, October 2004. Dynamic Object Sampling for Pretenuring Maria Jump, Steve Blackburn, and Kathryn McKinley. ''ACM SIGPLAN International Symposium on Memory Management (ISMM '04)'', Vancouver, British Columbia, Canada, October 2004. Dynamic Selection of Application-Specific Garbage Collectors Sunil Soman, Chandra Krintz, and David F. Bacon. ''ACM SIGPLAN International Symposium on Memory Management (ISMM '04)'', Vancouver, British Columbia, Canada, October 2004. Write Barrier Elision for Concurrent Garbage Collectors [Martin Vechev<a/> and http://www.research.ibm.com/people/d/dfb David F. Bacon. ''ACM SIGPLAN International Symposium on Memory Management (ISMM '04)'', Vancouver, British Columbia, Canada, October 2004. Improving Grid Service Security with Fine Grain Policies Fabrizio Baiardi, Fabio Martinelli, Paolo Mori, and Anna Vaccarelli ''On the Move to Meaningful Internet System 2004: OTM Workshops, Lecture Notes in Computer Science'' 3292: Springer Verlag (2004) Virtual Machine Support for Aspects with Advice Instance Tables Michael Haupt and Mira Mezini. ''First French Workshop on Aspect-Oriented Programming'', Paris, France, September 2004. Micro-Measurements for Dynamic Aspect-Oriented Systems Michael Haupt and Mira Mezini. ''Net.ObjectDays 2004 (NODe)'', Erfurt, Germany, September 2004. The Use of Traces for Inlining in Java Programs Borys J. Bradel and Tarek S. Abdelrahman. ''Languages and Compilers for Parallel Computing (LCPC)'', Purdue University, Indiana, September 2004. Online Impact Analysis via Dynamic Compilation Technology Ben Breech, Anthony Danalis, Stacey Shindo, and Lori Pollock ''International Conference on Software Maintenance (ICSM)'', September 2004. Partial Redundancy Elimination for Global Value Numbering Thomas VanDrunen, ''PhD Thesis, Purdue University'', August 2004. Preemption-Based Avoidance of Priority Inversion for Java Adam Welc, Antony L. Hosking, and Suresh Jagannathan. ''International Conference on Parallel Programming (ICPP'04)'', Montreal, Canada, August 2004. Value-Based Partial Redundancy Elimination Thomas VanDrunen and Antony Hosking. ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Barcelona, Spain, June 2004. Adaptive Tuning of Reserved Space in an Appel Collector Jose Manuel Velasco, Katzalin Olcoz, and Francisco Tirado. ''European Conference on Object-Oriented Programming (ECOOP'04)'', Oslo, Norway, June 2004. Pointer Analysis in the Presence of Dynamic Class Loading Martin Hirzel, Amer Diwan, and Michael Hind. ''European Conference on Object-Oriented Programming (ECOOP'04)'', Oslo, Norway, June 2004. Transactional Monitors for Concurrent Objects Adam Welc, Suresh Jagannathan, Antony L. Hosking. ''European Conference on Object-Oriented Programming (ECOOP'04)'', Oslo, Norway, June 2004. Visualization and Analysis of Phased Behavior in Java Programs Priya Nagpurka and Chandra Krintz. ''ACM International Conference on the Principles and Practice of Programming in Java (PPPJ)'', Las Vegas, NV, June 2004. Myths and Reality: The Performance Impact of Garbage Collection Steve Blackburn, Perry Cheng, and Kathryn McKinley. ''Sigmetrics - Performance 2004, Joint International Conference on Measurement and Modeling of Computer Systems'', New York, New York, June 2004. '''(Source code available as of version 2.3.2 of Jikes RVM.)''' Adaptive Code Unloading for Resource-Constrained JVMs Lingli Zhang and Chandra Krintz. ''ACM SIGPLAN Conference on Languages, Compilers, and Tools for Embedded Systems (LCTES '04) and Software and Compilers for Embedded Systems (SCOPES '04)'', Washington DC, June 2004. Inducing Heuristics to Decide Whether to Schedule John Cavazos and J. Eliot B. Moss. ''ACM SIGPLAN Conference on Programming Languages Design and and Implementation (PLDI '04)'', Washington DC, June 2004. Oil and Water: High Performance Garbage Collection in Java with MMTk Steve Blackburn, Perry Cheng, and Kathryn McKinley. ''ICSE 2004, 26th International Conference on Software Engineering'', Edinburgh, Scotland, May 2004. '''(Source code available as of version 2.3.2 of Jikes RVM.)''' Towards Dynamic Interprocedural Analysis in JVMs Feng Qian and Laurie Hendren. ''USENIX 3rd Virtual Machine Research and Technology Symposium (VM'04)'', San Jose, California, May, 2004. Using Hardware Performance Monitors to Understand the Behavior of Java Application Peter F. Sweeney, Matthias Hauswirth, Brendon Cahoon, Perry Cheng, Amer Diwan, David Grove, and Michael Hind. ''USENIX 3rd Virtual Machine Research and Technology Symposium (VM'04)'', San Jose, California, May, 2004. JVM Independent Replay in Java Viktor Schuppan, Marcel Baur, and Armin Biere. ''Fourth Workshop on Runtime Verification (RV'04)'', Barcelona, Spain, April, 2004. Transactional Monitors for Concurrent Objects Jan Vitek, Suresh Jagannathan, Adam Welc, and Antony L. Hosking. ''European Symposium on Programming (ESOP'04)'', Barcelona, Spain, March, 2004. Virtual Machine Support for Dynamic Join Points Christoph Bockisch, Michael Haupt, Mira Mezini,and Klaus Ostermann. ''International Conference on Aspect-Oriented Software Development (AOSDP'04)'', Lancaster, UK, March, 2004. 2003 The Metronome: A Simpler Approach to Garbage Collection in Real-time Systems David F. Bacon, Perry Cheng, and V.T. Rajan. ''Workshop on Java Technologies for Real-Time and Embedded Systems'', Catania, Sicily, November 2003. Ulterior Reference Counting: Fast Garbage Collection without a Long Wait Steve Blackburn and Kathryn McKinley. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Anaheim, California, October 2003. An On-the-Fly Mark and Sweep Garbage Collector Based on Sliding Views Hezi Azatchi, Yossi Levanoni, Harel Paz, and Erez Petrank. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Anaheim, California, October 2003. MarkCopy: Fast Copying GC with Less Space Overhead Narendran Sachindran and J. Eliot B. Moss. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Anaheim, California, October 2003. Connectivity-Based Garbage Collection Martin Hirzel, Amer Diwan, and Matthew Hertz. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Anaheim, California, October 2003. How Java Programs Interact with Virtual Machines at the Microarchitectural Level Lieven Eeckhout, Andy Georges, and Koen De Bosschere. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Anaheim, California, October 2003. Transparent Fault-Tolerant Java Virtual Machine Roy Friedman and Alon Kama. ''22nd IEEE Symposium on Reliable Distributed Systems (SRDS)'', Florence, Italy, October, 2003. JToe: A Java API for Object Exchange Serge Chaumette, Pascal Grange, Benoit Metrot, and Pierre Vigneras. ''Parallel Computing/ParCo 2003'', September 2003. High-performance Java code for computation fluid dynamics C. J. Riley, Sid Chatterjee, and R. Biswas. ''Concurrency and Computation: Practice and Experience'', 15:395-415, 2003. Detecting Malicious Java Code Using Virtual Machine Auditing Sunil Soman, Chandra Krintz and Giovanni Vigna. ''12th USENIX Security Symposium'', Washington D.C., August 2003. Controlling Fragmentation and Space Consumption in the Metronome, a Real-time Garbage Collector for Java David F. Bacon, Perry Cheng, and V.T. Rajan. ''Conference on Languages, Compilers, and Tools for Embedded Systems'', San Diego, California, June 2003. Designing a Distributed JVM on a Cluster John N Zigman and Ramesh Sanakaranarayana. ''17th European Simulation Multiconference'', Nottingham, United Kingdom, June 2003. Integrating Generations with Advanced Reference Counting Garbage Collectors Hezi Azatchi and Erez Petrank. ''12th International Conference on Compiler Construction'', Warsaw, Poland, April 2003. Just-In-Time Aspects: Efficient Dynamic Weaving for Java Andrei Popovici, Gustavo Alonso and Thomas Gross. ''2nd International Conference on Aspect-Oriented Software Development'', Boston, Massachussetts, March 2003. Design, Implementation and Evaluation of Adaptive Recompilation with On-Stack Replacement Stephen Fink, and Feng Qian. ''International Symposium on Code Generation and Optimization'', San Francisco, California, March 2003. '''(Source code available as of version 2.2.1 of Jikes RVM.)''' Adaptive Online Context-Sensitive Inlining Kim Hazelwood and David Grove. ''International Symposium on Code Generation and Optimization'', San Francisco, California, March 2003. Coupling On-Line and Off-Line Profile Information to Improve Program Performance Chandra Krintz. ''International Symposium on Code Generation and Optimization'', San Francisco, California, March 2003. A Real-time Garbage Collector with Low Overhead and Consistent Utilization David F. Bacon, Perry Cheng, and V. T. Rajan. ''Conference Record of the Thirtieth ACM Symposium on Principles of Programming Languages'', New Orleans, Louisiana, January 2003. Using the SafeTSA Representation to Boost the Performance of an Existing Java Virtual Machine Wolfram Amme, Jeffrey von Ronne, and Michael Franz. ''10th International Workshop on Compilers for Parallel Computers (CPC 2003)'', Amsterdam, The Netherlands. January 2003. 2002 Online Feedback-Directed Optimization of Java Matthew Arnold, Michael Hind, and Barbara G. Ryder. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Seatle, Washington, November 4-8, 2002. Creating and Preserving Locality of Java Applications at Allocation and Garbage Collection Times Yefim Shuf, Manish Gupta, Hubertus Franke, Andrew Appel, and Jaswinder Pal Singh. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Seatle, Washington, November 4-8, 2002. GCspy: An Adaptable Heap Visualisation Framework Tony Printezis and Richard Jones. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Seatle, Washington, November 4-8, 2002. Immutability Specification and its Applications Igor Pechtchanski and Vivek Sarkar. ''Joint ACM Java Grande - ISCOPE 2002 Conference'', Seatle, Washington, November 3-5, 2002. Experiences Porting the Jikes RVM to Linux/IA32 Bowen Alpern, Maria Butrico, Tony Cocchi, Julian Dolby, Stephen Fink, David Grove, and Ton Ngo. ''2nd Java Virtual Machine Research and Technology Symposium (JVM '02)'', San Francisco, California, August 1-2, 2002. '''(Source code available as of version 2.1.0 of Jikes RVM.)''' Automatic Implementation of Programming Language Consistency Models Zehra Sura, Chi-Leung Wong, Xing Fang, Jaejin Lee, S.P. Midkiff, and David Padua. ''Fifteenth Workshop on Languages and Compilers for Parallel Computing'', July, 2002. In or Out? Putting Write Barriers in Their Place Steve Blackburn and Kathryn McKinley. ''ACM SIGPLAN International Symposium on Memory Management (ISMM '02)'', Berlin, Germany, June 20-21, 2002. An Adaptive, Region-based Allocator for Java Feng Qian and Laurie Hendren. ''ACM SIGPLAN International Symposium on Memory Management (ISMM '02)'', Berlin, Germany, June 20-21, 2002. Understanding the Connectivity of Heap Objects Martin Hirzel, Johannes Henkel, Amer Diwan, Michael Hind. ''ACM SIGPLAN International Symposium on Memory Management (ISMM '02)'', Berlin, Germany, June 20-21, 2002. When to Use a Compilation Service? Jeffrey Palm, Han Lee, Amer Diwan, J. Eliot B. Moss. ''ACM SIGPLAN Conference on Languages, Compilers, and Tools for Embedded Systems (LCTES '02) and Software and Compilers for Embedded Systems (SCOPES '02)'', Berlin, Germany, June 19-21 2002. Beltway: Getting Around Garbage Collection Gridlock Steve Blackburn, Richard Jones, Kathryn McKinley, J. Eliot B. Moss. ''ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '02)'', Berlin, Germany, June 17-19 2002. Static Load Classification for Improving the Value Predictability of Data-Cache Misses Martin Burtscher, Amer Diwan, Matthias Hauswirth. ''ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '02)'', Berlin, Germany, June 17-19 2002. Efficient and Precise Datarace Detection for Multithreaded Object-Oriented Programs Jong-Deok Choi, Keunwoo Lee, Alexey Loginov, Robert O'Callahan, Vivek Sarkar, and Manu Sridharan. ''ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '02)'', Berlin, Germany, June 17-19 2002. Older-first Garbage Collection in Practice: Evaluation in a Java Virtual Machine Darko Stefanovic, Matthew Hertz, Steve M. Blackburn, Kathryn S. McKinley and J. Eliot B. Moss. ''ACM SIGPLAN Workshop on Memory System Performance (MSP '02)'', Berlin, Germany, June 16, 2002. Error-Free Garbage Collection Traces: How To Cheat and Not Get Caught Matthew Hertz, Steve Blackburn, J. Eliot B. Moss, Kathryn McKinley, and Darko Stefanovic. ''ACM SIGMetrics 2002'', Marina del Rey, CA June 15-19 2002. Using Adaptive Optimization Techniques to Teach Mobile Java Computing Chandra Krintz. ''Principles and Practice of Programming in Java'', Dublin, Ireland, June 13-14, 2002. Thin Guards: A Simple and Effective Technique for Reducing the Penalty of Dynamic Class Loading. Matthew Arnold and Barbara G. Ryder. ''European Conference on Object-Oriented Programming (ECOOP 2002)'', Malaga Spain, June 10-14 2002. Atomic Instructions in Java David Hovemeyer, William Pugh, and Jaime Spacco. ''European Conference on Object-Oriented Programming (ECOOP 2002)'', Malaga Spain, June 10-14 2002. Space- and Time-Efficient Implementation of the Java Object Model David Bacon, Stephen Fink, and David Grove. ''European Conference on Object-Oriented Programming (ECOOP 2002)'', Malaga Spain, June 10-14, 2002. '''(Source code available as of version 2.1.0 of Jikes RVM.)''' The Pensieve Project: A Compiler Infrastructure for Memory Models C.-L. Wong, Z. Sura, X. Fang, S.P. Midkiff, J. Lee, and D. Padua. ''The Sixth International Symposium on Parallel Architectures, Algorithms, and Networks'', May, 2002. Exploiting Prolific Types for Memory Management and Optimizations Yefim Shuf, Manish Gupta, Rajesh Bordawekar, and Jaswinder Pal Singh. ''29th ACM SIGPLAN/SIGACT Symposium on Principles of Programming Languages (POPL)'', Portland, OR, January 2002. 2001 Efficient Implementation of Java Interfaces: Invokeinterface Considered Harmless Bowen Alpern, Anthony Cocchi, Stephen Fink, David Grove, and Derek Lieber. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Tampa, FL, USA, Oct 14-18, 2001. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' Pretenuring for Java Steve Blackburn, Sharad Singhai, Matthew Hertz, Kathryn S. McKinley, and J. Eliot B. Moss. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Tampa, FL, USA, Oct 14-18, 2001. Dynamic Optimistic Interprocedural Analysis: A Framework and an Application Igor Pechtchanski and Vivek Sarkar. ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Tampa, FL, USA, Oct 14-18, 2001. Efficient Dependence Analysis For Java Arrays Vivek Sarkar and Stephen Fink. ''EURO-PAR 2001'', Manchester, England, September, 2001. A Comparative Evaluation of Parallel Garbage Collectors C. Attansio, David Bacon, Anthony Cocchi, and Stephen Smith. ''Fourteenth Annual Workshop on Languages and Compilers for Parallel Computing'', Cumberland Falls, Kentucky, Aug, 2001. '''(Source code available in versions 2.0.0 through 2.2.0 of Jikes RVM.)''' A Framework for Reducing the Cost of Instrumented Code Matthew Arnold and Barbara G. Ryder. ''ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '01)'', Snowbird, Utah, June 20-22, 2001. '''(Source code available as of version 2.3.0 of Jikes RVM.)''' Java without the Coffee Breaks: A Non-intrusive Multiprocessor Garbage Collector David Bacon, C. Attanasio, Han Lee, V. Rajan, and Stephen Smith. ''ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '01)'', Snowbird, Utah, June 20-22, 2001. '''(Source code available in versions 2.0.0 through 2.0.3 of Jikes RVM.)''' Program Analysis for Safety Guarantees in a Java Virtual Machine Written in Java. Jan-Willem Maessen, Vivek Sarkar, and David Grove. ''ACM SIGPLAN-SIGSOFT Workshop on Program Analysis for Software Tools and Engineering (PASTE '01),'' Snowbird, Utah, June 18-19, 2001. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' Concurrent Cycle Collection in Reference Counted Systems David Bacon and V. Rajan. ''The Fifteenth European Conference on Object-Oriented Programming (ECOOP)'', University Eötvös Loránd, Budapest, Hungary, June 18-22, 2001. '''(Source code available in versions 2.0.0 through 2.0.3 of Jikes RVM.)''' Characterizing the Memory Behavior of Java Workloads: A Structured View and Opportunities for Optimizations Yefim Shuf, Mauricio Serrano, Manish Gupta, and Jaswinder Pal Singh. ''ACM SIGMETRICS 2001/Performance 2001'', Cambridge, MA, June 2001. High-Performance Java Codes for Computational Fluid Dynamics C. J. Riley, Sid Chatterjee, and R. Biswas. ''The Joint ACM Java Grande - ISCOPE 2001 Conference'', Stanford, CA, June 2001. Dynamic Type Checking in Jalapeño Bowen Alpern, Anthony Cocchi, and David Grove. ''The Usenix Java Virtual Machine Research and Technology Symposium,'' April, 2001. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' 2000 Reducing the Overhead of Dynamic Compilation Chandra Krintz, David Grove, Vivek Sarkar, and Brad Calder. ''Software: Practice and Experience'', 31(8), 717-738, December 2000. Adaptive Optimization in the Jalapeño JVM: The Controller's Analytical Model Matthew Arnold, Stephen Fink, David Grove, Michael Hind, and Peter F. Sweeney. ''3rd ACM Workshop on Feedback-Directed and Dynamic Optimization (FDDO-3)'', December 10, 2000, Monterey, California. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' Adaptive Optimization in the Jalapeño JVM Matthew Arnold, Stephen Fink, David Grove, Michael Hind, and Peter F. Sweeney. ''ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA 2000)'', Minneapolis, Minnesota, October 15-19, 2000. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' Quasi-Static Compilation for Java Mauricio Serrano, Rajesh Bordawekar, Sam Midkiff and Manish Gupta. ''ACM Conference onObject-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', October 2000. Debugging by Remote Reflection Ton Ngo and John Barton. ''Euro-Par 2000,'' Munich, Germany, August 27 - Sept 1 2000. '''(Source code available as of versions 2.0.0 through 2.1.1 of Jikes RVM.)''' An Empirical Study of Selective Optimization Matthew Arnold, Michael Hind, and Barbara G. Ryder. ''13th International Workshop on Languages and Compilers for Parallel Computing'', Yorktown Heights, New York, August 10-12, 2000. Unified Analysis of Array and Object References in Strongly Typed Languages Stephen Fink, Kathleen Knobe, and Vivek Sarkar. ''2000 Static Analysis Symposium (SAS 2000)'', Santa Barbara, CA, June, 2000. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' ABCD: Eliminating Array Bounds Checks on Demand Rastislav Bodik, Rajiv Gupta, and Vivek Sarkar. ''ACM SIGPLAN 2000 Conference on Programming Language Design and Implementation (PLDI 2000)'', Vancouver, British Columbia, Canada, June 17-21, 2000. '''(Source code prototype available in versions 2.0.0 through 2.2.0 of Jikes RVM.)''' A Framework for Interprocedural Analysis and Optimization in the Presence of Dynamic Class Loading Vugranam C. Sreedhar, Michael Burke, and Jong-Deok Choi. '' ACM SIGPLAN 2000 Conference on Programming Language Design and Implementation (PLDI 2000)'', Vancouver, British Columbia, Canada, June 17-21, 2000. Optimizing Java Programs in the Presence of Exceptions Manish Gupta, Jong-Deok Choi, and Michael Hind. '' 14th European Conference on Object-Oriented Programming (ECOOP 2000),'', June 12-16, 2000, Cannes, France. The Jalapeño Virtual Machine B. Alpern, C. R. Attanasio, J. J. Barton, M. G. Burke, P Cheng, J.-D. Choi, A. Cocchi, S. J. Fink, D. Grove, M. Hind, S. F. Hummel, D. Lieber, V. Litvinov, M. F. Mergen, T. Ngo, J. R. Russell, V. Sarkar, M. J. Serrano, J. C. Shepherd, S. E. Smith, V. C. Sreedhar, H. Srinivasan, and J. Whaley. ''IBM System Journal'', Vol 39, No 1, February 2000. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' A Comparative Study of Static and Profile-Based Heuristics for Inlining Matthew Arnold, Stephen Fink, Vivek Sarkar, and Peter F. Sweeney. ''2000 ACM SIGPLAN Workshop on Dynamic and Adaptive Compilation and Optimization (DYNAMO '00)'', Boston, Massachusetts, January 19-21, 2000. 1999 Implementing Jalapeño in Java Bowen Alpern, Dick Attanasio, John J. Barton, Anthony Cocchi, Susan Flynn Hummel, Derek Lieber, Mark Mergen, Ton Ngo, Janice Shepherd, and Stephen Smith. ''1999 ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA '99)'', Denver, Colorado, November 1, 1999. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' Efficient and Precise Modeling of Exceptions for the Analysis of Java Programs Jong-Deok Choi, David Grove, Michael Hind, Vivek Sarkar. ''1999 ACM SIGPLAN-SIGSOFT Workshop on Program Analysis for Software Tools and Engineering (PASTE '99)'', Toulouse, France, September 6, 1999. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' Dependence Analysis for Java Craig Chambers, Igor Pechtchanski, Vivek Sarkar, Mauricio Serrano, and Harini Srinivasan. ''Workshop on Languages and Compilers for Parallel Computing (LCPC 99),'' La Jolla, CA, Aug 1999. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' The Jalapeño Dynamic Optimizing Compiler for Java Michael Burke, Jong-Deok Choi, Stephen Fink, David Grove, Michael Hind, Vivek Sarkar, Mauricio Serrano, V.C. Sreedhar, and Harini Srinivasan. ''1999 ACM Java Grande Conference'', San Francisco, June 12-14, 1999. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' Jalapeño — a Compiler-supported Java Virtual Machine for Servers Bowen Alpern, Anthony Cocchi, Derek Lieber, Mark Mergen, and Vivek Sarkar. ''Workshop on Compiler Support for Software System (WCSSS 99)'', Atlanta, GA, May 1999, held in conjunction with PLDI '99. '''(Source code available as of version 2.0.0 of Jikes RVM.)''' View Online Changes between revision 39 and revision 40:  Below is a list of all publications that use Jikes RVM. This list includes both papers written by Jikes RVM developers, as well as users of the system. We *strongly encourage* authors to utilize the [Research Archive|http://sourceforge.net/tracker/?group_id=128805&atid=723235] to *publish source code* used in their studies, and thus, allow others to build on their results. When the implementation described in a paper is available in a Jikes RVM release, this is noted with the paper. Information of dissertations relating to the Jikes RVM is [available here|Dissertations]. If you would like to see a paper listed then please send details to the [RVM researchers mailing list|Mailing Lists].     h2. 2008     h3. Constraint Based Optimization of Stationary Fields     * Ian Rogers, Jisheng Zhao, Chris Kirkham, Ian Watson  * [Principles and Practice of Programming in Java (PPPJ '08)|http://www.agentgroup.unimore.it/pppj08/], Modena, Italy, 9-11 September 2008.     h3. Approaches to Reflective Method Invocation   h3. [Boot Image Layout for Jikes RVM|ftp://ftp.cs.man.ac.uk/pub/apt/papers/RogersZhaoWatson_ICOOOLPS2008_bootimage.pdf]     * Ian Rogers, Jisheng Zhao and Ian Watson  * [Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS)|http://icooolps.loria.fr/], Cyprus, 7 July 2008. * [Presentation|ftp://ftp.cs.man.ac.uk/pub/apt/papers/Rogers_ICOOOLPS2008_presentation.ppt], [tracker and source code|http://jira.codehaus.org/browse/RVM-515]    h3. Boot Image Layout for Jikes RVM   h3. [Pure Method Analysis within Jikes RVM|ftp://ftp.cs.man.ac.uk/pub/apt/papers/ZhaoRogersKirkhamWatson_ICOOOLPS2008_purity.pdf]    * Ian Rogers, Jisheng Zhao and Ian Watson   * Jisheng Zhao, Ian Rogers, Chris Kirkham and Ian Watson  * [Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS)|http://icooolps.loria.fr/], Cyprus, 7 July 2008. * [Presentation|ftp://ftp.cs.man.ac.uk/pub/apt/papers/Rogers_ICOOOLPS2008_presentation.ppt], [tracker and source code|http://jira.codehaus.org/browse/RVM-516]    h3. Pure Method Analysis within Jikes RVM   h3. [Approaches to Reflective Method Invocation|ftp://ftp.cs.man.ac.uk/pub/apt/papers/RogersZhaoWatson_ICOOOLPS2008_reflection.pdf]    * Jisheng Zhao, Ian Rogers, Chris Kirkham and Ian Watson   * Ian Rogers, Jisheng Zhao and Ian Watson  * [Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS)|http://icooolps.loria.fr/], Cyprus, 7 July 2008.  * [Presentation|ftp://ftp.cs.man.ac.uk/pub/apt/papers/Rogers_ICOOOLPS2008_presentation.ppt], [tracker and source code|http://jira.codehaus.org/browse/RVM-517]     h3. Speculative Multithreading: An Object-Driven Approach     * Simon Wilkinson, Ian Watson  * [Parallel Execution of Sequential Programs on Multi-core Architectures (PESPMA)|http://cccp.eecs.umich.edu/pespma/index.html], Beijing, China, 22 June 2008.     h3. [No Bit Left Behind: The Limits of Heap Data Compression|http://www.cs.utexas.edu/users/jbsartor/ismm08-limits-compression.pdf]     * J.B. Sartor, M. Hirzel, and K.S. McKinley  * The 2008 International Symposium on Memory Management. Tucson, AZ, June 2008.     h3. [Immix: A Mark-Region Garbage Collector with Space Efficiency, Fast Collection, and Mutator Performance|http://cs.anu.edu.au/~Steve.Blackburn/pubs/abstracts.html#immix-pldi-2008]     * [Stephen Blackburn|http://cs.anu.edu.au/people/Steve.Blackburn/] and [Kathryn McKinley|http://www.cs.utexas.edu/users/mckinley/]  * ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2008), Tucson, AZ, June 7-13, 2008  * Patch against r13767 [here|http://cs.anu.edu.au/~Steve.Blackburn/pubs/papers/immix-jikesrvm-r13767.patch.gz].&nbsp; Code being integrated into svn head April-May 2008.&nbsp;     h3. [Adaptive Loop Tiling for a Multi-Cluster CMP|ftp://ftp.cs.man.ac.uk/pub/apt/papers/ZHLRKW_ICA3PP_2008.pdf]     * Jisheng Zhao, Matthew Horsnell, Mikel Lujan, Ian Rogers, Chris Kirkham and Ian Watson  * [International Conference on Algorithms and Architectures|http://www.cs.ucy.ac.cy/ica3pp08/], Cyprus, 9-11 June 2008.     h3. A Study of Java Object Demographics     * Richard Jones and Chris Ryder  * International Symposium on Memory Management, Tucson, AZ, June 7-8, 2008     h3. Phase-based Adaptive Recompilation in a JVM     * Dayong Gu and Clark Verbrugge  * [2008 International Symposium on Code Generation and Optimization (CGO)|http://www.cgo.org/], Boston, Massachusetts, 6-9 April.     h3. [Branch-on-Random|http://www-sal.cs.uiuc.edu/~zilles/papers/branch-on-random.cgo2008.pdf]     * Edward Lee and Craig Zilles  * [2008 International Symposium on Code Generation and Optimization (CGO)|http://www.cgo.org/], Boston, Massachusetts, 6-9 April.     h3. [GC Assertions: Using the Garbage Collector to Check Heap Properties|http://www.eecs.tufts.edu/~eaftan/gcassertions-mspc-2008.pdf]     * Edward Aftandilian and Samuel Guyer  * [ACM SIGPLAN Workshop on Memory Systems Performance and Correctness|http://www.cs.umass.edu/~emery/MSPC08/], Seattle, Washington, USA, 2 March, 2008     h3. [Dynamic Analysis of Java Program Concepts for Visualization and Profiling|http://intranet.cs.man.ac.uk/apt/publications/papers/Singer_SoCP08.php]     * Jeremy Singer and Chris Kirkham  * Science of Computer Programming, vol. 70, no.2-3, pp.111-126, Elsevier, Feb 2008.     h3. [Object Co-location and Memory Reuse for Java Programs|http://doi.acm.org/10.1145/1328195.1328199]     * Zoe C. H. Yu, Francis C. M. Lau, and Cho-Li Wang  * ACM Transactions on Architecture and Code Optimization, Vol. 4, No. 4, Article 23, January 2008.     h2. 2007        h3. [Effective Prefetch for Mark-Sweep Garbage Collection|http://cs.anu.edu.au/~Steve.Blackburn/pubs/abstracts.html#pf-ismm-2007]     * Robin Garner, [Stephen Blackburn|http://cs.anu.edu.au/people/Steve.Blackburn/], & Daniel Frampton  * ACM SIGPLAN International Symposium on Memory Management (ISMM), Montreal, October 2007  * Patch against Jikes RVM r10327 available [here|http://cs.anu.edu.au/~Steve.Blackburn/pubs/papers/pf-ismm-2007.tgz].     h3. [Decrypting the Java Gene Pool: Predicting Object Lifetimes with Micro-Patterns|http://www.cs.kent.ac.uk/pubs/2007/2596/index.html]     * [Sebastien Marion|http://www.cs.kent.ac.uk/people/rpg/sm244/], [Richard Jones|http://www.cs.kent.ac.uk/people/staff/rej/], & [Chris Ryder|http://www.cs.kent.ac.uk/people/staff/cr20/]  * ACM SIGPLAN International Symposium on Memory Management (ISMM), Montreal, October 2007     h3. Uniqueness Inference for Compile-Time Object Deallocation     * Sigmund Cherem & Radu Rugina  * ACM SIGPLAN International Symposium on Memory Management (ISMM), Montreal, October 2007     h3. [Statistically Rigorous Java Performance Evaluation|http://itkovian.net/base/files/papers/oopsla2007-georges-preprint.pdf]     * [Andy Georges|http://itkovian.net], [Dries Buytaert|http://buytaert.net], [Lieven Eeckhout|http://www.elis.ugent.be/~leekhou]  * ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Montreal, October 2007     h3. [Using HPM-Sampling to Drive Dynamic Compilation|http://buytaert.net/files/oopsla07-buytaert.pdf]     * [Dries Buytaert|http://buytaert.net], [Andy Georges|http://itkovian.net], [Michael Hind|http://www.research.ibm.com/people/h/hind], [Matthew Arnold|http://www.research.ibm.com/people/m/marnold], [Lieven Eeckhout|http://www.elis.ugent.be/~leekhou], [Koen De Bosschere|http://www.elis.ugent.be/~kdb]  * ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Montreal, October 2007     h3. [Intelligent Selection of Application-Specific Garbage Collectors|http://www.cs.man.ac.uk/~jsinger/pdfs/ismm07.pdf]     * [Jeremy Singer|http://www.cs.man.ac.uk/~jsinger/], [Gavin Brown|http://www.cs.man.ac.uk/~gbrown], Ian Watson, [John Cavazos|http://www.cis.udel.edu/~cavazos/]  * ACM SIGPLAN International Symposium on Memory Management (ISMM), Montreal, October 2007     h3. [Probabilistic Calling Context|http://www.cs.utexas.edu/~mikebond/pcc-oopsla-2007.pdf]     * [Michael D. Bond|http://www.cs.utexas.edu/~mikebond/], [Kathryn S. McKinley|http://www.cs.utexas.edu/~mckinley/].  * ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Montreal, October 2007  * Source code available on the [Research Archive].     h3. [Tracking Bad Apples: Reporting the Origin of Null and Undefined Value Errors|http://www.cs.utexas.edu/~mikebond/origin-tracking-oopsla-2007.pdf]     * [Michael D. Bond|http://www.cs.utexas.edu/~mikebond/], [Nicholas Nethercote|http://www.cs.mu.oz.au/~njn/], Stephen W. Kent, [Samuel Z. Guyer|http://www.cs.tufts.edu/~sguyer/], [Kathryn S. McKinley|http://www.cs.utexas.edu/~mckinley/].  * ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Montreal, October 2007  * Source code available on the [Research Archive].     h3. Java Object Header Elimination for Reduced Memory Consumption in 64-Bit Virtual Machines     * [Kris Venstermans|http://www.elis.ugent.be/~kvenster/research.html], [Lieven Eeckhout|http://www.elis.ugent.be/~leeckhou], and [Koen De Bosschere|http://www.elis.ugent.be/~kdb].  * ACM Transactions on Code Optimizations (TACO), Vol 4, No. 3, Article 17, September 2007     h3. [Optimizing Chip Multiprocessor Work Distribution using Dynamic Compilation|ftp://ftp.cs.man.ac.uk/pub/apt/papers/ZhaoHorsnellRogersDinnKirkhamWatson_EuroPar07.pdf]     * Jisheng Zhao, Matthew Horsnell, Ian Rogers, Andrew Dinn, Chris Kirkham, Ian Watson.  * Proceedings of&nbsp; Euro-Par, IRISA/ENS Cachan, Rennes, France, 28-31 August 2007     h3. [Object-Relative Addressing: Compressed Pointers in 64-Bit Java Virtual Machines |http://www.elis.ugent.be/~kvenster/papers/VenstermansKris_ORA.pdf]     * [Kris Venstermans|http://www.elis.ugent.be/~kvenster/research.html], [Lieven Eeckhout|http://www.elis.ugent.be/~leeckhou], and [Koen De Bosschere|http://www.elis.ugent.be/~kdb].  * Proceedings of 21st European Conference on Object-Oriented Programming (ECOOP '07), July 30 - August 3, 2007     h3. [Correcting the Dynamic Call Graph Using Control Flow Constraints|http://www.cs.utexas.edu/~bclee/papers/cgc-cc-2007.pdf]     * [Byeongcheol Lee|http://www.cs.utexas.edu/~bclee], Kevin Resnick, [Michael D. Bond|http://www.cs.utexas.edu/~mikebond/], [Kathryn S. McKinley|http://www.cs.utexas.edu/~mckinley/]  * Proceedings of the 16th International Conference on Compiler Construction (CC 2007), Braga, Portugal, March 2007     h3. Isla Vista Heap Sizing: Using Feedback to Avoid Paging     * Chris Grzegorczyk, Sunil Soman, Chandra Krintz, Rich Wolski  * Proceedings of the 5th International Symposium on Code Generation and Optimization (CGO 2007), San Jose, California, March 2007     h3. A Scalable, Non-blocking Approach to Transactional Memory     * H. Chafi, J. Casper, B. Carlstrom, A. McDonald, C. Cao Minh, W. Baek, C. Kozyrakis, and K. Olukotun (Stanford University)  * The 13th International Symposium on High-Performance Computer Architecture (HPCA), Phoenix, Arizona, February 10-14, 2007.     h3. [Mobility of Data in Distributed Hybrid Computing Systems|http://escher.elis.ugent.be/publ/Edocs/DOC/P107_032.pdf]     * [Philippe Faes|http://www.elis.ugent.be/~pfaes], Mark Christiaens and Dirk Stroobandt  * Proceedings of the 21st International Parallel and Distributed Processing Symposium, 2007     h3. [Cork: Dynamic Memory Leak Detection for Java|http://www.cs.utexas.edu/~mjump/papers/cork-popl-2007.pdf]     * [Maria Jump|http://www.cs.utexas.edu/~mjump], [Kathryn S. McKinley|http://www.cs.utexas.edu/~mckinley/]  * Proceedings of the 2007 Principles of Programming Languages, Nice, France, January 2007     h2. 2006        h3. [Lazy Interprocedural Analysis for Dynamic Loop Parallelization|ftp://ftp.cs.man.ac.uk/pub/apt/papers/ZhaoKirkhamRogers_NHC06.pdf]     * Jisheng Zhao, Chris Kirkham, Ian Rogers  * New Horizons in Compilers, Bangalore, India, December 18, 2006.     h3. CRAMM: Virtual Memory Support for Garbage-Collected Applications     * Ting Yang and Emery D. Berger and Scott F. Kaplan and J. Eliot B. Moss  * Proceedings of the 7th USENIX Symposium on Operating Systems Design and Implementation (OSDI), Seattle, Washington, November, 2006.     h3. [Revocation techniques for Java concurrency|http://dx.doi.org/10.1002/cpe.1008]     * Welc A, Jagannathan S and Hosking AL.  * Concurrency and Computation - Practice and Experience 18(2):1613-1656, October 2006.     h3. [JAVANA: A System for Building Customized Java Program Analysis Tools|http://buytaert.net/files/oopsla06-paper.pdf]     * Jonas Maebe, Dries Buytaert, Lieven Eeckhout, Koen De Bosschere  * ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Portland, Oregon, October 22-26, 2006.     h3. [The DaCapo Benchmarks: Java Benchmarking Development and Analysis|http://cs.anu.edu.au/~Steve.Blackburn/pubs/abstracts.html#dacapo-oopsla-2006]     * Stephen M Blackburn, Robin Garner, Chris Hoffmann, Asjad M Khan, Kathryn S. McKinley, Rotem Bentzur, Amer Diwan, Daniel Feinberg, Daniel Frampton, Samuel Z. Guyer, Martin Hirzel, Antony Hosking, Maria Jump, Han Lee, J. Eliot B. Moss, Aashish Phansalkar, Darko Stefanovic, Thomas VanDrunen, Daniel von Dincklage, Benjamin Wiedermann  * ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Portland, Oregon, October 22-26, 2006.     h3. [Method-Specific Dynamic Compilation using Logistic Regression|http://homepages.inf.ed.ac.uk/jcavazos/oopsla-2006.pdf]     * John Cavazos, Michael O'Boyle  * ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Portland, Oregon, October 22-26, 2006.     h3. Adapting VM Techniques for Seamless Aspect Support     * Christoph Bockisch, Matthew Arnold, Tom Dinkelaker, Mira Mezini  * ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Portland, Oregon, October 22-26, 2006.     h3. Efficient Control Flow Quantification     * Christoph Bockisch, Sebastian Kanthak, Michael Haupt, Matthew Arnold, Mira Mezini,  * ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Portland, Oregon, October 22-26, 2006.     h3. [Bell: Bit-Encoding Online Memory Leak Detection|http://www.cs.utexas.edu/~mikebond/bell-asplos-2006.pdf]     * [Michael D. Bond|http://www.cs.utexas.edu/~mikebond/], [Kathryn S. McKinley|http://www.cs.utexas.edu/~mckinley/].  * Proceedings of the 12th International Conference on Architectural Support for Programming Languages and Operating Systems ([ASPLOS-XII|http://www.princeton.edu/~asplos06/]), San Jose, October 21-25, 2006.  * Source code available on the [Research Archive].     h3. [Trace-based automatic parallelization in the Jikes RVM|http://www.cs.ualberta.ca/~amaral/cascon/CDP06/#BorysBradel]     * Borys Bradel and Tarek S. Abdelrahman  * ''Proceedings of the [5th Workshop on Compiler-Driven Performance|http://www.cs.ualberta.ca/~amaral/cascon/CDP06],'' Toronto, Canada, Oct 16, 2006.     h3. [Enabling Java Mobile Computing on the IBM Jikes Research Virtual Machine|http://www.agentgroup.unimore.it/MOON/papers/pdf/pppj06.pdf]     * [Giacomo Cabri|http://www.agentgroup.unimore.it/didattica/curriculum/giacomo/], [Letizia Leonardi|http://www.agentgroup.unimo.it/didattica/curriculum/letizia/Leonardi.html], ['''Raffaele Quitadamo'''|http://www.agentgroup.unimore.it/didattica/curriculum/raffaele].  * ''Proceedings of the 4th International Conference on the Principles and Practice of Programming in Java 2006 (PPPJ)'', Mannheim, Germany, August 2006, ACM Press.     h3. [Transparently reconciling transactions with locking for Java synchronization|http://dx.doi.org/10.1007/11785477_8]     * Welc A, Hosking AL, Jagannathan S.  * Proceedings of the 20th European Conference on Object-Oriented Programming (ECOOP):148-173 (Nantes, France, July 2006), Lecture Notes in Computer Science 4067, Springer-Verlag, 2006.     h3. [Architectural Semantics for Practical Transactional Memory|http://tcc.stanford.edu/publications/tcc_isca2006.pdf]     * [Austen McDonald|http://www.stanford.edu/~austenmc], [JaeWoong Chung|http://www.stanford.edu/~jwchung], [Brian D. Carlstrom|http://carlstrom.com], [Chi Cao Minh|http://www.stanford.edu/~caominh], [Hassan Chafi|http://www.stanford.edu/~hchafi], [Christos Kozyrakis|http://csl.stanford.edu/~christos], and [Kunle Olukotun|http://www-hydra.stanford.edu/~kunle].  * ''Proceedings of the 33rd Annual International Symposium on Computer Architecture'', Boston, Massachusetts, June 17-21, 2006.     h3. [Relative Factors in Performance Analysis of JVMs|http://www.sable.mcgill.ca/publications/papers/2006-1/gu-06-relative.pdf]     * Dayong Gu, Clark Verbrugge, and Etienne M. Gagnon  * ''Proceedings of the 2nd Annual International Conference on Virtual Execution Environments'', Ottawa, Canada, June 14-16, 2006.     h3. Impact of Virtual Execution Environments on Processor Energy Consumption and Hardware Adaptation     * Shiwen Hu and Lizy K. John  * ''Proceedings of the 2nd Annual International Conference on Virtual Execution Environments'', Ottawa, Canada, June 14-16, 2006.     h3. [Free-Me: A Static Analysis for Automatic Individual Object Reclamation|http://www.eecs.tufts.edu/~sguyer/free-pldi-2006.pdf]     * [Samuel Z. Guyer|http://www.eecs.tufts.edu/~sguyer], [Kathryn S. McKinley|http://www.cs.utexas.edu/users/mckinley], and Daniel Frampton.  * ''Proceedings of the ACM SIGPLAN 2006 Conference on Programming Language Design and Implementation'', Ottawa, Canada, June 10-16, 2006.     h3. The Compressor: Concurrent, Incremental, and Parallel Compaction     * Haim Kermany, [Erez Petrank|http://www.cs.technion.ac.il/~erez].  * ''Proceedings of the ACM SIGPLAN 2006 Conference on Programming Language Design and Implementation'', Ottawa, Canada, June 10-16, 2006.     h3. [The Atomos Transactional Programming Language|http://tcc.stanford.edu/publications/tcc_pldi2006.pdf]     * [Brian D. Carlstrom|http://carlstrom.com], [Austen McDonald|http://www.stanford.edu/~austenmc], [Hassan Chafi|http://www.stanford.edu/~hchafi], [JaeWoong Chung|http://www.stanford.edu/~jwchung], [Chi Cao Minh|http://www.stanford.edu/~caominh], [Christos Kozyrakis|http://csl.stanford.edu/~christos], and [Kunle Olukotun|http://www-hydra.stanford.edu/~kunle].  * ''Proceedings of the ACM SIGPLAN 2006 Conference on Programming Language Design and Implementation'', Ottawa, Canada, June 10-16, 2006.     h3. [Parallelizing SPECjbb2000 with Transactional Memory|http://tcc.stanford.edu/publications/tcc_wtw2006_specjbb.pdf]     * [JaeWoong Chung|http://www.stanford.edu/~jwchung], [Chi Cao Minh|http://www.stanford.edu/~caominh], [Brian D. Carlstrom|http://carlstrom.com], and [Christos Kozyrakis|http://csl.stanford.edu/~christos].  * ''Workshop on Transactional Memory Workloads'', Ottawa, Canada, June 10, 2006.     h3. [Reducing generational copy reserve overhead with fallback compaction|http://doi.acm.org/10.1145/1133956.1133960]     * McGachey P, Hosking AL.  * Proceedings of the 4th ACM SIGPLAN International Symposium on Memory Management (ISMM):17-28 (Ottawa, Canada, June 2006), ACM.     h3. [Hybrid Optimizations: Which Optimization Algorithm to Use?|http://homepages.inf.ed.ac.uk/jcavazos/cc-2006.pdf]     * [John Cavazos|http://www.inf.ed.ac.uk/people/staff/John_Cavazos.html], [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss], and [Michael F.P. O'Boyle|http://www.dcs.ed.ac.uk/home/mob]  * ''15th International Conference on Compiler Construction (CC 2006)'', Vienna, Austria, March 30 - 31, 2006.     h3. [Space-Efficient 64-bit Java Objects through Selective Typed Virtual Addressing|http://www.elis.ugent.be/~kvenster/papers/VenstermansKris_SelectiveTypedVirtualAddressing.pdf]     * [Kris Venstermans|http://www.elis.ugent.be/~kvenster/research.html], [Lieven Eeckhout|http://www.elis.ugent.be/~leeckhou], and [Koen De Bosschere|http://www.elis.ugent.be/~kdb].  * ''The 4th Annual International Symposium on Code Generation and Optimization (CGO)'', New York. March 26-29, 2006.     h3. [Dynamic Class Hierarchy Mutation|http://www.ece.wisc.edu/~pharm/papers/cgo4.pdf]     * [Lixin Su|http://homepages.cae.wisc.edu/~lsu] and [Mikko H Lipasti|http://www.engr.wisc.edu/ece/faculty/lipasti_mikko.html].  * ''The 4th Annual International Symposium on Code Generation and Optimization (CGO)'', New York. March 26-29, 2006.     h3. [Online Phase Detection Algorithms|http://www.research.ibm.com/people/h/hind/papers.html#cgo06]     * [Priya Nagpurkar|http://www.cs.ucsb.edu/~priya], [Michael Hind|http://www.research.ibm.com/people/h/hind], [Chandra Krintz|http://www.cs.ucsb.edu/~ckrintz], [Peter F. Sweeney|http://www.research.ibm.com/people/p/pfs], and V.T. Rajan.  * ''The 4th Annual International Symposium on Code Generation and Optimization (CGO)'', New York. March 26-29, 2006.     h3. [The Common Case Transactional Behavior of Multithreaded Programs|http://tcc.stanford.edu/publications/tcc_hpca2006.pdf]     * [JaeWoong Chung|http://www.stanford.edu/~jwchung], [Chi Cao Minh|http://www.stanford.edu/~caominh], [Hassan Chafi|http://www.stanford.edu/~hchafi], [Austen McDonald|http://www.stanford.edu/~austenmc], [Brian D. Carlstrom|http://carlstrom.com], [Christos Kozyrakis|http://csl.stanford.edu/~christos], and [Kunle Olukotun|http://www-hydra.stanford.edu/~kunle].  * ''12th International Symposium on High Performance Computer Architecture (HPCA)'', Austin, Texas, USA, February 11-15, 2006.     h3. [64-bit versus 32-bit Virtual Machines for Java|http://www3.interscience.wiley.com/cgi-bin/fulltext/111082816/PDFSTART]     * [Kris Venstermans|http://www.elis.ugent.be/~kvenster/research.html], [Lieven Eeckhout|http://www.elis.ugent.be/~leeckhou], and [Koen De Bosschere|http://www.elis.ugent.be/~kdb]  * ''Software: Practice and Experience'', January 2006.     h3. Compiler Techniques for High Performance Sequentially Consistant Java Programs.     * Zehra Sura, Xing Fang, [Chi-Leung Wong|http://polaris.cs.uiuc.edu/~cwong1], \[ Samuel P. Midkiff\|http://www.research.ibm.com/people/m/midkiff\], [Jaejin Lee|http://www.cse.msu.edu/~jlee], [David Padua|http://polaris.cs.uiuc.edu/~padua].  * ''11th International Workshop on Compilers for Parallel Computers (CPC 2006)'', A Coruna, Spain. January 2006.     h3. Automatic Tuning of Inlining Heuristics     * [John Cavazos|http://www.inf.ed.ac.uk/people/staff/John_Cavazos.html] and [Michael F.P. O'Boyle|http://www.dcs.ed.ac.uk/home/mob]  * ''11th International Workshop on Compilers for Parallel Computers (CPC 2006)'', A Coruna, Spain. January 2006.     h2. 2005        h3. [Loop Parallelisation for the Jikes RVM|http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=1578860]     * [Jisheng Zhao|http://www.cs.manchester.ac.uk/apt/people/jzhao], [Ian Rogers|http://www.cs.man.ac.uk/~irogers], [Chris Kirkham|http://www.cs.manchester.ac.uk/apt/people/ckirkham], and [Ian Watson|http://www.cs.manchester.ac.uk/apt/people/iwatson].  * ''6th Parallel and Distributed Computing, Applications and Technologies (PDCAT)'', Dalian, China, December 5-8, 2005.     h3. [Continuous Path and Edge Profiling|http://www.cs.utexas.edu/~mikebond/pep-micro-2005.pdf]     * [Michael D. Bond|http://www.cs.utexas.edu/users/mikebond] and [Kathryn S. McKinley|http://www.cs.utexas.edu/users/mckinley].  * 38th International Symposium on Microarchitecture (MICRO), Barcelona, November 14-16, 2005.  * Source code available on the [Research Archive].     h3. [Garbage Collection Hints|http://www.buytaert.net/files/hipeac05-paper.pdf]     * [Dries Buytaert|http://www.buytaert.net/], [Kris Venstermans|http://www.elis.ugent.be/~kvenster/research.html], [Lieven Eeckhout|http://www.elis.ugent.be/~leeckhou], and [Koen De Bosschere|http://www.elis.ugent.be/~kdb].  * ''International Conference on High Performance Embedded Architectures & Compilers (HIPEAC'05)'', Lecture Notes in Computer Science Volume 3793, Springer-Verlag. Barcelona, Spain, November 2005.     h3. Towards Continuous Usage Control on Grid Computational Services.     * Fabio Martinelli, Paolo Mori, and Anna Vaccarelli  * ''International Conference on Autonomic and Autonomous Systems and International Conference on Networking and Services'', Papeete, Tahiti, October 23-28, 2005.     h3. [A Platform to Use Hardware Performance Counters for Dynamic Compilation|http://www.ece.lsu.edu/lcpc2005/papers/lcpc05-paper-22.pdf]     * [Florian Schneider|http://www.inf.ethz.ch/personal/florian] and [Thomas Gross|http://www.lst.inf.ethz.ch/people/trg.html].  * ''Languages and Compilers for Parallel Computing (LCPC)'', IBM, Hawthorne, New York, October 20-21, 2005.''     h3. [Are Patches Cutting it? Structuring Distribution within a JVM using Aspects|http://www.cs.uvic.ca/~sweng/baldwin_cascon2005.pdf#search="jikes rvm"]     * Jennifer Baldwin, Yvonne Coady  * ''2005 conference of the Centre for Advanced Studies on Collaborative research (CASCON)'', Toronto, Canada, Oct 17-20, 2005.     h3. [Automating Vertical Profiling|http://www-plan.cs.colorado.edu/diwan/oopsla05.pdf]     * [Matthias Hauswirth|http://www.cs.colorado.edu/~hauswirt], [Amer Diwan|http://www.cs.colorado.edu/~diwan], [Peter F. Sweeney|http://www.research.ibm.com/people/p/pfs], and Michael Mozer.  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005.     h3. Improving Virtual Machine Performance Using a Cross-Run Repository     * [Matthew Arnold|http://www.research.ibm.com/people/m/marnold], [Adam Welc|http://www.cs.purdue.edu/homes/welc], and V.T. Rajan.  \*''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005.     h3. [Quantifying the Performance of Garbage Collection vs. Explicit Memory Management|http://www-cs.canisius.edu/~hertzm/gcmalloc-oopsla-2005.pdf]     * [Matthew Hertz|http://www-cs.canisius.edu/~hertzm] and [Emery Berger|http://www.cs.umass.edu/~emery].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005.     h3. Quantifying the Performance of Garbage Collection vs.Explicit Memory Management     * [Matthew Hertz|http://www-cs.canisius.edu/~hertzm] and [Emery Berger|http://www.cs.umass.edu/~emery].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005.     h3. [Runtime Specialization With Optimistic Heap Analysis|http://www.cs.berkeley.edu/~bodik/research/oopsla05-specialization.pdf]     * [Ajeet Shanker|http://www.cs.berkeley.edu/~aj], [Rastislav Bodik|http://www.cs.berkeley.edu/~bodik], [Subramanya Sastry|http://www.cs.wisc.edu/~sastry], and [James Smith|http://www.engr.wisc.edu/ece/faculty/smith_james.html].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005.     h3. [Safe Futures for Java|http://www.cs.purdue.edu/homes/suresh/papers/oopsla05.pdf]     * [Adam Welc|http://www.cs.purdue.edu/homes/welc], [Suresh Jagannathan|http://www.cs.purdue.edu/homes/suresh], and [Antony L. Hosking|http://www.cs.purdue.edu/~hosking].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', San Diego, California, October 16-20, 2005.     h3. [Transactional Execution of Java Programs|http://tcc.stanford.edu/publications/tcc_scool2005.pdf]     * [Brian D. Carlstrom|http://carlstrom.com], [JaeWoong Chung|http://www.stanford.edu/~jwchung], [Hassan Chafi|http://www.stanford.edu/~hchafi], [Austen McDonald|http://www.stanford.edu/~austenmc], [Chi Cao Minh|http://www.stanford.edu/~caominh], [Lance Hammond|http://www.mavam.com/lance], [Christos Kozyrakis|http://csl.stanford.edu/~christos], and [Kunle Olukotun|http://www-hydra.stanford.edu/~kunle].  * ''OOPSLA 2005 Workshop on Synchronization and Concurrency in Object-Oriented Languages (SCOOL)'', San Diego, California, USA, October 16, 2005.     h3. [Automatic Tuning of Inlining Heuristics|http://www.anc.ed.ac.uk/machine-learning/colo/inlining.pdf]     * [John Cavazos|http://www.inf.ed.ac.uk/people/staff/John_Cavazos.html] and [Michael F.P. O'Boyle|http://www.dcs.ed.ac.uk/home/mob]  * ''SC\|05 (Supercomputing): International Conference for High Performance Computing, Networking, and Storage'', Seattle WA, November 12-18, 2005.     h3. [Testing in Resource Constrained Execution Environments|http://cs.allegheny.edu/wiki/gkapfham/81]     * [Gregory M. Kapfhammer|http://cs.allegheny.edu/~gkapfham], [Mary Lou Soffa|http://www.cs.virgina.edu/~soffa], and [Daniel Mosse|http://www.cs.pitt.edu/~mosse]  * ''ACM/IEEE International Conference on Automated Software Engineering'', LongBeach, CA, November 7-11, 2005.     h3. [JikesNode and PearColator: A Jikes RVM Operating System and Legacy Code Execution Environment|ftp://ftp.cs.man.ac.uk/pub/apt/papers/irogers_plos05.pdf]     * [Ian Rogers|http://www.cs.man.ac.uk/~irogers] and [Chris Kirkham|http://www.cs.manchester.ac.uk/apt/people/ckirkham].  * ''The 2nd ECOOP Workshop on Programming Languages and Operating Systems (ECOOP-PLOS '05)'', Glasgow, UK, July 26, 2005.     h3. [An Automatic Runtime DOALL Loop Parallelisation Optimization for Java|ftp://ftp.cs.man.ac.uk/pub/apt/papers/irogers_poosc05.pdf]     * [Ian Rogers|http://www.cs.manchester.ac.uk/apt/people/irogers], [Jisheng Zhao|http://www.cs.manchester.ac.uk/apt/people/jzhao], [Chris Kirkham|http://www.cs.manchester.ac.uk/apt/people/ckirkham], [Ian Watson|http://www.cs.manchester.ac.uk/apt/people/iwatson].  * ''Parallel/High-Performance Object-Oriented Scientific Computing (POOSC '05)'', Glasgow, UK, July 25, 2005.     h3. [Characterization of TCC on Chip-Multiprocessors|http://tcc.stanford.edu/publications/tcc_pact2005.pdf]     * [Austen McDonald|http://www.stanford.edu/~austenmc], [JaeWoong Chung|http://www.stanford.edu/~jwchung], [Hassan Chafi|http://www.stanford.edu/~hchafi], [Chi Cao Minh|http://www.stanford.edu/~caominh], [Brian D. Carlstrom|http://carlstrom.com], [Lance Hammond|http://www-lance.stanford.edu], [Christos Kozyrakis|http://csl.stanford.edu/~christos], and [Kunle Olukotun|http://www-hydra.stanford.edu/~kunle].  \*''The Fourteenth International Conference on Parallel Architectures and Compilation Techniques (PACT '05)'', Saint Louis, Missouri, September 19, 2005.     h3. [FPGA-Aware Garbage Collection in Java|http://escher.elis.ugent.be/publ/Edocs/DOC/P105_110.pdf]     * [Faes, Ph.|http://www.elis.UGent.be/~pfaes]; Christiaens, M.; [Buytaert, D. |http://www.buytaert.net/]; Stroobandt, D.  * ''IEEE 2005 International Conference on Field Programmable Logic and Applications (FPL).'', August 2005.     h3. [Garbage Collection Without Paging|http://www-ali.cs.umass.edu/~hertz/bc-pldi-2005.pdf]     * [Matthew Hertz|http://www-cs.canisius.edu/~hertzm], [Yi Feng|http://www.cs.umass.edu/~yifeng], and [Emery Berger|http://www.cs.umass.edu/~emery].  * ''ACM SIGPLAN Conference on Programming Languages Design and and Implementation (PLDI '05)'', Chicago, Il, June 13, 2005     h3. An Execution Layer for Aspect-Oriented Programming Languages     * [Michael Haupt|http://www.st.informatik.tu-darmstadt.de/public/StaffDetail.jsp?id=3], [Mira Mezini|http://www.st.informatik.tu-darmstadt.de/public/StaffDetail.jsp?id=2], [Christoph Bockisch|http://www.cbockisch.de], Tom Dinelaker, Michael Eichberg, and Michael Krebs  * ''ACM SIGPLAN/USENIX Conference on Virtual Execution Environments (VEE '05)'', Chicago, Il, June 11-12, 2005     h3. Immutability Specification and its Application     * [Igor Pechtchanski|http://www.cs.nyu.edu/phd_students/pechtcha] and [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar].  * ''Concurrency and Computation: Practice and Experience'', Vol 17, No 5-6, April/May 2005.     h3. Age-Oriented Concurrent Garbage Collection     * Harel Paz, [Erez Petrank|http://www.cs.technion.ac.il/~erez], and [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn].  * ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Edinburgh, UK, April 2005.     h3. An Efficient On-The-Fly Cycle Collection     * Harel Paz, [Erez Petrank|http://www.cs.technion.ac.il/~erez], [David F. Bacon|http://www.research.ibm.com/people/d/dfb], Eliot K. Kolodner, and V.T. Rajan.  * ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Edinburgh, UK, April 2005.     h3. Jazz: A Tool for Demand-Driven Structural Testing     * Jonathan Misurda, Jim Clause, Juliya Reed, [Bruce R. Childers|http://www.cs.pitt.edu/~childers], and [Mary Lou Soffa|http://www.cs.virgina.edu/~soffa].  * ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Edinburgh, UK, April 2005.     h3. A Study of Type Analysis for Speculative Method Inlining in a JIT Environment     * [Feng Qian|http://www.sable.mcgill.ca/~fqian] and [Laurie Hendren|http://www-acaps.cs.mcgill.ca/~hendren].  * ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Edinburgh, UK, April 2005.     h3. Using Interprocedural Side-effect Information in JIT Optimizations     * [Anatole Le|http://www.sable.mcgill.ca/~ale44], [Ondrej Lhotak|http://www.sable.mcgill.ca/~olhota], and [Laurie Hendren|http://www-acaps.cs.mcgill.ca/~hendren].  * ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Edinburgh, UK, April 2005.     h3. [Effective Adaptive Computing Environment Management via Dynamic Optimization|http://www.ece.utexas.edu/projects/ece/lca/ps/acem_cgo05.pdf]     * [Shiwen Hu|http://www.ece.utexas.edu/~hushiwen], [Madhavi Valluri|http://www.ece.utexas.edu/~valluri], [Lizy K. John|http://www.ece.utexas.edu/~ljohn]  * ''2005 International Symposium on Code Generation and Optimization'', San Jose, California, March 2005.     h3. [Collecting and Exploiting High-Accuracy Call Graph Profiles in Virtual Machines|http://www.research.ibm.com/people/d/dgrove/papers/cgo05.html]     * [Matthew Arnold|http://www.research.ibm.com/people/m/marnold/] and [David Grove|http://www.research.ibm.com/people/d/dgrove/]  * ''2005 International Symposium on Code Generation and Optimization'', San Jose, California, March 2005.  * '''(Source code available as of version 2.3.5 of Jikes RVM.)'''     {anchor:rvmoss}     h3. [The Jikes Research Virtual Machine project: Building an open-source research community|http://www.research.ibm.com/journal/sj/442/alpern.pdf]     * B. Alpern, [S. Augart|http://www.augart.com], [S.M. Blackburn|http://cs.anu.edu.au/~Steve.Blackburn], M. Butrico, A. Cocchi, [P Cheng|http://www.research.ibm.com/people/p/perryche], J. Dolby, [S. Fink|http://www.research.ibm.com/people/s/sfink], [D. Grove|http://www.research.ibm.com/people/d/dgrove], [M. Hind|http://www.research.ibm.com/people/h/hind], [K.S. McKinley|http://www.cs.utexas.edu/users/mckinley], M. Mergen, [J.E.B. Moss|http://ali-www.cs.umass.edu/~moss], T. Ngo, [V. Sarkar|http://www.research.ibm.com/people/v/vsarkar], and M. Trapp.  * ''[IBM Systems Journal|http://www.research.ibm.com/journal/sj]'', Vol 44, No 2, 2005.     h2. 2004        h3. [Anticipation-Based Partial Redundancy Elimination for Static Single Assignment Form|ftp://ftp.cs.purdue.edu/pub/hosking/papers/a-ssapre.pdf]     * [Thomas VanDrunen|http://cs.wheaton.edu/~tvandrun] and [Antony Hosking|http://www.cs.purdue.edu/~hosking].  * ''Software - Practice and Experience'', 34(15):1413-1439, December 2004.     h3. An Inlining Technique in Jikes RVM to Improve Performance     * Ritesh Kumar, Ragesh Jaiswal, and Sanjeev K. Aggarwal.  * ''Advances in Computer Science and Technology'', St. Thomas, Virgin Islands, November 2004.     h3. [Finding Your Cronies: Static Analysis for Dynamic Object Colocation|http://www.cs.utexas.edu/~sammy/cronies-oopsla-2004.pdf]     * [Samuel Z. Guyer|http://www.cs.utexas.edu/users/sammy] and [Kathryn McKinley|http://www.cs.utexas.edu/users/mckinley].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Vancouver, British Columbia, Canada, October 2004.     h3. [MC2: High-Performance Garbage Collection for Memory-Constrained Environments|http://www.cs.umass.edu/~emery/pubs/04-15.pdf]     * Narendran Sachindran, [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss], and [Emery Berger|http://www.cs.umass.edu/~emery].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Vancouver, British Columbia, Canada, October 2004.     h3. [Method-Level Phase Behavior in Java Workloads|http://www.buytaert.net/files/oopsla04-paper.pdf]     * [Andy Georges|http://www.elis.ugent.be/~ageorges], [Dries Buytaert|http://www.buytaert.net], [Lieven Eeckhout|http://www.elis.ugent.be/~leeckhou], and [Koen De Bosschere|http://www.elis.ugent.be/~kdb].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Vancouver, British Columbia, Canada, October 2004.     h3. [Program Locality: The Garbage Collection Advantage|http://www.cs.utexas.edu/users/mckinley/papers.html]     * [Xianglong Huang|http://www.cs.utexas.edu/users/xlhuang], [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn], [Kathryn McKinley|http://www.cs.utexas.edu/users/mckinley], [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss], [Zhenlin Wang|http://www.cs.mtu.edu/~zlwang], and [Perry Cheng|http://www.research.ibm.com/people/p/perryche].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Vancouver, British Columbia, Canada, October 2004.     h3. [Vertical Profiling: Understanding the Behavior of Object-Oriented Applications|http://www-plan.cs.colorado.edu/diwan/vertical-prof-oopsla.pdf]     * [Matthias Hauswirth|http://www.cs.colorado.edu/~hauswirt], [Peter F. Sweeney|http://www.research.ibm.com/people/p/pfs], [Amer Diwan|http://www.cs.colorado.edu/~diwan], and [Michael Hind|http://www.research.ibm.com/people/h/hind].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Vancouver, British Columbia, Canada, October 2004.     h3. [Automatic Heap Sizing: Taking Real Memory Into Account|http://www.cs.umass.edu/~emery/pubs/automatic-heapsize-ismm2004.pdf]     * [Ting Yang|http://www.cs.umass.edu/~tingy], [Emery Berger|http://www.cs.umass.edu/~emery], [Matthew Hertz|http://www-cs.canisius.edu/~hertzm], Scott F. Kaplan, and [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss].  * ''ACM SIGPLAN International Symposium on Memory Management (ISMM '04)'', Vancouver, British Columbia, Canada, October 2004.     h3. [Barriers: Friend or Foe?|http://cs.anu.edu.au/~Steve.Blackburn/pubs/papers/wb-ismm-2004.pdf]     * [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn], and [Antony Hosking|http://www.cs.purdue.edu/~hosking].  * ''ACM SIGPLAN International Symposium on Memory Management (ISMM '04)'', Vancouver, British Columbia, Canada, October 2004.     h3. [Dynamic Object Sampling for Pretenuring|http://cs.anu.edu.au/~Steve.Blackburn/pubs/abstracts.html#dpt-ismm-2004]     * [Maria Jump|http://www.cs.utexas.edu/users/mjump], [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn], and [Kathryn McKinley|http://www.cs.utexas.edu/users/mckinley].  * ''ACM SIGPLAN International Symposium on Memory Management (ISMM '04)'', Vancouver, British Columbia, Canada, October 2004.     h3. [Dynamic Selection of Application-Specific Garbage Collectors|http://www.cs.ucsb.edu/~ckrintz/papers/p22-soman.pdf]     * [Sunil Soman|http://www.cs.ucsb.edu/~sunils], [Chandra Krintz|http://www.cs.ucsb.edu/~ckrintz], and [David F. Bacon|http://www.research.ibm.com/people/d/dfb].  * ''ACM SIGPLAN International Symposium on Memory Management (ISMM '04)'', Vancouver, British Columbia, Canada, October 2004.     h3. [Write Barrier Elision for Concurrent Garbage Collectors|http://www.research.ibm.com/people/d/dfb/publications.html#Vechev04Write]     * \[Martin Vechev<a/> and [http://www.research.ibm.com/people/d/dfb David F. Bacon|http://www.cl.cam.ac.uk/users/mv270].  * ''ACM SIGPLAN International Symposium on Memory Management (ISMM '04)'', Vancouver, British Columbia, Canada, October 2004.     h3. Improving Grid Service Security with Fine Grain Policies     * Fabrizio Baiardi, Fabio Martinelli, Paolo Mori, and Anna Vaccarelli  * ''On the Move to Meaningful Internet System 2004: OTM Workshops, Lecture Notes in Computer Science'' 3292: Springer Verlag (2004)     h3. [Virtual Machine Support for Aspects with Advice Instance Tables|http://www.st.informatik.tu-darmstadt.de/database/publications/data/JFDLPA04.pdf?id=102]     * [Michael Haupt|http://www.st.informatik.tu-darmstadt.de/public/StaffDetail.jsp?id=3] and [Mira Mezini|http://www.st.informatik.tu-darmstadt.de/public/StaffDetail.jsp?id=2].  * ''First French Workshop on Aspect-Oriented Programming'', Paris, France, September 2004.     h3. [Micro-Measurements for Dynamic Aspect-Oriented Systems|http://www.st.informatik.tu-darmstadt.de/database/publications/data/Nodee-2004.pdf?id=95]     * [Michael Haupt|http://www.st.informatik.tu-darmstadt.de/public/StaffDetail.jsp?id=3] and [Mira Mezini|http://www.st.informatik.tu-darmstadt.de/public/StaffDetail.jsp?id=2].  * ''Net.ObjectDays 2004 (NODe)'', Erfurt, Germany, September 2004.     h3. The Use of Traces for Inlining in Java Programs     * [Borys J. Bradel|http://www.eecg.toronto.edu/~bradel] and [Tarek S. Abdelrahman|http://www.eecg.toronto.edu/~tsa].  * ''Languages and Compilers for Parallel Computing (LCPC)'', Purdue University, Indiana, September 2004.     h3. [Online Impact Analysis via Dynamic Compilation Technology|http://www.cis.udel.edu/~hiper/passages/papers/BreechEA-ICSM04.pdf]     * [Ben Breech|http://www.cis.udel.edu/~breech], [Anthony Danalis|http://www.cis.udel.edu/~danalis], Stacey Shindo, and [Lori Pollock|http://www.cis.udel.edu/~pollock]  * ''International Conference on Software Maintenance (ICSM)'', September 2004.     h3. [Partial Redundancy Elimination for Global Value Numbering|ftp://ftp.cs.purdue.edu/pub/hosking/papers/vandrunen.pdf]     * [Thomas VanDrunen|http://cs.wheaton.edu/~tvandrun], ''PhD Thesis, Purdue University'', August 2004.     h3. [Preemption-Based Avoidance of Priority Inversion for Java|http://www.cs.purdue.edu/homes/welc/publications/icpp04/icpp04.pdf]     * [Adam Welc|http://www.cs.purdue.edu/homes/welc], [Antony L. Hosking|http://www.cs.purdue.edu/~hosking], and [Suresh Jagannathan|http://www.cs.purdue.edu/homes/suresh].  * ''International Conference on Parallel Programming (ICPP'04)'', Montreal, Canada, August 2004.     h3. [Value-Based Partial Redundancy Elimination|ftp://ftp.cs.purdue.edu/pub/hosking/papers/cc04.pdf]     * [Thomas VanDrunen|http://cs.wheaton.edu/~tvandrun] and [Antony Hosking|http://www.cs.purdue.edu/~hosking].  * ''International Conference on Compiler Construction, European Joint Conferences on Theory and Practice of Software'', Barcelona, Spain, June 2004.     h3. [Adaptive Tuning of Reserved Space in an Appel Collector|http://springerlink.metapress.com/app/home/contribution.asp?wasp=2g54ylwyxj2xu6t7cqwy&referrer=parent&backto=issue,25,27;journal,10,1595;linkingpublicationresults,1:105633,1]     * Jose Manuel Velasco, Katzalin Olcoz, and [Francisco Tirado|http://www.dacya.ucm.es/paco].  * ''European Conference on Object-Oriented Programming (ECOOP'04)'', Oslo, Norway, June 2004.     h3. [Pointer Analysis in the Presence of Dynamic Class Loading|http://www.research.ibm.com/people/h/hirzel/#ecoop04-pointers]     * [Martin Hirzel|http://www.research.ibm.com/people/h/hirzel], [Amer Diwan|http://www.cs.colorado.edu/~diwan], and [Michael Hind|http://www.research.ibm.com/people/h/hind].  * ''European Conference on Object-Oriented Programming (ECOOP'04)'', Oslo, Norway, June 2004.     h3. [Transactional Monitors for Concurrent Objects|http://www.cs.purdue.edu/homes/welc/publications/ecoop04/ecoop04.pdf]     * [Adam Welc|http://www.cs.purdue.edu/homes/welc], [Suresh Jagannathan|http://www.cs.purdue.edu/homes/suresh], [Antony L. Hosking|http://www.cs.purdue.edu/~hosking].  * ''European Conference on Object-Oriented Programming (ECOOP'04)'', Oslo, Norway, June 2004.     h3. [Visualization and Analysis of Phased Behavior in Java Programs|http://www.cs.ucsb.edu/~ckrintz/papers/pppj04-phases.pdf]     * [Priya Nagpurka|http://www.cs.ucsb.edu/~priya] and [Chandra Krintz|http://www.cs.ucsb.edu/~ckrintz].  * ''ACM International Conference on the Principles and Practice of Programming in Java (PPPJ)'', Las Vegas, NV, June 2004.     h3. [Myths and Reality: The Performance Impact of Garbage Collection|http://cs.anu.edu.au/~Steve.Blackburn/pubs/abstracts#mmtk-sigmetrics-2004]     * [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn], [Perry Cheng|http://www.research.ibm.com/people/p/perryche], and [Kathryn McKinley|http://www.cs.utexas.edu/users/mckinley].  * ''Sigmetrics - Performance 2004, Joint International Conference on Measurement and Modeling of Computer Systems'', New York, New York, June 2004.  * '''(Source code available as of version 2.3.2 of Jikes RVM.)'''     h3. Adaptive Code Unloading for Resource-Constrained JVMs     * [Lingli Zhang|http://www.cs.ucsb.edu/~lingli_z] and [Chandra Krintz|http://www.cs.ucsb.edu/~ckrintz].  * ''ACM SIGPLAN Conference on Languages, Compilers, and Tools for Embedded Systems (LCTES '04) and Software and Compilers for Embedded Systems (SCOPES '04)'', Washington DC, June 2004.     h3. [Inducing Heuristics to Decide Whether to Schedule|http://ali-www.cs.umass.edu/~cavazos/papers/pldi.pdf]     * [John Cavazos|http://ali-www.cs.umass.edu/~cavazos] and [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss].  * ''ACM SIGPLAN Conference on Programming Languages Design and and Implementation (PLDI '04)'', Washington DC, June 2004.     h3. [Oil and Water: High Performance Garbage Collection in Java with MMTk|http://cs.anu.edu.au/~Steve.Blackburn/pubs/abstracts#mmtk-icse-2004]     * [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn], [Perry Cheng|http://www.research.ibm.com/people/p/perryche], and [Kathryn McKinley|http://www.cs.utexas.edu/users/mckinley].  * ''ICSE 2004, 26th International Conference on Software Engineering'', Edinburgh, Scotland, May 2004.  * '''(Source code available as of version 2.3.2 of Jikes RVM.)'''     h3. [Towards Dynamic Interprocedural Analysis in JVMs|http://www.sable.mcgill.ca/publications/papers/#vm2004]     * [Feng Qian|http://www.sable.mcgill.ca/~fqian] and [Laurie Hendren|http://www-acaps.cs.mcgill.ca/~hendren].  * ''USENIX 3rd Virtual Machine Research and Technology Symposium (VM'04)'', San Jose, California, May, 2004.     h3. [Using Hardware Performance Monitors to Understand the Behavior of Java Application|http://www.research.ibm.com/people/h/hind/papers.html#vm04]     * [Peter F. Sweeney|http://www.research.ibm.com/people/p/pfs], [Matthias Hauswirth|http://www.cs.colorado.edu/~hauswirt], [Brendon Cahoon|http://www.research.ibm.com/people/b/brendon], [Perry Cheng|http://www.research.ibm.com/people/p/perryche], [Amer Diwan|http://www.cs.colorado.edu/~diwan], [David Grove|http://www.research.ibm.com/people/d/dgrove], and [Michael Hind|http://www.research.ibm.com/people/h/hind].  * ''USENIX 3rd Virtual Machine Research and Technology Symposium (VM'04)'', San Jose, California, May, 2004.     h3. [JVM Independent Replay in Java|http://www2.inf.ethz.ch/~schuppan/publications.html]     * [Viktor Schuppan|http://www2.inf.ethz.ch/~schuppan], Marcel Baur, and [Armin Biere|http://www2.inf.ethz.ch/~biere].  * ''Fourth Workshop on Runtime Verification (RV'04)'', Barcelona, Spain, April, 2004.     h3. [Transactional Monitors for Concurrent Objects|http://www.cs.purdue.edu/homes/welc/publications/esop04/esop04.pdf]     * [Jan Vitek|http://www.cs.purdue.edu/homes/jv], [Suresh Jagannathan|http://www.cs.purdue.edu/homes/suresh], [Adam Welc|http://www.cs.purdue.edu/homes/welc], and [Antony L. Hosking|http://www.cs.purdue.edu/~hosking].  * ''European Symposium on Programming (ESOP'04)'', Barcelona, Spain, March, 2004.     h3. [Virtual Machine Support for Dynamic Join Points|http://www.st.informatik.tu-darmstadt.de/database/publications/data/Streamloom-1.pdf?id=80]     * [Christoph Bockisch|http://www.cbockisch.de], [Michael Haupt|http://www.st.informatik.tu-darmstadt.de/public/StaffDetail.jsp?id=3], [Mira Mezini|http://www.st.informatik.tu-darmstadt.de/public/StaffDetail.jsp?id=2],and [Klaus Ostermann|http://www.st.informatik.tu-darmstadt.de/public/StaffDetail.jsp?id=8].  * ''International Conference on Aspect-Oriented Software Development (AOSDP'04)'', Lancaster, UK, March, 2004.     h2. 2003        h3. [The Metronome: A Simpler Approach to Garbage Collection in Real-time Systems|http://www.research.ibm.com/people/d/dfb/papers/Bacon03Metronome.pdf]     * [David F. Bacon|http://www.research.ibm.com/people/d/dfb], [Perry Cheng|http://www.research.ibm.com/people/p/perryche], and V.T. Rajan.  * ''Workshop on Java Technologies for Real-Time and Embedded Systems'', Catania, Sicily, November 2003.     h3. [Ulterior Reference Counting: Fast Garbage Collection without a Long Wait|http://cs.anu.edu.au/~Steve.Blackburn/pubs/abstracts.html#urc-oopsla-2003]     * [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn] and [Kathryn McKinley|http://www.cs.utexas.edu/users/mckinley].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Anaheim, California, October 2003.     h3. [An On-the-Fly Mark and Sweep Garbage Collector Based on Sliding Views|http://www.cs.technion.ac.il/~erez/Papers/ms-sliding-views.ps]     * [Hezi Azatchi|http://www.cs.technion.ac.il/People/GraduateStudents/hezia.html], Yossi Levanoni, Harel Paz, and [Erez Petrank|http://www.cs.technion.ac.il/~erez].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Anaheim, California, October 2003.     h3. MarkCopy: Fast Copying GC with Less Space Overhead     * Narendran Sachindran and [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Anaheim, California, October 2003.     h3. [Connectivity-Based Garbage Collection|http://www.cs.colorado.edu/~diwan/cbgc.pdf]     * [Martin Hirzel|http://www.research.ibm.com/people/h/hirzel], [Amer Diwan|http://www.cs.colorado.edu/~diwan], and [Matthew Hertz|http://www-cs.canisius.edu/~hertzm].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Anaheim, California, October 2003.     h3. [How Java Programs Interact with Virtual Machines at the Microarchitectural Level|http://www.elis.ugent.be/~leeckhou/papers/oopsla03.pdf]     * [Lieven Eeckhout|http://www.elis.ugent.be/~leeckhou], [Andy Georges|http://www.elis.ugent.be/~ageorges], and [Koen De Bosschere|http://www.elis.ugent.be/~kdb].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Anaheim, California, October 2003.     h3. [Transparent Fault-Tolerant Java Virtual Machine|http://www.cs.technion.ac.il/~alon/publications/srds2003.pdf]     * [Roy Friedman|http://www.cs.technion.ac.il/~roy] and [Alon Kama|http://www.cs.technion.ac.il/~alon].  * ''22nd IEEE Symposium on Reliable Distributed Systems (SRDS)'', Florence, Italy, October, 2003.     h3. [JToe: A Java API for Object Exchange|http://www.labri.fr/~grange/documents/parco2003.html]     * Serge Chaumette, [Pascal Grange|http://www.labri.fr/Perso/~grange], Benoit Metrot, and Pierre Vigneras.  * ''Parallel Computing/ParCo 2003'', September 2003.     h3. High-performance Java code for computation fluid dynamics     * C. J. Riley, [Sid Chatterjee|http://www.cs.unc.edu/~sc], and R. Biswas.  * ''Concurrency and Computation: Practice and Experience'', 15:395-415, 2003.     h3. [Detecting Malicious Java Code Using Virtual Machine Auditing|http://www.usenix.org/events/sec03/tech/soman.html]     * [Sunil Soman|http://www.cs.ucsb.edu/~sunils], [Chandra Krintz|http://www.cs.ucsb.edu/~ckrintz] and Giovanni Vigna.  * ''12th USENIX Security Symposium'', Washington D.C., August 2003.     h3. [Controlling Fragmentation and Space Consumption in the Metronome, a Real-time Garbage Collector for Java|http://www.research.ibm.com/people/d/dfb/papers/Bacon03Controlling.pdf]     * [David F. Bacon|http://www.research.ibm.com/people/d/dfb], [Perry Cheng|http://www.research.ibm.com/people/p/perryche], and V.T. Rajan.  * ''Conference on Languages, Compilers, and Tools for Embedded Systems'', San Diego, California, June 2003.     h3. [Designing a Distributed JVM on a Cluster|http://djvm.anu.edu.au/publications/djvm_design.pdf]     * [John N Zigman|http://cs.anu.edu.au/~John.Zigman] and [Ramesh Sanakaranarayana|http://cs.anu.edu.au/~ramesh].  * ''17th European Simulation Multiconference'', Nottingham, United Kingdom, June 2003.     h3. [Integrating Generations with Advanced Reference Counting Garbage Collectors|http://www.cs.technion.ac.il/~erez/Papers/AzaPet-TR.ps]     * [Hezi Azatchi|http://www.cs.technion.ac.il/People/GraduateStudents/hezia.html] and [Erez Petrank|http://www.cs.technion.ac.il/~erez].  * ''12th International Conference on Compiler Construction'', Warsaw, Poland, April 2003.     h3. [Just-In-Time Aspects: Efficient Dynamic Weaving for Java|http://prose.ethz.ch/webthings/aosd03.ps]     * [Andrei Popovici|http://www.inf.ethz.ch/personal/popovici], [Gustavo Alonso|http://www.inf.ethz.ch/personal/alonso] and [Thomas Gross|http://www.lst.inf.ethz.ch/people/trg.html].  * ''2nd International Conference on Aspect-Oriented Software Development'', Boston, Massachussetts, March 2003.     h3. [Design, Implementation and Evaluation of Adaptive Recompilation with On-Stack Replacement|http://www.research.ibm.com/people/s/sfink/papers/cgo03.ps.gz]     * [Stephen Fink|http://www.research.ibm.com/people/s/sfink], and [Feng Qian|http://www.sable.mcgill.ca/~fqian].  * ''International Symposium on Code Generation and Optimization'', San Francisco, California, March 2003.  * '''(Source code available as of version 2.2.1 of Jikes RVM.)'''     h3. [Adaptive Online Context-Sensitive Inlining|http://www.research.ibm.com/people/d/dgrove/papers/cgo03.html]     * [Kim Hazelwood|http://www.eecs.harvard.edu/~cettei] and [David Grove|http://www.research.ibm.com/people/d/dgrove].  * ''International Symposium on Code Generation and Optimization'', San Francisco, California, March 2003.     h3. [Coupling On-Line and Off-Line Profile Information to Improve Program Performance|http://www.cs.ucsb.edu/~ckrintz/abstracts/coupling.html]     * [Chandra Krintz|http://www.cs.ucsb.edu/~ckrintz].  * ''International Symposium on Code Generation and Optimization'', San Francisco, California, March 2003.     h3. [A Real-time Garbage Collector with Low Overhead and Consistent Utilization|http://www.research.ibm.com/people/d/dfb/papers.html#Bacon03Realtime]     * [David F. Bacon|http://www.research.ibm.com/people/d/dfb], [Perry Cheng|http://www.research.ibm.com/people/p/perryche], and V. T. Rajan.  * ''Conference Record of the Thirtieth ACM Symposium on Principles of Programming Languages'', New Orleans, Louisiana, January 2003.     h3. [Using the SafeTSA Representation to Boost the Performance of an Existing Java Virtual Machine|http://www.ics.uci.edu/~jronne/pubs/cpc2003-safetsa5.pdf]     * [Wolfram Amme|http://swt.informatik.uni-jena.de/mit_amme.html], [Jeffrey von Ronne|http://www.ics.uci.edu/~jronne], and [Michael Franz|http://www.ics.uci.edu/~franz].  * ''10th International Workshop on Compilers for Parallel Computers (CPC 2003)'', Amsterdam, The Netherlands. January 2003.     h2. 2002        h3. [Online Feedback-Directed Optimization of Java|http://www.research.ibm.com/people/h/hind/oopsla02abs.html]     * [Matthew Arnold|http://www.research.ibm.com/people/m/marnold], [Michael Hind|http://www.research.ibm.com/people/h/hind], and [Barbara G. Ryder|http://www.cs.rutgers.edu/~ryder].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Seatle, Washington, November 4-8, 2002.     h3. Creating and Preserving Locality of Java Applications at Allocation and Garbage Collection Times     * [Yefim Shuf|http://www.cs.princeton.edu/~yshuf], [Manish Gupta|http://www.research.ibm.com/people/g/gupta], [Hubertus Franke|http://www.research.ibm.com/people/f/franke], [Andrew Appel|http://www.cs.princeton.edu/~appel], and [Jaswinder Pal Singh|http://www.cs.princeton.edu/~jps].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Seatle, Washington, November 4-8, 2002.     h3. [GCspy: An Adaptable Heap Visualisation Framework|http://www.cs.ukc.ac.uk/pubs/2002/1426/index.html]     * [Tony Printezis|http://www.dcs.gla.ac.uk/~tony] and [Richard Jones|http://www.cs.ukc.ac.uk/people/staff/rej].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Seatle, Washington, November 4-8, 2002.     h3. [Immutability Specification and its Applications|http://www.cs.nyu.edu/phd_students/pechtcha/pubs/jgi02.html]     * [Igor Pechtchanski|http://www.cs.nyu.edu/phd_students/pechtcha] and [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar].  * [''Joint ACM Java Grande - ISCOPE 2002 Conference''|http://charm.cs.uiuc.edu/javagrandeIscope], Seatle, Washington, November 3-5, 2002.     {anchor:port}     h3. [Experiences Porting the Jikes RVM to Linux/IA32|http://www.research.ibm.com/people/d/dgrove/papers/jvm02.html]     * Bowen Alpern, Maria Butrico, Tony Cocchi, Julian Dolby, [Stephen Fink|http://www.research.ibm.com/people/s/sfink], [David Grove|http://www.research.ibm.com/people/d/dgrove], and Ton Ngo.  * ''2nd Java Virtual Machine Research and Technology Symposium (JVM '02)'', San Francisco, California, August 1-2, 2002.  * '''(Source code available as of version 2.1.0 of Jikes RVM.)'''     h3. [Automatic Implementation of Programming Language Consistency Models|http://polaris.cs.uiuc.edu/~cwong1/publications/SWFL02.ps]     * Zehra Sura, [Chi-Leung Wong|http://polaris.cs.uiuc.edu/~cwong1], Xing Fang, [Jaejin Lee|http://www.cse.msu.edu/~jlee], [S.P. Midkiff|http://www.research.ibm.com/people/m/midkiff], and [David Padua|http://polaris.cs.uiuc.edu/~padua].  * ''Fifteenth Workshop on Languages and Compilers for Parallel Computing'', July, 2002.     h3. [In or Out? Putting Write Barriers in Their Place|http://www-ali.cs.umass.edu/bibliography.html#mm]     * [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn] and [Kathryn McKinley|http://www.cs.utexas.edu/users/mckinley].  * ''ACM SIGPLAN International Symposium on Memory Management (ISMM '02)'', Berlin, Germany, June 20-21, 2002.     h3. [An Adaptive, Region-based Allocator for Java|http://www.sable.mcgill.ca/publications/#ismm2002]     * [Feng Qian|http://www.sable.mcgill.ca/~fqian] and [Laurie Hendren|http://www-acaps.cs.mcgill.ca/~hendren].  * ''ACM SIGPLAN International Symposium on Memory Management (ISMM '02)'', Berlin, Germany, June 20-21, 2002.     h3. [Understanding the Connectivity of Heap Objects|http://www.cs.colorado.edu/~diwan]     * [Martin Hirzel|http://www.research.ibm.com/people/h/hirzel], [Johannes Henkel|http://www.cs.colorado.edu/~henkel], [Amer Diwan|http://www.cs.colorado.edu/~diwan], [Michael Hind|http://www.research.ibm.com/people/h/hind].  * ''ACM SIGPLAN International Symposium on Memory Management (ISMM '02)'', Berlin, Germany, June 20-21, 2002.     h3. [When to Use a Compilation Service?|http://www.cs.colorado.edu/~diwan]     * [Jeffrey Palm|http://www.cs.colorado.edu/~jdp], [Han Lee|http://www.cs.colorado.edu/~hanlee], [Amer Diwan|http://www.cs.colorado.edu/~diwan], [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss].  * ''ACM SIGPLAN Conference on Languages, Compilers, and Tools for Embedded Systems (LCTES '02) and Software and Compilers for Embedded Systems (SCOPES '02)'', Berlin, Germany, June 19-21 2002.     h3. [Beltway: Getting Around Garbage Collection Gridlock|http://www-ali.cs.umass.edu/bibliography.html#mm]     * [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn], [Richard Jones|http://www.cs.ukc.ac.uk/people/staff/rej], [Kathryn McKinley|http://www.cs.utexas.edu/users/mckinley], [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss].  * ''ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '02)'', Berlin, Germany, June 17-19 2002.     h3. [Static Load Classification for Improving the Value Predictability of Data-Cache Misses|http://www.cs.colorado.edu/~diwan]     * [Martin Burtscher|http://www.csl.cornell.edu/~burtscher], [Amer Diwan|http://www.cs.colorado.edu/~diwan], [Matthias Hauswirth|http://www.cs.colorado.edu/~hauswirt].  * ''ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '02)'', Berlin, Germany, June 17-19 2002.     h3. [Efficient and Precise Datarace Detection for Multithreaded Object-Oriented Programs|http://www.research.ibm.com/dejavu/drace-pldi02.pdf]     * [Jong-Deok Choi|http://www.research.ibm.com/people/j/jdchoi], [Keunwoo Lee|http://www.cs.washington.edu/homes/klee], [Alexey Loginov|http://www.cs.wisc.edu/~alexey/index.html], Robert O'Callahan, [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar], and [Manu Sridharan|http://www.cs.berkeley.edu/~manu_s].  * ''ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '02)'', Berlin, Germany, June 17-19 2002.     h3. [Older-first Garbage Collection in Practice: Evaluation in a Java Virtual Machine|http://www.cs.unm.edu/~darko/publications.html]     * [Darko Stefanovic|http://www.cs.unm.edu/~darko], [Matthew Hertz|http://www-cs.canisius.edu/~hertzm], [Steve M. Blackburn|http://cs.anu.edu.au/~Steve.Blackburn], [Kathryn S. McKinley|http://www.cs.utexas.edu/users/mckinley] and [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss].  * ''ACM SIGPLAN Workshop on Memory System Performance (MSP '02)'', Berlin, Germany, June 16, 2002.     h3. [Error-Free Garbage Collection Traces: How To Cheat and Not Get Caught|http://www-ali.cs.umass.edu/bibliography.html#mm]     * [Matthew Hertz|http://www-cs.canisius.edu/~hertzm], [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn], [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss], [Kathryn McKinley|http://www.cs.utexas.edu/users/mckinley], and [Darko Stefanovic|http://www.cs.unm.edu/~darko].  * ''ACM SIGMetrics 2002'', Marina del Rey, CA June 15-19 2002.     h3. [Using Adaptive Optimization Techniques to Teach Mobile Java Computing|http://www.cs.ucsb.edu/~ckrintz/abstracts/teaching.html]     * [Chandra Krintz|http://www.cs.ucsb.edu/~ckrintz].  * ''Principles and Practice of Programming in Java'', Dublin, Ireland, June 13-14, 2002.     h3. [Thin Guards: A Simple and Effective Technique for Reducing the Penalty of Dynamic Class Loading|http://www.research.ibm.com/people/m/marnold/publications.html].     * [Matthew Arnold|http://www.research.ibm.com/people/m/marnold] and [Barbara G. Ryder|http://www.cs.rutgers.edu/~ryder].  * ''European Conference on Object-Oriented Programming (ECOOP 2002)'', Malaga Spain, June 10-14 2002.     h3. [Atomic Instructions in Java|http://www.cs.umd.edu/~daveho/research/ecoop2002.pdf]     * [David Hovemeyer|http://www.cs.umd.edu/~daveho], [William Pugh|http://www.cs.umd.edu/~pugh], and [Jaime Spacco|http://www.cs.umd.edu/users/jspacco].  * ''European Conference on Object-Oriented Programming (ECOOP 2002)'', Malaga Spain, June 10-14 2002.     h3. [Space\- and Time-Efficient Implementation of the Java Object Model|http://www.research.ibm.com/people/d/dgrove/papers/ecoop02.html]     * [David Bacon|http://www.research.ibm.com/people/d/dfb], [Stephen Fink|http://www.research.ibm.com/people/s/sfink], and [David Grove|http://www.research.ibm.com/people/d/dgrove].  * ''European Conference on Object-Oriented Programming (ECOOP 2002)'', Malaga Spain, June 10-14, 2002.  * '''(Source code available as of version 2.1.0 of Jikes RVM.)'''     h3. [The Pensieve Project: A Compiler Infrastructure for Memory Models|http://polaris.cs.uiuc.edu/~cwong1/publications/WSFL02.ps]     * [C.-L. Wong|http://polaris.cs.uiuc.edu/~cwong1], Z. Sura, X. Fang, [S.P. Midkiff|http://www.research.ibm.com/people/m/midkiff], [J. Lee|http://www.cse.msu.edu/~jlee], and [D. Padua|http://polaris.cs.uiuc.edu/~padua].  * ''The Sixth International Symposium on Parallel Architectures, Algorithms, and Networks'', May, 2002.     h3. [Exploiting Prolific Types for Memory Management and Optimizations|http://www.research.ibm.com/people/g/gupta/popl02.pdf]     * [Yefim Shuf|http://www.cs.princeton.edu/~yshuf], [Manish Gupta|http://www.research.ibm.com/people/g/gupta], Rajesh Bordawekar, and [Jaswinder Pal Singh|http://www.cs.princeton.edu/~jps].  * ''29th ACM SIGPLAN/SIGACT Symposium on Principles of Programming Languages (POPL)'', Portland, OR, January 2002.     h2. 2001        h3. [Efficient Implementation of Java Interfaces: Invokeinterface Considered Harmless|http://www.research.ibm.com/people/d/dgrove/papers/oopsla01.html]     * Bowen Alpern, Anthony Cocchi, [Stephen Fink|http://www.research.ibm.com/people/s/sfink], [David Grove|http://www.research.ibm.com/people/d/dgrove], and Derek Lieber.  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Tampa, FL, USA, Oct 14-18, 2001.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)'''     h3. [Pretenuring for Java|http://cs.anu.edu.au/~Steve.Blackburn/pubs/abstracts.html#pretenure-oopsla-2001]     * [Steve Blackburn|http://cs.anu.edu.au/~Steve.Blackburn], Sharad Singhai, [Matthew Hertz|http://www-cs.canisius.edu/~hertzm], [Kathryn S. McKinley|http://www.cs.utexas.edu/users/mckinley], and [J. Eliot B. Moss|http://ali-www.cs.umass.edu/~moss].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Tampa, FL, USA, Oct 14-18, 2001.     h3. [Dynamic Optimistic Interprocedural Analysis: A Framework and an Application|http://www.cs.nyu.edu/phd_students/pechtcha/pubs/oopsla01.html]     * [Igor Pechtchanski|http://www.cs.nyu.edu/phd_students/pechtcha] and [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar].  * ''ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA)'', Tampa, FL, USA, Oct 14-18, 2001.     h3. [Efficient Dependence Analysis For Java Arrays|http://www.research.ibm.com/people/s/sfink/papers/europar01.ps.gz]     * [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar] and [Stephen Fink|http://www.research.ibm.com/people/s/sfink].  * ''EURO-PAR 2001'', Manchester, England, September, 2001.     h3. [A Comparative Evaluation of Parallel Garbage Collectors|http://www.research.ibm.com/people/d/dfb/papers.html#Attanasio01Comparative]     * C. Attansio, [David Bacon|http://www.research.ibm.com/people/d/dfb], Anthony Cocchi, and Stephen Smith.  * ''Fourteenth Annual Workshop on Languages and Compilers for Parallel Computing'', Cumberland Falls, Kentucky, Aug, 2001.  * '''(Source code available in versions 2.0.0 through 2.2.0 of Jikes RVM.)'''     h3. [A Framework for Reducing the Cost of Instrumented Code|http://www.research.ibm.com/people/m/marnold/publications.html]     * [Matthew Arnold|http://www.research.ibm.com/people/m/marnold] and [Barbara G. Ryder|http://www.cs.rutgers.edu/~ryder].  * ''ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '01)'', Snowbird, Utah, June 20-22, 2001.  * '''(Source code available as of version 2.3.0 of Jikes RVM.)'''     h3. [Java without the Coffee Breaks: A Non-intrusive Multiprocessor Garbage Collector|http://www.research.ibm.com/people/d/dfb/papers.html#Bacon01Java]     * [David Bacon|http://www.research.ibm.com/people/d/dfb], C. Attanasio, [Han Lee|http://www.cs.colorado.edu/~hanlee], V. Rajan, and Stephen Smith.  * ''ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '01)'', Snowbird, Utah, June 20-22, 2001.  * '''(Source code available in versions 2.0.0 through 2.0.3 of Jikes RVM.)'''     h3. [Program Analysis for Safety Guarantees in a Java Virtual Machine Written in Java|http://www.research.ibm.com/people/d/dgrove/papers/paste01.html].     * Jan-Willem Maessen, [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar], and [David Grove|http://www.research.ibm.com/people/d/dgrove].  * ''ACM SIGPLAN-SIGSOFT Workshop on Program Analysis for Software Tools and Engineering (PASTE '01),'' Snowbird, Utah, June 18-19, 2001.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)'''     h3. [Concurrent Cycle Collection in Reference Counted Systems|http://www.research.ibm.com/people/d/dfb/papers.html#Bacon01Concurrent]     * [David Bacon|http://www.research.ibm.com/people/d/dfb] and V. Rajan.  * ''The Fifteenth European Conference on Object-Oriented Programming (ECOOP)'', University Eötvös Loránd, Budapest, Hungary, June 18-22, 2001.  * '''(Source code available in versions 2.0.0 through 2.0.3 of Jikes RVM.)'''     h3. [Characterizing the Memory Behavior of Java Workloads: A Structured View and Opportunities for Optimizations|http://www.research.ibm.com/people/g/gupta/sigmetrics01.ps]     * [Yefim Shuf|http://www.cs.princeton.edu/~yshuf], [Mauricio Serrano|http://www.intel.com/research/mrl/people/serrano_m.htm], [Manish Gupta|http://www.research.ibm.com/people/g/gupta], and [Jaswinder Pal Singh|http://www.cs.princeton.edu/~jps].  * ''ACM SIGMETRICS 2001/Performance 2001'', Cambridge, MA, June 2001.     h3. [High-Performance Java Codes for Computational Fluid Dynamics|ftp://ftp.cs.unc.edu/pub/users/sc/papers/jg01.pdf]     * C. J. Riley, [Sid Chatterjee|http://www.cs.unc.edu/~sc], and R. Biswas.  * ''The Joint ACM Java Grande - ISCOPE 2001 Conference'', Stanford, CA, June 2001.     h3. [Dynamic Type Checking in Jalapeño|http://www.research.ibm.com/people/d/dgrove/papers/jvm01.html]     * Bowen Alpern, Anthony Cocchi, and [David Grove|http://www.research.ibm.com/people/d/dgrove].  * ''The Usenix Java Virtual Machine Research and Technology Symposium,'' April, 2001.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)'''     h2. 2000        h3. [Reducing the Overhead of Dynamic Compilation|http://www.research.ibm.com/people/d/dgrove/papers/spe01.html]     * [Chandra Krintz|http://www.cs.ucsb.edu/~ckrintz], [David Grove|http://www.research.ibm.com/people/d/dgrove], [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar], and [Brad Calder|http://www.cs.ucsd.edu/users/calder].  * ''Software: Practice and Experience'', 31(8), 717-738, December 2000.     h3. [Adaptive Optimization in the Jalapeño JVM: The Controller's Analytical Model|http://www.research.ibm.com/people/s/sfink/papers/fddo00.ps.gz]     * [Matthew Arnold|http://www.research.ibm.com/people/m/marnold], [Stephen Fink|http://www.research.ibm.com/people/s/sfink], [David Grove|http://www.research.ibm.com/people/d/dgrove], [Michael Hind|http://www.research.ibm.com/people/h/hind], and [Peter F. Sweeney|http://www.research.ibm.com/people/p/pfs].  * ''3rd ACM Workshop on Feedback-Directed and Dynamic Optimization (FDDO-3)'', December 10, 2000, Monterey, California.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)'''     {anchor:aos}     h3. [Adaptive Optimization in the Jalapeño JVM|http://www.cs.virginia.edu/~soffa/cs851/arnold.pdf]     * [Matthew Arnold|http://www.research.ibm.com/people/m/marnold], [Stephen Fink|http://www.research.ibm.com/people/s/sfink], [David Grove|http://www.research.ibm.com/people/d/dgrove], [Michael Hind|http://www.research.ibm.com/people/h/hind], and [Peter F. Sweeney|http://www.research.ibm.com/people/p/pfs].  * ''ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA 2000)'', Minneapolis, Minnesota, October 15-19, 2000.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)'''     h3. [Quasi-Static Compilation for Java|http://www.research.ibm.com/people/g/gupta/oopsla00.ps]     * [Mauricio Serrano|http://www.intel.com/research/mrl/people/serrano_m.htm], Rajesh Bordawekar, [Sam Midkiff|http://www.research.ibm.com/people/m/midkiff] and [Manish Gupta|http://www.research.ibm.com/people/g/gupta].  * ''[ACM Conference onObject-Oriented Programming, Systems, Languages, and Applications (OOPSLA)|http://oopsla.acm.org]'', October 2000.     h3. [Debugging by Remote Reflection|http://www.springerlink.com/index/DM5L10EAVYJQREH1.pdf]     * Ton Ngo and John Barton.  * ''Euro-Par 2000,'' Munich, Germany, August 27 - Sept 1 2000.  * '''(Source code available as of versions 2.0.0 through 2.1.1 of Jikes RVM.)'''     h3. [An Empirical Study of Selective Optimization|http://www.springerlink.com/index/9BJVBCKU87BGTLKK.pdf]     * [Matthew Arnold|http://www.research.ibm.com/people/m/marnold], [Michael Hind|http://www.research.ibm.com/people/h/hind], and [Barbara G. Ryder|http://www.cs.rutgers.edu/~ryder].  * ''13th International Workshop on Languages and Compilers for Parallel Computing'', Yorktown Heights, New York, August 10-12, 2000.     h3. [Unified Analysis of Array and Object References in Strongly Typed Languages|http://www.research.ibm.com/jalapeno/papers/sas2000.ps]     * [Stephen Fink|http://www.research.ibm.com/people/s/sfink], Kathleen Knobe, and [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar].  * ''2000 Static Analysis Symposium (SAS 2000)'', Santa Barbara, CA, June, 2000.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)'''     h3. [ABCD: Eliminating Array Bounds Checks on Demand|http://www.research.ibm.com/jalapeno/papers/ABCD.ps]     * [Rastislav Bodik|http://www.cs.wisc.edu/~bodik], [Rajiv Gupta|http://www.cs.arizona.edu/people/gupta], and [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar].  * ''ACM SIGPLAN 2000 Conference on Programming Language Design and Implementation (PLDI 2000)'', Vancouver, British Columbia, Canada, June 17-21, 2000.  * '''(Source code prototype available in versions 2.0.0 through 2.2.0 of Jikes RVM.)'''     h3. [A Framework for Interprocedural Analysis and Optimization in the Presence of Dynamic Class Loading|http://www.research.ibm.com/jalapeno/papers/extant2k.ps]     * Vugranam C. Sreedhar, Michael Burke, and [Jong-Deok Choi|http://www.research.ibm.com/people/j/jdchoi].  * '' ACM SIGPLAN 2000 Conference on Programming Language Design and Implementation (PLDI 2000)'', Vancouver, British Columbia, Canada, June 17-21, 2000.     h3. [Optimizing Java Programs in the Presence of Exceptions|http://www.research.ibm.com/jalapeno/papers/ecoop00.ps]     * [Manish Gupta|http://www.research.ibm.com/people/g/gupta], [Jong-Deok Choi|http://www.research.ibm.com/people/j/jdchoi], and [Michael Hind|http://www.research.ibm.com/people/h/hind].  * '' 14th European Conference on Object-Oriented Programming (ECOOP 2000),'', June 12-16, 2000, Cannes, France.     {anchor:jalapeno}     h3. [The Jalapeño Virtual Machine|http://www.research.ibm.com/journal/sj/391/alpern.pdf]     * B. Alpern, C. R. Attanasio, J. J. Barton, M. G. Burke, [P Cheng|http://www.research.ibm.com/people/p/perryche], [J.-D. Choi|http://www.research.ibm.com/people/j/jdchoi], A. Cocchi, [S. J. Fink|http://www.research.ibm.com/people/s/sfink], [D. Grove|http://www.research.ibm.com/people/d/dgrove], [M. Hind|http://www.research.ibm.com/people/h/hind], S. F. Hummel, D. Lieber, V. Litvinov, M. F. Mergen, T. Ngo, J. R. Russell, [V. Sarkar|http://www.research.ibm.com/people/v/vsarkar], M. J. Serrano, J. C. Shepherd, S. E. Smith, V. C. Sreedhar, H. Srinivasan, and J. Whaley.  * ''IBM System Journal'', Vol 39, No 1, February 2000.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)'''     h3. [A Comparative Study of Static and Profile-Based Heuristics for Inlining|http://portal.acm.org/citation.cfm?coll=GUIDE&dl=GUIDE&id=351416]     * [Matthew Arnold|http://www.research.ibm.com/people/m/marnold], [Stephen Fink|http://www.research.ibm.com/people/s/sfink], [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar], and [Peter F. Sweeney|http://www.research.ibm.com/people/p/pfs].  * ''2000 ACM SIGPLAN Workshop on Dynamic and Adaptive Compilation and Optimization (DYNAMO '00)'', Boston, Massachusetts, January 19-21, 2000.     h2. 1999     {anchor:jalapenoinjava}     h3. [Implementing Jalapeño in Java|http://cs.anu.edu.au/~Steve.Blackburn/teaching/comp4700/resources/papers/jalapeno-oopsla-1999.pdf]     * Bowen Alpern, Dick Attanasio, John J. Barton, Anthony Cocchi, Susan Flynn Hummel, Derek Lieber, Mark Mergen, Ton Ngo, Janice Shepherd, and Stephen Smith.  * ''1999 ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA '99)'', Denver, Colorado, November 1, 1999.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)'''     h3. [Efficient and Precise Modeling of Exceptions for the Analysis of Java Programs|http://portal.acm.org/citation.cfm?id=316171&coll=portal&dl=ACM]     * [Jong-Deok Choi|http://www.research.ibm.com/people/j/jdchoi], [David Grove|http://www.research.ibm.com/people/d/dgrove], [Michael Hind|http://www.research.ibm.com/people/h/hind], [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar].  * ''1999 ACM SIGPLAN-SIGSOFT Workshop on Program Analysis for Software Tools and Engineering (PASTE '99)'', Toulouse, France, September 6, 1999.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)'''     h3. [Dependence Analysis for Java|http://portal.acm.org/citation.cfm?id=645677.663931&coll=&dl=ACM&CFID=15151515&CFTOKEN=6184618]     * [Craig Chambers|http://www.cs.washington.edu/homes/chambers], [Igor Pechtchanski|http://www.cs.nyu.edu/phd_students/pechtcha], [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar], Mauricio Serrano, and Harini Srinivasan.  * ''Workshop on Languages and Compilers for Parallel Computing (LCPC 99),'' La Jolla, CA, Aug 1999.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)'''     h3. [The Jalapeño Dynamic Optimizing Compiler for Java|http://www.stanford.edu/~jwhaley/papers/javagrande99.pdf]     * Michael Burke, [Jong-Deok Choi|http://www.research.ibm.com/people/j/jdchoi], [Stephen Fink|http://www.research.ibm.com/people/s/sfink], [David Grove|http://www.research.ibm.com/people/d/dgrove], [Michael Hind|http://www.research.ibm.com/people/h/hind], [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar], Mauricio Serrano, V.C. Sreedhar, and Harini Srinivasan.  * ''1999 ACM Java Grande Conference'', San Francisco, June 12-14, 1999.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)'''     h3. [Jalapeño --- a Compiler-supported Java Virtual Machine for Servers|http://citeseer.ist.psu.edu/alpern99jalapentildeo.html]     * Bowen Alpern, Anthony Cocchi, Derek Lieber, Mark Mergen, and [Vivek Sarkar|http://www.research.ibm.com/people/v/vsarkar].  * ''Workshop on Compiler Support for Software System (WCSSS 99)'', Atlanta, GA, May 1999, held in conjunction with PLDI '99.  * '''(Source code available as of version 2.0.0 of Jikes RVM.)''' View All Revisions | Revert To Version 39 [Less]
Posted over 17 years ago by Steve Blackburn
Page edited by Steve Blackburn One goal of the JikesRVM project over recent years has been the ability to develop JikesRVM in a development environment such as Eclipse.  ... [More] This has been possible for the MMTk component since 2005, and as of early 2007 (release 2.9.0) it is possible to work with the majority of the JikesRVM codebase in Eclipse and similar environments.  With Jikes RVM release 2.9.1, setting up your Eclipse environment to work with Jikes RVM became even easier. Editing JikesRVM in Eclipse These instructions assume you are working with Jikes RVM version 2.9.1 or later. Create a JikesRVM source tree either via SVN checkout or untar-ing a distribution. $ svn co https://jikesrvm.svn.sf.net/svnroot/jikesrvm/rvmroot/trunk jikesrvm Create the machine-generated files and eclipse metadata: If you have a recent version of Jikes RVM (3.0 onwards): $ cd jikesrvm $ bin/buildit --eclipse localhost Note that if you will not or cannot build on your local machine, substitute localhost for the name of a host you can build on (buildit will perform the build remotely and then copy the requisite files back). If you are working on an older version (2.9.1 - 2.9.3), you can follow this procedure: $ cd jikesrvm $ ant -Dhost.name=ia32-linux -Dconfig.name=development $ ant -Dhost.name=ia32-linux -Dconfig.name=development eclipse-project If you will not or cannot build on your local machine: copy your tree to build build host somehow perform the above ant tasks copy the following generated files and directories back to the machine you will edit on: jikesrvm/.project jikesrvm/.classpath jikesrvm/eclipse Import the newly created Eclipse project into your Eclipse workspace. From Eclipse, select File-->Import Select "Existing Projects Into Workspace" Browse to find the top-level directory. Select the project (in this case JikesRVM ia32-linux development) Hit Finish Editing JikesRVM in NetBeans Follow the instructions for Eclipse including building the eclipse project with ant Install the Eclipse project importer Select File->Import Project->Eclipse Project Choose to import project ignoring project dependencies Select the top-level directory you created with the JikesRVM in as the project to import Select a new folder as the destination (workspace) for the import Hit Finish View Online Changes between revision 9 and revision 10:  One goal of the JikesRVM project over recent years has been the ability to develop JikesRVM in a development environment such as Eclipse.&nbsp; This has been possible for the MMTk component since 2005, and as of early 2007 (release 2.9.0) it is possible to work with the majority of the JikesRVM codebase in Eclipse and similar environments.&nbsp; With Jikes RVM release 2.9.1, setting up your Eclipse environment to work with Jikes RVM became even easier.     h2. Editing JikesRVM in Eclipse     These instructions assume you are working with Jikes RVM version *2.9.1* or later.  # Create a JikesRVM source tree either via SVN checkout or untar-ing a distribution.  {panel}  $ svn co [https://jikesrvm.svn.sf.net/svnroot/jikesrvm/rvmroot/trunk] jikesrvm  {panel}  # Create the machine-generated files and eclipse metadata:  #* If you have a *recent version* of Jikes RVM (*3.0 onwards*):  {panel}  $ cd jikesrvm  $ bin/buildit \--eclipse localhost  {panel}   Note that if you will not or cannot build on your local machine, substitute localhost for the name of a host you can build on (buildit will perform the build remotely and then copy the requisite files back).   _Note that if you will not or cannot build on your local machine_, substitute localhost for the name of a host you can build on (buildit will perform the build remotely and then copy the requisite files back).  #* If you are working on an *older version* (*2.9.1 - 2.9.3*), you can follow this procedure:  {panel}  $ cd jikesrvm  $ ant \-Dhost.name=ia32-linux \-Dconfig.name=development  $ ant \-Dhost.name=ia32-linux \-Dconfig.name=development eclipse-project  {panel}  If you will not or cannot build on your local machine:  #*# copy your tree to build build host somehow  #*# perform the above ant tasks  #*# copy the following generated files and directories back to the machine you will edit on:  #*#* jikesrvm/.project  #*#* jikesrvm/.classpath  #*#* jikesrvm/eclipse  # Import the newly created Eclipse project into your Eclipse workspace.  ## From Eclipse, select File-->Import  ## Select "Existing Projects Into Workspace"  !ImportWizard1.jpg!  ## Browse to find the top-level directory.  ## Select the project (in this case JikesRVM ia32-linux development)  !ImportWizard2.jpg!  ## Hit Finish     h2. Editing JikesRVM in NetBeans     # Follow the instructions for Eclipse including building the eclipse project with ant  # Install the [Eclipse project importer|http://www.netbeans.org/kb/articles/import-eclipse.html]  # Select File\-->Import Project-\->Eclipse Project  ## Choose to import project [ignoring project dependencies|http://www.netbeans.org/kb/articles/eclipse-dependencies.html]  ## Select the top-level directory you created with the JikesRVM in as the project to import  ## Select a new folder as the destination (workspace) for the import  ## Hit Finish View All Revisions | Revert To Version 9 [Less]
Posted over 17 years ago by David Grove
Page added by David Grove The Jikes RVM Adaptive Optimization System attempts to evaluate the break-even point for each action using an online competitive algorithm.  It ... [More] relies on an analytic model to estimate the costs and benefits of each selective recompilation action, and evaluates the best actions according to the model predictions online. A key advantage of this approach is that it allows a designer to extend the simple "break-even" cost-benefit model to account for more sophisticated adaptive policies, such as selective compilation with multiple optimization levels, on-stack-replacement, and long-running analyses. In general, each potential action will incur some cost and may confer some _benefit. For example, recompiling a method will certainly consume some CPU cycles, but could speed up the program execution by generating better code. In this discussion we focus on costs and benefits defined in terms of time (CPU cycles). However, in general, the controller could consider other measures of cost and benefit, such as memory footprint, garbage allocated, or locality disrupted. The controller will take some action when it estimates the benefit to exceed the cost. More precisely, when the controller wakes at time t, it considers a set of n available actions, the set A = {A1, A2, ..., An}. For any subset S in P(A), the controller can estimate the cost C(S) and benefit B(S) of performing all actions Ai in S. The controller will attempt to choose the subset S that maximizes B(S) - C(S). Obviously S = {} has B(S) = C(S) = 0; the controller takes no action if it cannot find a profitable course. In practice, the precise cost and benefit of each action cannot be known; so, the controller must rely on estimates to make decisions. The basic model the controller uses to decide which method to recompile, at which optimization level, and at what time is as follows. Suppose that when the controller wakes at time t, and each method m is currently optimized at optimization level mi, 0 <= i <= k. Let M be the set of loaded methods in the program. Let Ajm be the action "recompile method m at optimization level j, or do nothing if j = i." The controller must choose an action for each m in M. The set of available actions is Actions = {Ajm | 0 <= j <= k, m in M}. Each action has an estimated cost and benefit: C(Ajm), the cost of taking action Ajm, for 0 <= j <= k and T(Ajm), the expected time the program will spend executing method m in the future, if the controller takes action Ajm. For S in Actions, define C(S) = Sum({s in S}C(s)). Given S, for each m in M, define A_min_m to be the action Ajm in S that minimizes T(Ajm).  Then define T(S) = Sum({m in M}T(A_{min}_m). Using these estimated values, the controller chooses the set S that minimizes C(S) T(S). Intuitively, for each method m, the controller chooses the recompilation level j that minimizes the expected future compilation time and running time of m. It remains to define the functions C and T for each recompilation action. The basic model models the cost C of compiling a method m at level j as a linear function of the size of m. The linear function is determined by an offline experiment to fit constants to the model. The basic model estimates that the speedup for any optimization level j is constant. The implementation determines the constant speedup factor for each optimization level offline, and uses the speedup to compute T for each method and optimization level. We assume that if the program has run for time t, then the program will run for another t units, and then terminate. We further assume program behavior in the future will resemble program behavior in the past. Therefore, for each method we estimate that if no optimization action is performed T(Ajm) is equal to the time spent executing method m so far. Let M=(m1, ..., mk) be the k compiled methods. When the controller wakes at time t, each compiled method m has been sampled Sum(m) times. Let delta be the sampling interval, measured in seconds. The controller estimates that method m has executed delta Sum(m) seconds so far, and will execute for another delta Sum(m) seconds in the future. When driving recompilation based on sampling, the controller can limit its attention to the set of methods that were sampled in the previous sampling interval. This optimization does not lose precision; if the number of samples associated with a method has not changed, then the controller's estimate of the method's future execution time will not change. This implies that if the controller were to consider a method that does not appear in the previous sampling interval, the controller would make exactly the same decision it did the last time it considered the method. This optimization, limiting the number of methods the controller must examine in each sampling interval, greatly reduces the amount of work performed by the controller. Suppose the controller recompiles method m from optimization level i to optimization level j after having seen sum(m) samples. Let Si and Sj be the speedup ratios for optimization levels i and j, respectively. After optimizing at level j, we adjust the sample data to represent the system state as if it had executed method m at optimization level j since program startup. So, we set the new number of samples for m to be Sum(m) * (Si/Sj). Thus to compute the time spent in m, we need know only one number, the "effective" number of samples. View Online [Less]
Posted over 17 years ago by David Grove
Page edited by David Grove A comprehensive discussion of the design and implementation of the original Jikes RVM adaptive optimization system is given in theOOPSLA 2000 ... [More] paper by Arnold, Fink, Grove, Hind and Sweeney. A number of aspects of the system have been changed since 2000, so a better resource is a technical report Nov. 2004 technical report that describes the architecture and implementation in some detail. This section of the userguide is based on section 5 of the 2004 technical report. The implementation of the Jikes RVM adaptive optimization system uses a number of Java threads: several organizer threads in the runtime measurements component, the controller thread, and the compilation thread. The various threads are loosely coupled, communicating with each other through shared queues and/or the other in memory data structures. All queues in the system are blocking priority queues; if a consumer thread performs a dequeue operation when the queue is empty, it suspends until a producer thread performs an enqueue operation. The adaptive optimization system performs two primary tasks: selective optimization and profile-directed inlining. Selective Optimization The goal of selective optimization is to identify regions of code in which the application spends significant execution time (often called ``hot spots''), determine if overall application performance is likely to be improved by further optimizing one or more hot spots, and if so to invoke the optimizing compiler and install the resulting optimized code in the virtual machine. In Jikes RVM, the unit of optimization is a method.  Thus, to perform selective optimization, first the runtime measurements component must identify candidate methods (``hot methods'') for the controller to consider. To this end, it installs a listener that periodically samples the currently executing method at every taken yieldpoint.  When it is time to take a sample, the listener inspects the thread's call stack and records a single compiled method id into a buffer. If the yieldpoint occurs in the prologue of a method, then the listener additionally records the compiled method id of the current activation's caller.  If the taken yieldpoint occurs on a loop backedge or method epilogue, then the listener records the compiled method id of the current method.  When the buffer of samples is full, the sampling window ends. The listener then unregisters itself (stops taking samples) and wakes the sleeping Hot Method Organizer.  The Hot Method Organizer processes the buffer of compiled method ids by updating the Method Sample Data.  This data structure maintains, for every compiled method, the total number of times that it has been sampled. Careful design of this data structure (MethodCountData.java) was critical to achieving low profiling overhead. In addition to supporting lookups and updates by compiled method id, it must also efficiently enumerate all methods that have been sampled more times than a (varying) threshold value. After updating the Method Sample Data, the Hot Method Organizer creates an event for each method that has been sampled in this window and adds it to the controller's priority queue, using the sample value as its priority. The event contains the compiled method and the total number of times it has been sampled  since the beginning of execution.  After enqueuing the last event, the Hot Method Organizer re-registers the method listener and then sleeps until the next buffer of samples is ready to be processed. When the priority queue delivers an event to the controller, the controller dequeues the event and applies the model-driven recompilation policy to determine what action (if any) to take for the indicated method.  If the controller decides to recompile the method, it creates a recompilation event that describes the method to be compiled and the optimization plan to use and places it on the recompilation queue. The recompilation queue prioritizes events based on the cost-benefit computation. When an event is available on the recompilation queue, the recompilation thread removes it and performs the compilation activity specified by the event. It invokes the optimizing compiler at the specified optimization level and installs the resulting compiled method into the VM.  Although the overall structure of selective optimization in Jikes RVM is similar to that originally described in Arnold et al's OOPSLA 2000 paper, we have made several changes and improvements based on further experience with the system. The most significant change is that in the previous system, the method sample organizer attempted to filter the set of methods it presented to the controller.  The organizer passed along to the controller only methods considered "hot".  The organizer deemed a method "hot'' if the percentage of samples attributed to the method exceeded a dynamically adjusted threshold value. Method samples were periodically decayed to give more weight to recent samples. The controller dynamically adjusted this threshold value and the size of the sampling window in an attempt to reduce the overhead of processing the samples. Later, significant algorithmic improvements in key data structures and additional performance tuning of the listeners, organizers, and controller reduced AOS overhead by two orders of magnitude.  These overhead reductions obviate the need to filter events passed to the controller.  This resulted in a more effective system with fewer parameters to tune and a sounder theoretical basis.  In general, as we gained experience with the adaptive system implementation, we strove to reduce the number of tuning  parameters.  We believe that the closer the implementation matches the basic theoretical cost-benefit model, the more likely it will perform well and make reasonable and understandable decisions. Profile-Directed Inlining Profile-directed inlining attempts to identify frequently traversed call graph edges, which represent caller-callee relationships, and determine whether it is beneficial to recompile the caller methods to allow inlining of the callee methods. In Jikes RVM, profile-directed inlining augments a number of static inlining heuristics. The role of profile-directed inlining is to identify high cost-high benefit inlining opportunities that evade the static heuristics and to predict the likely target(s) of invokevirtual and invokeinterface calls that could not be statically bound at compile time. To accomplish this goal, the system takes a statistical sample of the method calls in the running application and maintains an approximation of the dynamic call graph based on this data. The system installs a listener that samples call edges whenever a yieldpoint is taken in the prologue or epilogue of a method. To sample the call edge, it records the compiled method id of the caller and callee methods and the offset of the call instruction in the caller's machine code into a buffer. When the buffer of samples is full, the sampling window ends. The listener then unregisters itself (stops taking samples) and wakes an organizer to update the dynamic call graph with the new profile data. The optimizing compiler's Inline Oracle uses the dynamic call graph to guide it's inline decisions. The system currently used is based on Arnold & Grove's CGO 2005 paper. More details of the sampling scheme and the inlining oracle can be found there, or in the source code. View Online Changes between revision 5 and revision 6:  A comprehensive discussion of the design and implementation of the original Jikes RVM adaptive optimization system is given in the[OOPSLA 2000 paper|http://docs.codehaus.org/display/RVM/Publications#Publications-aos] by Arnold, Fink, Grove, Hind and Sweeney. A number of aspects of the system have been changed since 2000, so a better resource is a technical report [Nov. 2004 technical report|http://domino.research.ibm.com/comm/research_people.nsf/pages/dgrove.RC23429.html] that describes the architecture and implementation in some detail. This section of the userguide is based on section 5 of the 2004 technical report.  \\     The implementation of the Jikes RVM adaptive optimization system uses a number of Java threads: several organizer threads in the runtime measurements component, the controller thread, and the compilation thread. The various threads are loosely coupled, communicating with each other through shared queues and/or the other in memory data structures. All queues in the system are blocking priority queues; if a consumer thread performs a dequeue operation when the queue is empty, it suspends until a producer thread performs an enqueue operation.     The adaptive optimization system performs two primary tasks: selective optimization and profile-directed inlining. The next two sections describe the implementation of each.   The adaptive optimization system performs two primary tasks: selective optimization and profile-directed inlining.        h3. Selective Optimization     The goal of selective optimization is to identify regions of code in which the application spends significant execution time (often called ``hot spots''), determine if overall application performance is likely to be improved by further optimizing one or more hot spots, and if so to invoke the optimizing compiler and install the resulting optimized code in the virtual machine.     In Jikes RVM, the unit of optimization is a method.&nbsp; Thus, to perform selective optimization, first the runtime measurements component must identify candidate methods (``hot methods'') for the controller to consider. To this end, it installs a listener that periodically samples the currently executing method at every taken yieldpoint.&nbsp; When it is time to take a sample, the listener inspects the thread's call stack and records a single compiled method id into a buffer. If the yieldpoint occurs in the prologue of a method, then the listener additionally records the compiled method id of the current activation's caller.&nbsp; If the taken yieldpoint occurs on a loop backedge or method epilogue, then the listener records the compiled method id of the current method.&nbsp;     When the buffer of samples is full, the sampling window ends. The listener then unregisters itself (stops taking samples) and wakes the sleeping Hot Method Organizer.&nbsp; The Hot Method Organizer processes the buffer of compiled method ids by updating the Method Sample Data.&nbsp; This data structure maintains, for every compiled method, the total number of times that it has been sampled. Careful design of this data structure (MethodCountData.java) was critical to achieving low profiling overhead. In addition to supporting lookups and updates by compiled method id, it must also efficiently enumerate all methods that have been sampled more times than a (varying) threshold value. After updating the Method Sample Data, the Hot Method Organizer creates an event for each method that has been sampled in this window and adds it to the controller's priority queue, using the sample value as its priority. The event contains the compiled method and the _total_ number of times it has been sampled&nbsp; since the beginning of execution.&nbsp; After enqueuing the last event, the Hot Method Organizer re-registers the method listener and then sleeps until the next buffer of samples is ready to be processed.     When the priority queue delivers an event to the controller, the controller dequeues the event and applies the model-driven recompilation policy to determine what action (if any) to take for the indicated method.&nbsp; If the controller decides to recompile the method, it creates a recompilation event that describes the method to be compiled and the optimization plan to use and places it on the recompilation queue. The recompilation queue prioritizes events based on the cost-benefit computation.     When an event is available on the recompilation queue, the recompilation thread removes it and performs the compilation activity specified by the event. It invokes the optimizing compiler at the specified optimization level and installs the resulting compiled method into the VM.&nbsp;     Although the overall structure of selective optimization in Jikes RVM is similar to that originally described in Arnold et al's OOPSLA 2000 paper, we have made several changes and improvements based on further experience with the system. The most significant change is that in the previous system, the method sample organizer attempted to filter the set of methods it presented to the controller.&nbsp; The organizer passed along to the controller only methods considered "hot".&nbsp; The organizer deemed a method "hot'' if the percentage of samples attributed to the method exceeded a dynamically adjusted threshold value. Method samples were periodically decayed to give more weight to recent samples. The controller dynamically adjusted this threshold value and the size of the sampling window in an attempt to reduce the overhead of processing the samples.     Later, significant algorithmic improvements in key data structures and additional performance tuning of the listeners, organizers, and  controller reduced AOS overhead by two orders of magnitude.&nbsp; These overhead reductions obviate the need to filter events passed  to the controller.&nbsp; This resulted in a more effective system with fewer parameters to tune and a sounder theoretical basis.&nbsp; In general, as we gained experience with the adaptive system implementation, we strove to reduce the number of tuning&nbsp; parameters.&nbsp; We believe that the closer the implementation matches the basic theoretical cost-benefit model, the more likely it will perform well and make reasonable and understandable decisions.     h3. Profile-Directed Inlining     Profile-directed inlining attempts to identify frequently traversed call graph edges, which represent caller-callee relationships, and determine whether it is beneficial to recompile the caller methods  to allow inlining of the callee methods. In Jikes RVM, profile-directed inlining augments a number of static  inlining heuristics. The role of profile-directed inlining is to identify high cost-high benefit inlining opportunities that evade the static heuristics and to predict the likely target(s) of invokevirtual and invokeinterface calls that could not be statically bound at compile time.     To accomplish this goal, the system takes a statistical sample of the method calls in the running application and maintains an approximation of the dynamic call graph based on this data. The system installs a listener that samples call edges whenever a yieldpoint is taken in the prologue or epilogue of a method. To sample the call edge, it records the compiled method id of the caller and callee methods and the offset of the call instruction in the caller's machine code into a buffer. When the buffer of samples is full, the sampling window ends.  The listener then unregisters itself (stops taking samples) and wakes an organizer to update the dynamic call graph with the new profile data. The optimizing compiler's Inline Oracle uses the dynamic call graph to guide it's inline decisions.     The system currently used is based on Arnold & Grove's CGO 2005 paper. More details of the sampling scheme and the inlining oracle can be found there, or in the source code. View All Revisions | Revert To Version 5 [Less]
Posted over 17 years ago by David Grove
Page edited by David Grove Complex non-deterministic systems such as the Jikes RVM adaptive system present challenges for system understanding and debugging. Virtually all ... [More] of the profiling data collected by the runtime measurements component results from non-deterministic timer-based sampling at taken yieldpoints. The exact timing of these interrupts, and thus, the profile data that drives recompilation decisions, differs somewhat each time an application executes. Furthermore, many of the optimizations in the optimizing compiler rely on online profiles of conditional branch probabilities, i.e., the probabilities at the point in an execution when the recompilation occurs. Thus, because recompilations can occur at different times during each execution, a method compiled at the same optimization level could be compiled slightly differently on different runs. The primary mechanism we use to manage this complexity is a record-replay facility for the adaptive system, where online profile data is gathered during one run and used in a subsequent run. More specifically, as methods are dynamically compiled, the system can record this information into a log file. At the end of the run, the system can optionally dump the branch probabilities of all instrumented conditional branches, the profile-derived call graph, and the profile-directed inlining decisions. This log of methods and the files of profile data can then be provided as inputs to a driver program (org.jikesrvm.tools.opt.OptTestHarness) that can replay the series of compilation actions, and then optionally execute the program. Usually a fairly rapid binary search of methods being compiled and/or the supporting profile data suffices to narrow the cause of a crash to a small set of actions taken by the optimizing compiler. Although this does not enable a perfectly accurate replay of a previous run, in practice, we have found that it suffices to reproduce almost all crashes caused by bugs in the optimizing compiler. In addition to this record-replay mechanism, which mainly helps debugging the optimizing compiler, the adaptive system can generate a log file that contains detailed information about the actions of its organizer and controller threads. A sample is shown below: 30:..7047728888 Compiled read with baseline compiler in 0.20 ms 90:..7136817287 Controller notified that read(14402) has 4.0 samples 92:..7139813016 Doing nothing cost (leaving at baseline) to read is 40.0 92:..7139830219 Compiling read cost at O0=40.42, future time=49.81 92:..7139842466 Compiling read cost at O1=65.99, future time=72.58 92:..7139854029 Compiling read cost at O2=207.44, future time=213.49 110:..7166901172 Controller notified that read(14402) has 9.0 samples 111:..7168378722 Doing nothing cost (leaving at baseline) to read=90.0 111:..7168396493 Compiling read cost at O0=40.42, future time=61.54 111:..7168409562 Compiling read cost at O1=65.99, future time=80.81 111:..7168421097 Compiling read cost at O2=207.44, future time=221.06 111:..7168435937 Scheduling level 0 recompilation of read (priority=28.46) 112:..7169879779 Recompiling (at level 0) read 114:..7173293360 Recompiled (at level 0) read 150:..7227058078 Controller notified that read(14612) has 5.11 samples 151:..7228691160 Doing nothing cost (leaving at O0) to read=51.12 151:..7228705466 Compiling read cost at O1=66.26, future time=102.14 151:..7228717124 Compiling read cost at O2=208.29, future time=241.24 <....many similar entries....> 998:..8599006259 Controller notified that read(14612) has 19.11 samples 999:..8599561634 Doing nothing cost (leaving at O0) to read=191.13 999:..8599576368 Compiling read cost at O1=54.38, future time=188.52 999:..8599587767 Compiling read cost at O2=170.97, future time=294.14 999:..8599603986 Scheduling level 1 recompilation of read (priority=2.61) 1000:..8601308856 Recompiling (at level 1) read 1002:..8604580406 Recompiled (at level 1) read 1018:..8628022176 Controller notified that read(15312) has 18.41 samples 1019:..8629548221 Doing nothing cost (leaving at O1) to read=184.14 1019:..8629563130 Compiling read cost at O2=170.97, future time=340.06 This sample shows an abbreviated subset of the log entries associated with the method read of the class spec.benchmarks._213_javac.ScannerInputStream, one of the hotter methods of the SPECjvm98 benchmark _213_javac. The first pair of numbers are the controller clock (number of timer interrupts since execution began) and the value of the hardware cycle counter (Time.cycles()) for the log entry. These log entries show the cost-benefit values computed by the controller for various possible optimization actions and the progression of the method from baseline compilation through two recompilations (level 0 and then at level 1). For example, at time 92, we see four entries that give the estimated total future time (the sum of the compilation cost and the total future execution time in a method) for performing no recompilation and for each optimization level. Because the total future time for not recompiling (40) is less than the other alternatives (49.81, 72.58, and 213.49), the method is not scheduled for recompilation. However, at time 110, the method has been sampled more often. Thus, the total future time estimate is updated, resulting in two recompilation actions (level 0 and level 1) that are more attractive than taking no recompilation action. Because level 0 gives the least future time, this decision is chosen by placing a recompilation event in the recompilation priority queue. The priority for the event is the expected improvement of performing this recompilation, i.e., the difference between the future time for the new level and the future time for current execution (90 - 61.54 = 28.46). At clock time 150 a similar pattern occurs when considering whether to recompile this method at level 1 or 2; initially recompiling at higher levels is not chosen (clock time 151) until sufficient samples of the method have occurred (clock time 999). The figure also illustrates how samples of a method at lower optimization level are incorporated into the total samples for a method that has been recompiled. The samples at the lower level are scaled by the relative speed of the two levels as defined by the CompilerDNA, and used as the initial number of samples for the higher level. For example, at clock time 100, the baseline compiled version of the method has 9 samples. When the method is recompiled at level 0, these methods are scaled down by 4.26, which is the expected speedup defined by the CompilerDNA for going from baseline to level 0, resulting in a value of 2.11. At clock time 160, the level 0 version of method has 5.11 samples, i.e, 3 additional samples of the method have occurred. View Online Changes between revision 1 and revision 2:  Complex non-deterministic systems such as the Jikes RVM adaptive system present challenges for system understanding and debugging. Virtually all of the profiling data collected by the runtime measurements component results from non-deterministic timer-based sampling at taken yieldpoints. The exact timing of these interrupts, and thus, the profile data that drives recompilation decisions, differs somewhat each time  an application executes. Furthermore, many of the optimizations in the optimizing compiler rely on online profiles of conditional branch probabilities, i.e., the probabilities at the point in an execution when the recompilation occurs. Thus, because recompilations can occur at different times during each execution, a  method compiled at the same optimization level could be compiled slightly differently on different runs.   Complex non-deterministic systems such as the Jikes RVM adaptive system present challenges for system understanding and debugging. Virtually all of the profiling data collected by the runtime measurements component results from non-deterministic timer-based sampling at taken yieldpoints. The exact timing of these interrupts, and thus, the profile data that drives recompilation decisions, differs somewhat each time an application executes. Furthermore, many of the optimizations in the optimizing compiler rely on online profiles of conditional branch probabilities, i.e., the probabilities at the point in an execution when the recompilation occurs. Thus, because recompilations can occur at different times during each execution, a method compiled at the same optimization level could be compiled slightly differently on different runs.    The primary mechanism we use to manage this complexity is a record-replay facility for the adaptive system, where online profile data is gathered during one run and used in a subsequent run. More specifically, as methods are dynamically compiled, the system can record this information into a log file. At the end of  the run, the system can optionally dump the branch probabilities of all instrumented conditional branches, the profile-derived call graph, and the profile-directed inlining decisions. This log of methods and the files of profile data can then be provided as inputs to a driver program (org.jikesrvm.tools.opt.OptTestHarness) that can replay the series of compilation actions, and then optionally execute the program. Usually a fairly rapid binary search of methods being compiled and/or the supporting profile data suffices to narrow the cause of a crash to a small set of actions taken by the optimizing compiler. Although this does not enable a perfectly accurate replay of a previous run, in practice, we have found that it suffices to reproduce almost all crashes caused by bugs in the optimizing compiler.   The primary mechanism we use to manage this complexity is a record-replay facility for the adaptive system, where online profile data is gathered during one run and used in a subsequent run. More specifically, as methods are dynamically compiled, the system can record this information into a log file. At the end of the run, the system can optionally dump the branch probabilities of all instrumented conditional branches, the profile-derived call graph, and the profile-directed inlining decisions. This log of methods and the files of profile data can then be provided as inputs to a driver program (org.jikesrvm.tools.opt.OptTestHarness) that can replay the series of compilation actions, and then optionally execute the program. Usually a fairly rapid binary search of methods being compiled and/or the supporting profile data suffices to narrow the cause of a crash to a small set of actions taken by the optimizing compiler. Although this does not enable a perfectly accurate replay of a previous run, in practice, we have found that it suffices to reproduce almost all crashes caused by bugs in the optimizing compiler.    In addition to this record-replay mechanism, which mainly helps debugging the optimizing compiler, the adaptive system can generate a log file that contains detailed information about the actions of its  organizer and controller threads. A sample is shown below:      In addition to this record-replay mechanism, which mainly helps debugging the optimizing compiler, the adaptive system can generate a log file that contains detailed information about the actions of its organizer and controller threads. A sample is shown below:  {noformat}  30:..7047728888 Compiled read with baseline compiler in 0.20 ms  90:..7136817287 Controller notified that read(14402) has 4.0 samples  92:..7139813016 Doing nothing cost (leaving at baseline) to read is 40.0  92:..7139830219 Compiling read cost at O0=40.42, future time=49.81  92:..7139842466 Compiling read cost at O1=65.99, future time=72.58  92:..7139854029 Compiling read cost at O2=207.44, future time=213.49  110:..7166901172 Controller notified that read(14402) has 9.0 samples  111:..7168378722 Doing nothing cost (leaving at baseline) to read=90.0  111:..7168396493 Compiling read cost at O0=40.42, future time=61.54  111:..7168409562 Compiling read cost at O1=65.99, future time=80.81  111:..7168421097 Compiling read cost at O2=207.44, future time=221.06  111:..7168435937 Scheduling level 0 recompilation of read (priority=28.46)  112:..7169879779 Recompiling (at level 0) read  114:..7173293360 Recompiled (at level 0) read  150:..7227058078 Controller notified that read(14612) has 5.11 samples  151:..7228691160 Doing nothing cost (leaving at O0) to read=51.12  151:..7228705466 Compiling read cost at O1=66.26, future time=102.14  151:..7228717124 Compiling read cost at O2=208.29, future time=241.24     <....many similar entries....>     998:..8599006259 Controller notified that read(14612) has 19.11 samples  999:..8599561634 Doing nothing cost (leaving at O0) to read=191.13  999:..8599576368 Compiling read cost at O1=54.38, future time=188.52  999:..8599587767 Compiling read cost at O2=170.97, future time=294.14  999:..8599603986 Scheduling level 1 recompilation of read (priority=2.61)  1000:..8601308856 Recompiling (at level 1) read  1002:..8604580406 Recompiled (at level 1) read  1018:..8628022176 Controller notified that read(15312) has 18.41 samples  1019:..8629548221 Doing nothing cost (leaving at O1) to read=184.14  1019:..8629563130 Compiling read cost at O2=170.97, future time=340.06  {noformat} This sample shows an abbreviated subset of the log entries associated with the method read of the class spec.benchmarks._213_javac.ScannerInputStream, one of the hotter methods of the SPECjvm98 benchmark \_213_javac. The first pair of numbers are the controller clock (number of timer interrupts since execution began) and the value of the hardware cycle counter (Time.cycles()) for the log entry. These log entries show the cost-benefit values computed by the controller for various possible optimization actions and the progression of the method from baseline compilation through two recompilations (level 0 and then at level 1). For example, at time 92, we see four entries that give the estimated total future time (the sum of the compilation cost and the total future execution time in a method) for performing no recompilation and for each optimization level. Because the total future time for not recompiling (40) is less than the other alternatives (49.81, 72.58, and 213.49), the method is not scheduled for recompilation. However, at time 110, the method has been sampled more often. Thus, the total future time estimate is updated, resulting in two recompilation actions (level 0 and level 1) that are more attractive than taking no recompilation action. Because level 0 gives the least future time, this decision is chosen by placing a recompilation event in the recompilation priority queue. The priority for the event is the expected improvement of performing this recompilation, i.e., the difference between the future time for the new level and the future time for current execution (90 - 61.54 = 28.46).    This sample shows an abbreviated subset of the log entries associated with the method read  of the class spec.benchmarks._213_javac.ScannerInputStream, one of the hotter methods of the SPECjvm98 benchmark \_213_javac. The first pair of numbers are the controller clock (number of timer interrupts since execution began) and the value of the hardware cycle counter (Time.cycles()) for the log entry. These log entries show the cost-benefit values computed by the controller for various possible optimization actions and the progression of the method from baseline compilation through two recompilations (level 0 and then at level 1). For example, at time 92, we see four entries that give the estimated total future time (the sum of the compilation cost and the total future execution time in a method) for performing no recompilation and for each optimization level. Because the total future time for not recompiling (40) is less than the other alternatives (49.81, 72.58, and 213.49), the method is not scheduled for recompilation. However, at time 110, the method has been sampled more often. Thus, the total future time estimate is updated, resulting in two recompilation actions (level 0 and level 1) that are more attractive than taking no recompilation action. Because level 0 gives the least future time, this decision is chosen by placing a recompilation event in the recompilation priority queue. The priority for the event is the expected improvement of performing this  recompilation, i.e., the difference between the future time for the new level and the future time for current execution ($90 - 61.54 = 28.46$).   At clock time 150 a similar pattern occurs when considering whether to recompile this method at level 1 or 2; initially recompiling at higher levels is not chosen (clock time 151) until sufficient samples of the method have occurred (clock time 999).     At clock time 150 a similar pattern occurs when considering whether to recompile this method at level 1 or 2;  initially recompiling at higher levels is not chosen (clock time 151) until sufficient samples of the method have occurred (clock time 999).     The figure also illustrates how samples of a method at lower optimization level are incorporated into the total samples for a method that has been recompiled. The samples at the lower level are scaled by the relative speed of the two levels as defined by the CompileDNA, and used as the initial number of samples for the higher level. For example, at clock time 100, the baseline compiled version of the method has 9 samples. When the method is recompiled at level 0, these methods are scaled down by 4.26, which is the expected speedup defined by the CompilerDNA for going from baseline to level 0, resulting in a value of 2.11. At clock time 160, the level 0 version of method has 5.11 samples, i.e, 3 additional samples of the method have occurred.   The figure also illustrates how samples of a method at lower optimization level are incorporated into the total samples for a method that has been recompiled. The samples at the lower level are scaled by the relative speed of the two levels as defined by the CompilerDNA, and used as the initial number of samples for the higher level. For example, at clock time 100, the baseline compiled version of the method has 9 samples. When the method is recompiled at level 0, these methods are scaled down by 4.26, which is the expected speedup defined by the CompilerDNA for going from baseline to level 0, resulting in a value of 2.11. At clock time 160, the level 0 version of method has 5.11 samples, i.e, 3 additional samples of the method have occurred. View All Revisions | Revert To Version 1 [Less]
Posted over 17 years ago by David Grove
Page added by David Grove A primary design goal for the adaptive optimization system is to enable research in online feedback-directed optimization. Therefore, we require ... [More] the controller implementation to be flexible and extensible. As we gained experience with the system, the controller component went through several major redesigns to better support our goals. The controller is a single Java thread that runs an infinite event loop. After initializing AOS, the controller enters the event loop and attempts to dequeue an event. If no event is available, the dequeue operation blocks (suspending the controller thread) until an event is available. All controller events implement an interface with a single method: process. Thus, after successfully dequeuing an event the controller thread simply invokes its process method and then, the work for that event having been completed, returns to the top of the event loop and attempts to dequeue another event. This design makes it easy to add new kinds of events to the system (and thus, extend the controller's behavior), as all of the logic to process an event is defined by the event's process method, not in the code of the controller thread. A further level of abstraction is accomplished by representing the recompilation strategy as an abstract class with several subclasses. The process method of a hot method event invokes methods of the recompilation strategy to determine whether or not a method should be recompiled, and if so at what optimization level. The cost-benefit model itself is also reified in a class hierarchy of models to enable extension and variation. This set of abstractions enable a single controller implementation to execute a variety of strategies. Another useful mechanism for experimentation is the ability to easily change the input parameters to AOS that define the expected compilation rates and execution speed of compiled code for the various compilers. By varying these parameters, one can easily cause the default multi-level cost-benefit model to simulate a single-level model (by defining all but one optimization level to be unprofitable). One can also explore other aspects of the system, for example the sensitivity of the model to the accuracy of these parameters. We found this capability to be so useful that the system supports a command line argument (-X:aos:dna=<filename>) that causes it to optionally read these parameters from a file. View Online [Less]