Running the RVM
Jikes
™ RVM executes Java
virtual machine byte code instructions from
.class files. It does
not compile Java
™ 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:
% 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:processors=<number|"all"> |
The number of processors that the garbage collector will use |
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 |
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 |
|
unwhile |
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 |
|
inlining_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_inlining |
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_multiplier |
Initial edge weight of call graph is set to ai_seed_multiplier * (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. |
|
countThreadTransitions |
Count, and report, the number of thread state transitions. This works better on IA32 than on PPC at the moment. |
|
forceOneCPU |
Force all threads to run on one CPU. The argument specifies which CPU (starting from 0). |
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.