Iowa State University IT

Nu JVM Benchmarks

This area contains all information regarding the evaluation of our current implementation of the Nu JVM. Please check back often, as these results will be updated frequently as we make various improvements.

Three types of overhead have been identified regarding the implementation of Nu JVM. These are: dispatch, delegate invocation, and pattern matching. We will actively track the performance of our implementation with regard to these specific overheads.

Dispatch Overhead

This overhead appears due to the addition of code to perform dispatching. The dispatch code needs to call the matching code (if appropriate) and call the delegate invoke code (if appropriate). This code must run every time a join point executes, regardless of number of bound patterns.

Performance Goals

Early implementations suffered from having to call the matcher every time a join point executed. The addition of caching improved this performance through remembering the previous match(es) and only performing matching as needed. Delegates associated with matched patterns are cached at each join point so the dispatch knows if it should call the delegate invocation code.

Benchmarks

Delegate Invocation Overhead

This overhead appears due to the need to invoke delegates at the execution of matched join points. At each executing join point, for each (currently) bound pattern that matches it, the associated delegate must be invoked.

Performance Goals

When a pattern is matched against a join point, if it matched then the associated delegate is cached at that join point. This allows the creation of a chain of delegates that can be efficiently iterated over and invoked.

Invocation is performed from inside the virtual machine. Information about the delegate needing invoked is already available (due to the previously mentioned caching) and the virtual machine simply has to invoke the delegate.

Benchmarks

Pattern Matching Overhead

This overhead appears due to the need to match bound patterns against join points. When each join point is executed, it must know which of the (currently) bound patterns matches it.

Performance Goals

To address the first goal, the matcher checks if the number of bound patterns is zero and if it is, stops.

Benchmarks

Bind/Remove Benchmarks

In addition to the overheads already mentioned, we measure the performance of the actual bind and remove calls. For static binding, this performance affects the start-up time of an application. For dynamic binding, this performance affects the execution of the program.

Performance Goals

Benchmarks