% $Id: abstract.tex,v 1.3 1997/01/31 03:42:53 cierniak Exp $


\section*{SUMMARY}

%\begin{abstract}
{\bf
  We have developed a research compiler for Java {\tt class} files.
  The compiler, which we call {\em Briki}, is designed to test new
  compilation techniques.  We focus on optimizations which are only
  possible or much easier to perform on a high-level intermediate
  representation.  We have designed such a representation, {\em
    JavaIR}, and have written a front-end which recovers high-level
  structure from the information from the {\tt class} file.

  Some of the high-level optimizations can be performed by the Java
  compiler which produces the {\tt class} file.  There is however a
  set of machine-dependent optimizations which have to be customized
  for the specific architecture and so can only be performed when the
  machine code is generated from the bytecodes, e.g, in a Just-In-Time
  (JIT) compiler.

  We choose memory hierarchy optimizations as an example of
  machine-dependent techniques.  We show that there is an intersection
  of the set of machine-dependent optimizations and the set of
  high-level optimizations.  One such example is array remapping which
  requires multi-dimensional array references which are not present in
  the bytecodes and at the same time requires information about memory
  organization and the mapping of bytecodes to machine instructions.

  We develop a set of optimizations for accessing array elements and
  object fields and show their impact on set of benchmarks which we
  run on two machines with a JIT compiler.  The execution times are
  reduced by as much as 50\% and we argue that the improvement could
  be even higher with a more mature JIT technology.
}
%\end{abstract}

