Results 1 - 10
of
15
An Easy-to-Use Toolkit for Efficient Java Bytecode Translators
- In 2nd International coference on Generative Programming and Component Engineering (GPCE ’03), volume 2830 of Springer Lecture Notes in Computer Science
, 2003
"... This paper presents our toolkit for developing a Java-bytecode translator. Bytecode translation is getting important in various domains such as generative programming and aspect-oriented programming. To help the users easily develop a translator, the design of our toolkit is based on the reflective ..."
Abstract
-
Cited by 88 (1 self)
- Add to MetaCart
(Show Context)
This paper presents our toolkit for developing a Java-bytecode translator. Bytecode translation is getting important in various domains such as generative programming and aspect-oriented programming. To help the users easily develop a translator, the design of our toolkit is based on the reflective architecture. However, the previous implementations of this architecture involved serious runtime penalties. To address this problem, our toolkit uses a custom compiler so that the runtime penalties are minimized. Since the previous version of our toolkit named Javassist has been presented in another paper, this paper focuses on this new compiler support for performance improvement. This feature was not included in the previous version.
Partial Behavioral Reflection: Spatial and Temporal Selection of Reification
, 2003
"... Behavioral reflection is a powerful approach for adapting the behavior of running applications. In this paper we present and motivate partial behavioral reflection, an approach to more e#cient and flexible behavioral reflection. We expose the spatial and temporal dimensions of such reflection, and p ..."
Abstract
-
Cited by 84 (14 self)
- Add to MetaCart
Behavioral reflection is a powerful approach for adapting the behavior of running applications. In this paper we present and motivate partial behavioral reflection, an approach to more e#cient and flexible behavioral reflection. We expose the spatial and temporal dimensions of such reflection, and propose a model of partial behavioral reflection based on the notion of hooksets. In the context of Java, we describe a reflective architecture o#ering appropriate interfaces for static and dynamic configuration of partial behavioral reflection at various levels, as well as Reflex, an open reflective extension for Java implementing this architecture. Reflex is the first extension that fully supports partial behavioral reflection in a portable manner, and that seamlessly integrates load-time and runtime behavioral reflection. The paper shows preliminary benchmarks and examples supporting the approach. The examples, dealing with the observer pattern and asynchronous communication via transparent futures, also show the interest of partial behavioral reflection as a tool for open dynamic Aspect-Oriented Programming.
Advanced java bytecode instrumentation
- PPPJ
, 2007
"... Bytecode instrumentation is a valuable technique for trans-parently enhancing virtual execution environments for pur-poses such as monitoring or profiling. Current approaches to bytecode instrumentation either exclude some methods from instrumentation, severely restrict the ways certain methods may ..."
Abstract
-
Cited by 26 (10 self)
- Add to MetaCart
Bytecode instrumentation is a valuable technique for trans-parently enhancing virtual execution environments for pur-poses such as monitoring or profiling. Current approaches to bytecode instrumentation either exclude some methods from instrumentation, severely restrict the ways certain methods may be instrumented, or require the use of native code. In this paper we compare different approaches to bytecode in-strumentation in Java and come up with a novel instrumen-tation framework that goes beyond the aforementioned lim-itations. We evaluate our approach with an instrumentation for profiling which generates calling context trees of various platform-independent dynamic metrics.
Platform-independent Profiling in a Virtual Execution Environment
, 2002
"... Virtual execution environments, such as the Java Virtual Machine, promote platform-independent software development. However, when it comes to analyzing algorithm complexity and performance bottlenecks, available tools focus on platform-specific metrics, such as e.g. the CPU time consumption on a pa ..."
Abstract
-
Cited by 19 (6 self)
- Add to MetaCart
Virtual execution environments, such as the Java Virtual Machine, promote platform-independent software development. However, when it comes to analyzing algorithm complexity and performance bottlenecks, available tools focus on platform-specific metrics, such as e.g. the CPU time consumption on a particular system. Other drawbacks of many prevailing profiling tools are high overhead, significant measurement perturbation, as well as reduced portability of profiling tools, which are often implemented in platformdependent native code. This article presents a novel profiling approach, which is entirely based on program transformation techniques, in order to build a profiling data structure that provides calling-contextsensitive program execution statistics. We explore the use of platform-independent profiling metrics, in order to make the instrumentation entirely portable and to generate reproducible profiles. We implemented these ideas within a Java-based profiling tool called JP. A significant novelty is that this tool achieves complete bytecode coverage, by statically instrumenting the core runtime libraries, and dynamically instrumenting the rest of the code. JP provides a small and flexible API to write customized profiling agents in pure Java, which are periodically activated to process the collected profiling information. Performance measurements point out that, despite the presence of dynamic instrumentation, JP causes significantly less overhead than a prevailing tool for the profiling of Java code.
Using Bytecode Instruction Counting as Portable CPU Consumption Metric
- Electr. Notes Theor. Comput. Sci
, 2006
"... Accounting for the CPU consumption of applications is crucial for software development to detect and remove performance bottlenecks (profiling) and to evaluate the performance of algorithms (benchmarking). Moreover, extensible middleware may exploit resource consumption information in order to detec ..."
Abstract
-
Cited by 9 (3 self)
- Add to MetaCart
(Show Context)
Accounting for the CPU consumption of applications is crucial for software development to detect and remove performance bottlenecks (profiling) and to evaluate the performance of algorithms (benchmarking). Moreover, extensible middleware may exploit resource consumption information in order to detect a resource overuse of client components (detection of denial-of-service attacks) or to charge clients for the resource consumption of their deployed components. The Java Virtual Machine (JVM) is a predominant target platform for application and middleware developers, but it currently lacks standard mechanisms for resource management. In this paper we present a tool, the Java Resource Accounting Framework, Second Edition (J-RAF2), which enables precise CPU management on standard Java runtime environments. J-RAF2 employs a platform-independent CPU consumption metric, the number of executed JVM bytecode instructions. We explain the advantages of this approach to CPU management and present five case studies that show the benefits in different settings.
a]C#: C# with a Customizable Code Annotation Mechanism
- In Proceedings of the 10th Annual ACM Symposium on Applied Computing (SAC’05
, 2005
"... Reflective programming is becoming popular due to the increasing set of dynamic services provided by execution environments like JVM and CLR. With custom attributes Microsoft introduced an extensible model of reflection for CLR: they can be used as additional decorations on element declarations. The ..."
Abstract
-
Cited by 5 (2 self)
- Add to MetaCart
(Show Context)
Reflective programming is becoming popular due to the increasing set of dynamic services provided by execution environments like JVM and CLR. With custom attributes Microsoft introduced an extensible model of reflection for CLR: they can be used as additional decorations on element declarations. The same notion has been introduced in Java 1.5. The extensible model proposed in both platforms limits annotations to class members. In this paper we describe [a]C#, 1 an extension of the C # programming language, that allows programmers to annotate statements or code blocks and retrieve these annotations at run-time. We show how this extension can be reduced to the existing model. A set of operations on annotated code blocks to retrieve annotations and manipulate bytecode is introduced. Finally, we discuss how to use [a]C # to annotate programs giving hints on how to parallel a sequential method and how it can be implemented by means of the abstractions provided by the run-time of the language.
Program transformations for light-weight cpu accounting and control in the java virtual machine. Higher Order Symbol
- Comput
, 2008
"... Abstract. This article constitutes a thorough presentation of an original scheme for portable CPU accounting and control in Java, which is based on program transformation techniques at the bytecode level and can be used with every standard Java Virtual Machine. In our approach applications, middlewa ..."
Abstract
-
Cited by 5 (0 self)
- Add to MetaCart
(Show Context)
Abstract. This article constitutes a thorough presentation of an original scheme for portable CPU accounting and control in Java, which is based on program transformation techniques at the bytecode level and can be used with every standard Java Virtual Machine. In our approach applications, middleware, and even the standard Java runtime libraries (i.e., the Java Development Kit) are modified in a fully portable way, in order to expose details regarding the execution of threads. These transformations however incur a certain overhead at runtime. Further contributions of this article are the systematic review of the origin of such overheads and the description of a new static path prediction scheme targeted at reducing them.
Flexible Bytecode for Linking in .NET
, 2005
"... Dynamic linking in modern execution environments like .NET is considerably more sophisticated than in the days of C shared libraries on UNIX. One aspect of this sophistication is that .NET assemblies embed type information about dynamically linked resources. ..."
Abstract
-
Cited by 3 (2 self)
- Add to MetaCart
Dynamic linking in modern execution environments like .NET is considerably more sophisticated than in the days of C shared libraries on UNIX. One aspect of this sophistication is that .NET assemblies embed type information about dynamically linked resources.
Departement Informatica en Toegepaste Informatica
"... Met de huidige evoluerende netwerken worden netwerk vertraging en beschikbaarheid kritieke factoren voor de performantie van mobiele toepassingen. Dit document onderzoekt application streaming, een techniek die gebruik maakt van het parallelisme tussen het laden en uitvoeren van een toepassing om de ..."
Abstract
- Add to MetaCart
Met de huidige evoluerende netwerken worden netwerk vertraging en beschikbaarheid kritieke factoren voor de performantie van mobiele toepassingen. Dit document onderzoekt application streaming, een techniek die gebruik maakt van het parallelisme tussen het laden en uitvoeren van een toepassing om deze problemen te elimineren. Het laat toe een toepassing te migreren van zender naar ontvanger zonder uitvoeringstijd op te offeren, en het houdt de toepassing ten allen tijde beschikbaar. We tonen de haalbaarheid en voordelen van deze techniek aan, aan de hand van resultaten uit experimenten geïmplementeerd in Java. We staan stil bij verschillende problemen die we tegengekomen zijn tijdens het implementeren van de experimenten, en geven mogelijke oplossingen aan. We bieden ook een aantal design regels en migratie strategieën, die gebruikt kunnen worden om nieuwe mobiele toepassingen te ontwikkelen zodat ze kunnen migreren alsof er geen netwerk vertraging is.Vrije Universiteit Brussel
JOURNAL OF OBJECT TECHNOLOGY
"... Execution environments like Java Virtual Machine and Microsoft CLR rely on executables containing information about types and their structure. Method bodies are expressed in an intermediate language rather than machine dependent code to allow verification. Although intermediate language and metadata ..."
Abstract
- Add to MetaCart
Execution environments like Java Virtual Machine and Microsoft CLR rely on executables containing information about types and their structure. Method bodies are expressed in an intermediate language rather than machine dependent code to allow verification. Although intermediate language and metadata are required by the execution engine, the information available can be used for other purposes. In this paper we present an application that relies on the rich binary format of CLR to translate the intermediate language code into Lego Mindstorms bytecode. All programming languages targeting the Common Language Infrastructure can be used to program the programmable Lego brick. We exploit the information available to automatically distribute a program between a robot with very limited abilities and a standard PC. 1