JEP 165: Compiler Control

OwnerNils Eliasson
Created2011/12/02 20:00
Updated2014/07/16 11:58
TypeFeature
StatusCandidate
Componenthotspot / compiler
ScopeJDK
Discussionhotspot dash compiler dash dev at openjdk dot java dot net
EffortS
DurationS
Priority4
Reviewed byJesper Wilhelmsson
Endorsed byMikael Vidstedt
Issue8046155
DependsJEP 137: Diagnostic-Command Framework
Relates to8050853: Extend -XX:CompileCommand to include an option that always compiles the specified method

Summary

Improve control of the JVM compilers by encapsulating control into a set of options. Allow different option sets to be applied depending on which method is being compiled. Add the possibility of changing the option sets during run time.

Goals

Motivation

Method-context dependent control of the compilation process is a powerful tool for writing small contained JVM compiler tests that can be run without restarting the entire JVM. It is also very useful for creating workarounds for bugs in the JVM compilers. A good encapsulation of the compiler options is also good hygiene.

Description

Gather all options that control the JVM compilers into a set of options. The set is called a compiler directive and is an instruction for how to compile. A directive is supplied to the VM together with a method matcher that decides what methods it applies to. Several directives can be active in the runtime at the same time. Directives can be added and removed during run time.

Directives can be defined in a standardized and human readable file format.

Different ways of adding and removing directives will be investigated. This includes command line, diagnostic command and Java API.

For verification purposes the current set of directives can be dumped from diagnostic command. The directives will also be printed when the compiler or VM enters a fatal state.

The JVM compiler is responsible to only respect directives that produce correct code.

Testing

Tests for all introduced APIs and for the directives format will be needed. Test for the most common use cases will include:

Risks and Assumptions

The sheer amount of compiler options will limit us to focus on a subset.

A Java API for the directives is tightly coupled to the JVM, but today all classes are in the JDK. Introducing classes that are delivered with Hotspot may cause difficulties.

Dependences

Impact