Jikes RVM User Guide
The User Guide provides JikesTM RVM information that is not typically covered in published papers. For high-level overviews, algorithms, and structures, you will find the published papers to be the best starting place. The User Guide supplements these Jikes RVM papers, focusing on implementation details of how to build, run, and add functionality to the system.
You may find sections of the User Guide missing, incomplete or otherwise confusing. We intend this document to live as a continual work-in-progress, hopefully growing and maturing as community members edit and add to the guide. Please accept this invitation to contribute.
Please send feedback, bug fixes, and text contributions to the core mailing list or open a pull request on GitHub. Constructive criticism will be cheerfully accepted.
- Care and Feeding: The guide to practical aspects of building, testing, debugging and evaluating Jikes RVM.
- Architecture: The guide to the major architectural decisions of Jikes RVM.
- MMTk Tutorial: A simple tutorial to building a collector with MMTk.
1 Quick Start Guide
2 Get the Source
2.1 Download a Release
2.2 Use Git
3 Building Jikes RVM
3.1 Overview
3.2 Target Requirements
3.3 Tool Requirements
3.4 Instructions
3.5 Building Patched Versions
3.6 Cross-Platform Building
3.7 Primordial Class List
3.8 Using buildit
4 Configuring Jikes RVM
4.1 Jikes RVM Configurations
5 Debugging Jikes RVM
5.1 General debugging tips
5.2 Tools
5.3 Debugging Optimizing Compiler Problems
5.4 Debugging problems related to the class library
5.5 GDB Stack Walking
6 Experimental Guidelines
6.1 Which boot image should I use?
6.2 Compiler Replay
6.3 Measuring GC performance
6.4 Jikes RVM is really slow! What am I doing wrong?
6.5 Stability of Jikes RVM
7 Modifying Jikes RVM
7.1 Adding command line options
7.2 Adding a new garbage collector
7.3 Coding Conventions
7.4 Coding Style
7.5 Compiler DNA
7.6 Editing Jikes RVM in an IDE
8 Profiling Applications with Jikes RVM
8.1 Instrumented Event Counters
9 Running Jikes RVM
9.1 Standard Command-Line Options
9.2 Non-Standard Command-Line Options
9.3 Running Jikes RVM with Valgrind
10 Testing Jikes RVM
10.1 Unit Tests
10.2 Functional and Performance Tests
10.3 External Test Resources
10.4 Test Run Descriptions
11 The MMTk Test Harness
11.1 Overview
11.2 Standalone
11.3 In Eclipse
11.4 Test harness options
11.5 Scripts
11.6 Scripting language
11.7 MMTk Unit Tests
II Architecture
12 Adaptive Optimization System
12.1 AOS Controller
12.2 Cost Benefit Model
12.3 Jikes RVM’s compilers
12.4 Life Cycle of a Compiled Method
12.5 Logging and Debugging
12.6 Threading and Yieldpoints
13 Compilers
13.1 Baseline Compiler
13.2 Optimizing Compiler
14 Core Runtime Services
14.1 Object Model
14.2 Class and Code Management
14.3 Thread Management
14.4 JNI
14.5 Exception Management
14.6 Bootstrap
14.7 Calling Conventions
14.8 VM Callbacks
15 Magic
15.1 Compiler Intrinsics
15.2 Unboxed Types
15.3 Raw Memory Access
15.4 Uninterruptible Code
16 MMTk
16.1 Anatomy of a Garbage Collector
16.2 Memory Allocation in Jikes RVM
16.3 Scanning Objects in Jikes RVM
16.4 Using GCSpy
17 Interface to the Class Library
17.1 Overview
17.2 GNU Classpath VM interface
17.3 Naming conventions
17.4 Build organisation
III MMTk Tutorial
18 Preliminaries
18.1 Getting MMTk and Jikes RVM and Eclipse working
18.2 Creating The Base Tutorial Collector
19 Building a Mark-sweep Collector
19.1 Free-list Allocation
19.2 Mark-Sweep Collection
19.3 Optimized Mark-sweep Collection
20 Building a Hybrid Collector
20.1 Add a Copying Nursery
20.2 Add nursery allocation
20.3 Add copying to the collector
20.4 Make necessary changes to TutorialTraceLocal