Articles written by Excelsior engineers that appeared or could have appeared in professional media.
UPDATED Dmitry Leskov
Convert Java to EXE - Why, When, When Not and How
First appeared on Javalobby (www.javalobby.org) on June 22nd, 2005.
The simple fact that Java applications need a JRE to run makes their
deployment a more complicated task than if they were native executables.
This article presents the ways of transforming a Java program into a
native executable, as well as alternative ways to achieve the same goals.
The Resources section points to numerous related documents, articles and tools.
UPDATED Dmitry Leskov
Protect Your Java Code - Through Obfuscators And Beyond
A beginner's guide to Java code protection, showing where
obfuscation falls short and what can be done about that.
Cat in the Cloud: Apache Tomcat in Amazon EC2. Part I - The Basics
Cat in the Cloud: Apache Tomcat in Amazon EC2. Part II - Taking Control Over Your Java Stack
Cat in the Cloud: Apache Tomcat in Amazon EC2. Part III - Advanced Topics
A step-by-step guide for Java Web application developers
wanting to get their feet wet in the Amazon cloud.
Unbearable Lightness of Localizing Java Applications
First appeared on Java Boutique (javaboutique.internet.com), edited and under the name “Avoid the Lesser Known Pitfalls of Localizing Java Applications” in September 2005.
Preparing a localized version of a Java desktop application is
supposed to be an easy and well-documented task, but that's not
always the case. Find out about the small problems involved that
typically fall under the radar of most tutorials.
Improving Swing Performance: JIT vs AOT Compilation
Vitaly Mikheev, LinuxWorld, November 2004, Volume 2, Issue 11
The Excelsior Engineering Team has ported Excelsior JET, a Java Virtual Machine (JVM) with an ahead-of-time compiler, to the Linux/x86 platform. As the JET JVM supports the entire J2SE platform API including the Java Foundation Classes (JFC/Swing), Excelsior engineers had an opportunity to evaluate the response time of natively compiled JFC/Swing on Linux. The results of the comparison with conventional, dynamically optimizing JVMs were encouraging: response time has improved by 40% or even doubled on some benchmarks. What's more important is that real-world Swing applications performed perceivably faster.
This article describes Excelsior JET JVM and JFCMark, free benchmark software by Excelsior that measures Swing-based GUI performance. Moreover, the authors share their technical experience in optimizing JFC/Swing and argue why ahead-of-time Java compilation has advantages over dynamic compilation for certain application types.
Residing in the Novosibirsk Scientific Center, Excelsior conducts research
in several Computer Science disciplines in tight collaboration with our
colleagues in the Institute of Informatics Systems (IIS), Siberian Branch of Russian
Academy of Sciences.
On this page, you will find several research publications that are result
of Excelsior's or joint Excelsior's and IIS' activity.
V Mikheev et al.
Overview of Excelsior
JET, a high performance alternative to Java virtual machines
in Proc. of the third international workshop on Software and performance, WOSP'02,
ACM Press, 2002
This paper describes the architecture of Excelsior JET, a Java optimizing
environment based upon ahead-of-time compilation of Java bytecode to
platform-specific (native) code. Advantages of static compilation
originate from the possibility of employing powerful resource-expensive
optimizations resulting in much better code quality than in the case of
dynamic (just-in-time) complation implemented in contemporary Java
Virtual Machines (JVMs). Moreover, a noticeable innovation of JET is
the Mixed Compilation Model that allows a compiled program to load
classes dynamically as the Java Language Specification requires.
Along with a highly optimizing compiler, JET includes a scalable
run-time system that provides effective memory management with
garbage collection, threading, etc. The experimental results presented
in the paper were obtained on a variety of benchmarks and real-world
Java applications. Tested against two most popular JVMs (Sun HotSpot
and IBM JIT), programs optimized by JET demonstrated better performance
and lower resource demand in most cases.
(requires ACM Digital Library login)
V. Mikheev, S. Fedoseev, V. Sukharev, N. Lipsky
Effective Enhancement of Loop Versioning in Java.
in Proc. of 11th International Conference Compiler Construction, CC 2002,
Lecture Notes in Computer Science, No. 2304, Springer-Verlag, 2002
Run-time exception checking is required by the Java Language Specification (JLS).
Though providing higher software reliability, that mechanism negatively affects
performance of Java programs, especially those computationally intensive.
This paper pursues loop versioning, a simple program transformation which
often helps to avoid the checking overhead. Basing upon the Java Memory
Model precisely defined in JLS, the work proposes a set of sufficient conditions
for applicability of loop versioning. Scalable intra- and interprocedural
analyses that efficiently check fulfilment of the conditions are also
described. Implemented in Excelsior JET, an ahead-of-time compiler for Java,
the developed technique results in significant performance improvements
on some computational benchmarks.
V.V. Mikheev, S.A. Fedoseev
Compiler-Cooperative Memory Management in Java.
In Proc. of the Andrei Ershov Fourth International Conference
"Perspectives of System Informatics", Lecture Notes in Computer Science, No. 2244, Springer-Verlag, 2001.
Dynamic memory management is a known performance bottleneck of Java applications.
The problem arises out of the Java memory model in which all objects
(non-primitive type instances) are allocated on the heap and reclaimed by garbage
collector when they are no longer needed. This paper presents a simple and fast
algorithm for inference of object lifetimes. Given the analysis results, a Java
compiler is able to generate faster code, reducing the performance overhead.
Besides, the obtained information may be then used by garbage collector to perform
more effective resource clean-up. Thus, we consider this technique as
"compile-time garbage collection" in Java.
Design of Multilingual Retargetable Compilers: Experience of the XDS Framework Evolution.
In Proc. of the Joint Modular Language Conference '2000, Lecture Notes in Computer Science, No. 1897, Springer-Verlag, 2000.
The XDS framework has been developed since 1993. During this time, it has been
serving as a production compiler construction framework as well as a base for
research projects. Completely written in Oberon-2, XDS uses a mixed design
technique amalgamating modular and object-oriented approaches. It combines
advantages of both approaches, at the same time avoiding drawbacks inherent to
each of them if used separately. In this paper we set out how the mixed design
approach contributes to extensibility of the framework with respect to including
support for new input languages and target architectures and implementing new
optimizations. In the first part of the paper we give an overview of the XDS
framework architecture emphasizing which parts are worth applying the
object-oriented design. In the second part, we describe our experience of extending XDS
with support for the Java language and implementing interprocedural and
The Architecture Of A Highly Configurable Debugging Environment. (in Russian)
The Problems of Programming , No. 3-4, pag. 89-102, Ukraine, Kiev, 2000.
A set of factors is considered that are to be taken into account when designing
architecture of a highly configurable debugging environment. Major requirements
and criteria that such environment has to satisfy are listed. A debugging
environment is defined as a series of high-level routines implementing main
actions constituting the process of program debugging. In the second part of
the article, architecture of a debugging environment satisfying the above criteria
is described. Main functional components and their interactions are defined.
Principles of implementation in case of remote debugging are outlined.
In the conclusion, the results achieved by the author are cited, which
contribute both to the improvement of debugging technologies in general and
to practical implementation of a particular system.
V.I. Shelekhov, S.V. Kuksenko.
Data Flow Analysis of Java Programs in the Presence of Exceptions
Lecture Notes in Computer Science, No. 1755, Springer-Verlag, 1999.
For data flow analysis of Java program to be correct and precise,
the flows induced by exceptions must be properly analysed. In our
data flow analysis, the implicit control flow for a raised exception is
represented explicitly. Exception branches, exception plateaus, and exception
exits for methods and method calls are introduced as additional control
flow structures for analysis of exception handling. These structures are
constructed dynamically under control of data flow analysis.
V.I. Shelekhov, S.V. Kuksenko.
On the Practical Static Checker of Semantic Run-time Errors.
In Proc. of the 6th Asia Pacific Software Engineering Conference APSEC'99, Japan. IEEE Computer Society Press, 1999
The available static analysers of run-time errors
cannot find the most part of real errors and are able
to generate only long lists of warnings. In this paper,
we determine the conditions of a definite error and
propose the list of program analyses imposed by these conditions.
The static error checker OSA based on effective algorithm of
powerful context-sensitive data flow analysis with the approximation
of definite use-def relations is developed.