Excelsior Library

Technical Publications

Articles written by Excelsior engineers that appeared or could have appeared in professional media.

Convert Java to EXE - Why, When, When Not and How

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.

The first version of this article appeared on Javalobby (www.javalobby.org) on June 22nd, 2005.

Protect Your Java Code — Through Obfuscators And Beyond Updated

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 who want to get their feet wet in the Amazon cloud.

Unbearable Lightness of Localizing Java Applications

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.

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.

LinuxWorld Logo

Vitaly Mikheev. Improving Swing Performance: JIT vs AOT Compilation
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.

Research Publications

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.

Compiler Construction

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

Abstract. 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.

PDF, 447K
(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

Abstract. 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.

Postscript, 450K

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.

Abstract. 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.

PDF, 120K

V.V. Mikheev
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.

Abstract. 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 object-oriented optimizations.

PostScript, 467K

Debugger Construction

A.V. Yeryomin
The Architecture Of A Highly Configurable Debugging Environment. (in Russian)
The Problems of Programming , No. 3-4, pag. 89-102, Ukraine, Kiev, 2000.

Abstract. 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.

Static Analysis

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.

Abstract. 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.

PostScript, 149K

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

Abstract. 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.

PostScript, 158K