This paper presents a new static type system for multi-threaded programs;any well-typed program in our system is free of data races. Our type system is significantly more expressive than previous such type systems. In...
详细信息
This paper presents a new static type system for multi-threaded programs;any well-typed program in our system is free of data races. Our type system is significantly more expressive than previous such type systems. In particular, our system lets programmers write generic code to implement a class, then create different objects of the same class that have different protection mechanisms. This flexibility enables programmers to reduce the number of unnecessary synchronization operations in a program without risking data races. We also support default types which reduce the burden of writing the extra type annotations. Our experience indicates that our system provides a promising approach to make multithreaded programs more reliable and efficient.
We present Jiazzi, a system that enables the construction of large-scale binary components in Java. Jiazzi components can be though of as generalizations of Java packages with added support for external linking and se...
详细信息
We present Jiazzi, a system that enables the construction of large-scale binary components in Java. Jiazzi components can be though of as generalizations of Java packages with added support for external linking and separate compilation. Jiazzi components are practical because they are constructed out of standard Java source code. Jiazzi requires neither extensions to the Java language nor special conventions for writing Java source code that will go inside a component. Our components are expressive because Jiazzi supports cyclic component linking and mixins, which are used together in an open class pattern that enables the modular addition of new features to existing classes. This paper describes Jiazzi, how it enhances Java with components, its implementation, and how type checking works. An implementation of Jiazzi is available for download.
A large collection of Java™ applications and the highly tuned and widely used Boehn-Demers-Weiser (BDW) conservative mark-up-and-sweep garbage collector were used to experimentally examine the extent to which the freq...
详细信息
A large collection of Java™ applications and the highly tuned and widely used Boehn-Demers-Weiser (BDW) conservative mark-up-and-sweep garbage collector were used to experimentally examine the extent to which the frequency of garbage collection impacts an application's execution time, footprint, and pause times. The results were used to device some guidelines for controlling garbage collection and heap growth in a conservative garbage collector to minimize application execution times. Strategies were then considered for controlling garbage collections and heap growth that impact not only the frequency with which garbage collection occurs but also the points at which garbage collection occurs. Results demonstrate that, when compared with the existing approach used in the standard BDW collector, the new strategy can significantly reduce application execution times.
Single superclass inheritance enables simple and efficient table-driven virtual method dispatch. However, virtual method table dispatch does not handle multiple inheritance and interfaces. This complication has led to...
详细信息
Single superclass inheritance enables simple and efficient table-driven virtual method dispatch. However, virtual method table dispatch does not handle multiple inheritance and interfaces. This complication has led to a widespread misimpression that interface method dispatch is inherently inefficient. This paper argues that with proper implementation techniques, Java interfaces need not be a source of significant performance degradation. We present an efficient interface method dispatch mechanism, associating a fixed-sized interface method table (IMT) with each class that implements an interface. Interface method signatures hash to an IMT slot, with any hashing collisions handled by custom-generated conflict resolution stubs. The dispatch mechanism is efficient in both time and space. Furthermore, with static analysis and online profile data, an optimizing compiler can inline the dominant target(s) of any frequently executed interface call. Micro-benchmark results demonstrate that the expected cost of an interface method call dispatched via an IMT is comparable to the cost of a virtual method call. Experimental evaluation of a number of interface dispatch mechanisms on a suite of larger applications demonstrates that, even for applications that make only moderate use of interface methods, the choice of interface dispatching mechanism can significantly impact overall performance. Fortunately, several mechanisms provide good performance at a modest space cost.
Optimizing exception handling is critical for programs that frequently throw exceptions. We observed that there are many such exception-intensive programs in various categories of Java programs. There are two commonly...
详细信息
Optimizing exception handling is critical for programs that frequently throw exceptions. We observed that there are many such exception-intensive programs in various categories of Java programs. There are two commonly used exception handling techniques, stack unwinding and stack cutting. Stack unwinding optimizes the normal path, while stack cutting optimizes the exception handling path. However, there has been no single exception handling technique to optimize both paths. We propose a new technique called Exception-Directed Optimization (EDO), which optimizes exception-intensive programs without slowing down exception-minimal programs. EDO, a feedback-directed dynamic optimization, consists of three steps, exception path profiling, exception path inlining, and throw elimination. Exception path profiling attempts to detect hot exception paths. Exception path inlining compiles the catching method in a hot exception path, inlining the rest of methods in the path. Throw elimination replaces a throw with the explicit control flow to the corresponding catch. We implemented EDO in IBM's production Just-in-Time compiler, and obtained the experimental results, which show that, in SPECjvm98, it improved performance of exception-intensive programs by up to 18.3% without affecting performance of exception-minimal programs at all.
The proceedings contains 26 papers from the conference on object-orientedprogramming, systems, languages, and applications. The topics discussed include: improving the java memory model;exclusion for composite object...
详细信息
The proceedings contains 26 papers from the conference on object-orientedprogramming, systems, languages, and applications. The topics discussed include: improving the java memory model;exclusion for composite objects;object-oriented real-time concurrency;adaptive optimization in the Jalapeno java virtual machines (JVM);sealed calls in java packages;a real world object modeling method for creating simulation environment of real-time systems;formal specification of corba services: experience and lessons learned;middleware object query processing with deferred updates and autonomous sources and;safely creating correct subclasses without seeing superclass code.
An object encoding translates a language with object primitives to one without. Similarly, a class encoding translates classes into other primitives. Both are important theoretically for comparing the expressive power...
详细信息
An object encoding translates a language with object primitives to one without. Similarly, a class encoding translates classes into other primitives. Both are important theoretically for comparing the expressive power of languages and for transferring results from traditional languages to those with objects and classes. Both are also important foundations for the implementation of object-orientedlanguages as compilers typically include a phase that performs these translations. This paper describes a language with a primitive notion of classes and objects and presents an encoding of this language into one with records and functions. The encoding uses two techniques often used in compilers for single-inheritance class-based object-orientedlanguages: the self-application semantics and the method-table technique. To type the output of the encoding, the encoding uses a new formulation of self quantifiers that is more powerful than previous approaches.
The unrelenting pace of change that confronts contemporary software developers compels them to make their applications more configurable, flexible, and adaptable. A possible way to meet such requirements is to use an ...
详细信息
暂无评论