Using the ASM framework to implement common Java bytecode transformation patterns

Size: px
Start display at page:

Download "Using the ASM framework to implement common Java bytecode transformation patterns"

Transcription

1 Using the ASM framework to implement common Java bytecode transformation patterns Eugene Kuleshov, ABSTRACT Most AOP frameworks targeting the Java platform use a bytecode weaving approach as it is currently considered the most practical solution. It allows applying cross-cutting concerns to Java applications when source code is not available, is portable and works on existing JVMs, in comparison to VM-level AOP implementations. Load-time bytecode weaving (LTW), which happens right before the application code is loaded into the Java VM, significantly simplifies development environment, but also raises the bar for the performance and memory requirements for these transformations. Such requirements directly apply to the toolkit that will be used to perform these transformations. In this paper, we examine how Java bytecode transformations, typical for AOP implementations can be done efficiently, using the ASM 1 bytecode manipulation framework [1]. Transformations used by general-use AOP frameworks and similar applications can be categorized, and the common patterns can be reused to implement specific transformations. These patterns can also be combined to implement more complex transformations. General Terms Languages, Design, Performance, Experimentation, Standardization Keywords Aspect-Oriented Programming, Java, bytecode, weaving, ASM 1. INTRODUCTION The ASM bytecode framework was designed at France Telecom R&D by Eric Bruneton, Romain Lenglet and Thierry Coupaye [2]. After evaluating several existing frameworks, including BCEL [3], Serp [4] and JOIE [5], they designed a more efficient approach, providing better performance and memory foot print. Today ASM is used in many applications and has become the defacto standard for bytecode processing. The main idea of the ASM API [6] is not to use an object representation of the bytecode. This made it possible expressing the same transformations using only a few classes comparing to approximately 80 classes in Serp and 270 in BCEL API. Those frameworks create lots of objects during class deserialization, which takes a lot of time and memory. ASM avoids this overhead to keep transformation fast and to use very little memory. This is done by using the Visitor design pattern [7], without representing 1 The ASM name does not mean anything: it is just a reference to the keyword in C which allows some functions to be implemented in assembly language. the visited tree with objects. Visitors can change call chains and therefore transform the visited code. Using the Adapter design pattern [7] visitors can be chained in order to implement complex transformation from smaller building blocks. A similar approach is also used in the SAX API for XML processing [8]. ASM hides all the complexity of the serialization and deserialization of the class bytecode, using the following techniques: Automatic management of the class constant pool, therefore the user does not have to manipulate indexes of these constants. Automatic management of the class structure, including annotations, fields, methods, method code and other standard bytecode attributes. Labels are used to manage instruction addresses, so it is easy to insert new code in between existing instructions Computation of maximum stack and local variables, as well as StackMapFrames The event-based interaction between event producers and event consumers is defined by several interfaces: ClassVisitor, FieldVisitor, MethodVisitor, and AnnotationVisitor. Event producers, like ClassReader fire visit*() calls to those interfaces. On the other hand, event receivers like writers (ClassWriter, FieldWriter, MethodWriter, and AnnotationWriter), adapters (ClassAdapter and MethodAdapter) or classes from the tree package (ClassNode, MethodNode, etc) implementing those interfaces. The following code demonstrates how this looks from the developer s point of view: ClassReader cr = new ClasReader(bytecode); ClassWriter cw = new ClassWiter(cr, ClassWriter.COMPUTE_MAXS ClassWriter.COMPUTE_FRAMES); FooClassAdapter cv = new FooClassAdapter(cw); cr.accept(cv, 0); Here ClassReader reads the bytecode. On accept() method call ClassReader fires all visiting events corresponding to the bytecode structure. FooClassAdapter will receive those events and can change the event flow before passing them to the ClassWriter. Once ClassWriter receive all the events it will have transformed bytecode. You may notice that the ClassReader instance is passed to the ClassWriter that allows performance optimizations based on the assumption that the transformations mostly add new code. The following sections will show a number of practical examples that should help you to better understanding of the ASM framework.

2 2. Accessing class data The visitor-based approach allows capturing class data incrementally, collecting only the information required for specific use case without creating and destroying lots of shortlived objects. Incremental processing allows decisions such as whether or not part of the class needs to be transformed, skipping parsing of class parts that don t need to be transformed. ASM provide very simple API to support this. First of all there are several bit-mask flags in the ClassReader.accept() method: SKIP_DEBUG Used to ignore debug info, such as source file, line number and variable info. SKIP_FRAMES Used to ignore StackMapTable information used for Java 6 split bytecode verifier. EXPAND_FRAMES Expand the StackMapTable data, allowing visitor to have information on types of all local variables and current stack slots. SKIP_CODE Exclude code of all methods from visiting, while still passing trough method s and parameter s attributes and annotations. Additionally, the visitor can decide to skip the corresponding bytecode section it is not interested in. In order to do that, visitfield(), visitmethod() and visitannotation() methods that returns nested visitor can return null. That will indicate to the bytecode producer to skip the corresponding class element. When there is no need to read class data, but just the class hierarchy, ClassReader provides shortcut methods getsupername() and getinterfaces() to read super class and implemented interfaces, respectively. It is also possible use the tree package of ASM framework to read the entire class or selected method in memory and change its structures using DOM-like API. For example: ClassReader cr = new ClassReader(source); ClassWriter cw = new ClassWriter(); ClassAdapter ca = new ClassAdapter(cw) { public MethodVisitor visitmethod(int access, String name, String desc, String signature, String[] exceptions) { final MethodVisitor mv = super.visitmethod(access, name, desc, signature, exceptions); MethodNode mn = new MethodNode(access, name, desc, signature, exceptions) { // transform/analyze this method DOM accept(mv); ; return mn; ; cr.accept(ca, 0); The above code will basically suspend passing method events to the next visitor in the chain (i.e. ClassWriter in this case) until the visitend() event. When visitend() is passed, the MethodNode instance will contain the entire method data. At this point the method data can be transformed and only after that, finally passed to the next visitor using the MethodNode.accept() method. It is worth mentioning that ASM provides several basic Data Flow Analysis algorithms that work on the tree package and can be used to analyze selected methods in isolation. The result of such analysis can be also used for inter-method analysis. Combining those features it is possible to retrieve required class information with very controlled memory overhead by making decisions on the required transformations at load time. In the next sections we will see concrete examples of the bytecode transformations typical for AOP. 3. COMMON TRANSFORMATIONS AOP frameworks that are using load time transformations usually build their own high-level abstractions about how application code needs to be transformed. Those abstractions can be decomposed into smaller building blocks that can be chained together to achieve the required transformation. Here are most common use cases: Class Transformations Introduce Interface Add a New Field Add a New Method Replace Method Body Merge Two Classes into One Method Transformations Insert Code before Method, Constructor or Static Initializer Execution Insert Code before Method Exit Replace Field Access Replace Method Call Inline Method 3.1 Class Transformations Introducing Interface This transformation only changes the class information about the implemented interfaces. We can use simple ClassAdapter for this: public class InterfaceAdder extends ClassAdapter { private Set newinterfaces; public InterfacesAdder(ClassVisitor cv, Set newinterfaces) { this.newinterfaces = newinterfaces; public void visit(int version, int access, String name, String signature, String supername, String[] interfaces) { Set ints = new HashSet(newInterfaces); ints.addall(arrays.aslist(interfaces)); cv.visit(version, access, name, signature, supername, (String[]) ints.toarray()); Note, the actual methods required to implement the introduced interfaces must be added with a separate transformation, which will be discussed shortly.

3 3.1.2 Adding a New Field Adding new fields to an existing class is a common transformation. Usually it is used to enrich class state with additional data. Here is a ClassAdapter that adds new field: public class FieldAdder extends ClassAdapter { private final FieldNode fn; public FieldAdder(ClassVisitor cv, FieldNode fn) { this.fn = fn; fn.accept(cv); super.visitend(); The above adapter introduces new events in the visitend() method, which is called at the end of visiting class data. So, the field will be added after existing fields, which is the safest way, just in case some other code relies on the field order. In the above code new events are fired by FieldNode instance on accept() call. This allows reusing field definition, including annotations or even custom attributes, in case if same field need to be added to many classes. Note that non-static field initialization should be done separately, for example by adding code after constructor invocation, or for static fields, at the end of the static block. Those transformations will be discussed later in the paper Adding a New Method New methods can be added for implementing newly introduced interface or for internal needs. The class adapter for this can also use visitend() method to add new method to the class. public class MethodAdder extends ClassAdapter { private int maccess; private String mname; private String mdesc; private String msignature; private String[] mexceptions; public MethodAdder(ClassVisitor cv, int mthaccess, String mthname, String mthdesc, String mthsignature, String[] mthexceptions) { this.maccess = mthaccess; this.mname = mthname; this.mdesc = mthdesc; this.msignature = mthsignature; this.mexceptions = mthexceptions; MethodVisitor mv = cv.visitmethod(maccess, mname, mdesc, msignature, mexceptions); // create method body mv.visitmaxs(0, 0); mv.visitend(); super.visitend(); Replace Method Body This transformation is a variation of the transformation for adding a new method. In this case, the difference is that new method generation is triggered by the visitmethod() call for a method that needs to be renamed, as opposed to visitend() event: public class MethodReplacer extends ClassAdapter { private String mname; private String mdesc; private String cname; public MethodReplacer(ClassVisitor cv, String mname, String mdesc) { this.mname = mname; this.mdesc = mdesc; public void visit(int version, int access, String name, String signature, String supername, String[] interfaces) { this.cname = name; cv.visit(version, access, name, signature, supername, interfaces); public MethodVisitor visitmethod(int access, String name, String desc, String signature, String[] exceptions) { String newname = name; if(name.equals(mname) && desc.equals(mdesc)) { newname = "orig$" + name; generatenewbody(access, desc, signature, exceptions, name, newname); return super.visitmethod(access, newname, desc, signature, exceptions); private void generatenewbody(int access, String desc, String signature, String[] exceptions, String name, String newname) { MethodVisitor mv = cv.visitmethod(access, name, desc, signature, exceptions); // mv.visitcode(); // call original metod mv.visitvarinsn(opcodes.aload, 0); // this mv.visitmethodinsn(access, cname, newname, desc); // mv.visitend(); In the above visitmethod() checks method body should be replaced. If it should, it uses generates new method body and then replaces the method name and delegates to the next visitor in the chain. This way body of the original method will be saved in the newly created method Merging Two Classes into One When adding the implementation of an introduced interface to transformed class, it is convenient to use an existing implementation of these methods from a separately compiled class. This second can be loaded into memory and used multiple times to copy class methods and fields. ClassReader cr = new ClasReader(bytecode); ClassNode cn = new ClassNode(); cr.accept(cn, 0);

4 Then we can pass loaded ClassNode instance to the merging adapter: public class MergeAdapter extends ClassAdapter { private ClassNode cn; private String cname; public MergeAdapter(ClassVisitor cv, ClassNode cn) { this.cn = cn; public void visit(int version, int access, String name, String signature, String supername, String[] interfaces) { super.visit(version, access, name, signature, supername, interfaces); this.cname = name; for(iterator it = cn.fields.iterator(); it.hasnext();) { ((FieldNode) it.next()).accept(this); for(iterator it = cn.methods.iterator(); it.hasnext();) { MethodNode mn = (MethodNode) it.next(); String[] exceptions = new String[mn.exceptions.size()]; mn.exceptions.toarray(exceptions); MethodVisitor mv = cv.visitmethod( mn.access, mn.name, mn.desc, mn.signature, exceptions); mn.instructions.resetlabels(); mn.accept(new RemappingMethodAdapter( mn.access, mn.desc, mv, new Remapper(cname, cn.name))); super.visitend(); As you can see, fields and methods are copied from ClassNode into the visited class. Moreover, types referenced from the copied methods are remapped with the RemappingMethodAdapter to appropriately fit into the new target class. 3.2 Method Transformations The major difference of the method transformations from the class-level transformations is that they require additional filtering at the class level. ClassAdapter can be used to make this decision and if the method happens to be interested, additional MethodAdapter can be inserted at the execution chain. For example: public class FilterAdapter extends ClassAdapter { public MethodVisitor visitmethod( int acc, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = cv.visitmethod(acc, name, desc, signature, exceptions); if(isfoomethod(name, desc)) { mv = new FooMethodAdapter(mv, acc, return mv; Common Issues There are several common issues method transformers have to deal with. ASM provides the commons package that can make these issues easier to handle for the developer. Complexity of generating new code. For this issue GeneratorAdapter provides number of more high level building blocks that assist in the creation of common code idioms like boxing and unboxing from primitive types into object wrappers, loading method parameters, and a few others. Inserting new local variables in the middle of a method being visited is handled by LocalVariablesSorter, which can transparently rename method variables after new variables are inserted in the middle of the visited method. Dealing with the data flow and type system. There is, of course, no single solution for all the use cases, but ASM provides number of primitives that hide this complexity from the developer. One such primitive is AdviceAdapter that provides a convenient way to detect the right place in the bytecode to insert new code at the beginning of method execution and before exiting of the method. Let s look at more concrete use cases of the method transformations Insert Code before Method, Constructor or Static Initializer Execution As already mentioned above, this transformation is greatly simplified by subclassing AdviceAdapter. The developer implements onmethodenter() method called by the AdviceAdapter at the appropriate time. This implementation should not change stack and it could use methods inherited from LocalVariablesSorter for adding new local variables. class EnteringAdapter extends AdviceAdapter { private String name; private int timevar; private Label timevarstart = new Label(); private Label timevarend = new Label(); public PrintEnteringAdapter(MethodVisitor mv, int acc, String name, String desc) { super(mv, acc, this.name = name; protected void onmethodenter() { visitlabel(timevarstart); int timevar = newlocal(type.gettype("j")); visitlocalvariable("timevar", "J", null, timevarstart, timevarend, timevar); super.visitfieldinsn(getstatic, "java/lang/system", "err", Ljava/io/PrintStream; ); super.visitldcinsn("entering " + name); super.visitmethodinsn(invokevirtual, "java/io/printstream", "println", "(Ljava/lang/String;)V");

5 public void visitmaxs(int stack, int locals) { visitlabel(timevarend); super.visitmaxs(stack, locals); Note how debug information is added for the timevar variable via the call to visitlocalvariable(), which allows us to see the value of this variable in the debugger when stepping trough transformed class in the debugger Insert Code before Method Exit Transformation for inserting code before the method exists is very similar to the transformation used to insert code before the start of the method. This time developer provides implementation of the onmethodexit() method. However, one difference is that opcode for the instruction that caused visited method to exit is passed as a parameter to onmethodexit() call and could be one of RETURN, IRETURN, FRETURN, ARETURN, LRETURN, DRETURN or ATHROW. More over, for all opcodes except RETURN, at the time onmethodexit() invoked, the top stack slot has the value that will be returned from the method, or exception that will be thrown when opcode is ATHROW: class ExitingAdapter extends AdviceAdapter { private String name; public ExitingAdapter(MethodVisitor mv, int acc, String name, String desc) { super(mv, acc, this.name = name; public void onmethodexit(int opcode) { mv.visitfieldinsn(getstatic, "java/lang/system", "err", "Ljava/io/PrintStream;"); if(opcode==athrow) { mv.visitldcinsn("exiting on exception " + name); else { mv.visitldcinsn("exiting " + name); mv.visitmethodinsn(invokevirtual, "java/io/printstream", "println", "(Ljava/lang/String;)V"); Obviously, this code won t catch the exception thrown from nested method calls and passed trough the caller method. To catch this case, we ll need to introduce try/finally block for the entire method body. In order to do that, we could use variant of the above adapter: class FinallyAdapter extends AdviceAdapter { private String name; private Label startfinally = new Label(); public FinallyAdapter(MethodVisitor mv, int acc, String name, String desc) { super(mv, acc, this.name = name; public void visitcode() { super.visitcode(); mv.visitlabel(startfinally); int maxlocals) { Label endfinally = new Label(); mv.visittrycatchblock(startfinally, endfinally, endfinally, null); mv.visitlabel(endfinally); onfinally(athrow); mv.visitinsn(athrow); mv.visitmaxs(maxstack, maxlocals); protected void onmethodexit(int opcode) { if(opcode!=athrow) { onfinally(opcode); private void onfinally(int opcode) { mv.visitfieldinsn(getstatic, "java/lang/system", "err", "Ljava/io/PrintStream;"); mv.visitldcinsn("exiting " + name); mv.visitmethodinsn(invokevirtual, "java/io/printstream", "println", "(Ljava/lang/String;)V"); Note that try/finally boundaries are defined by visitlabel() calls after visitcode() and before visitmaxs() calls, respective, for the start and the end of the try/finally block Replace Field Access Field access can be replaced with a method call in order to provide additional logic. A static delegation method can be created to substitute static field access and delegation instance method -- for substituting access to instance fields. Transformation of the method code looks like this: public class FieldAccessAdapter extends MethodAdapter implements Opcodes { private final String cname; private final Map adapters; public FieldAccessAdapter(MethodVisitor mv, String cname, Map adapters) { super(mv); this.cname = cname; this.adapters = adapters; public void visitfieldinsn(int opcode, String owner, String name, String desc) { Info info = matchinginfo(opcode, owner, if(info!=null) { super.visitmethodinsn(invokestatic, cname, info.adaptername, info.adapterdesc); return; super.visitfieldinsn(opcode, owner, Note that delegation methods should be generated separately using transformation for adding new methods to class described above. public void visitmaxs(int maxstack,

6 3.2.5 Replace Method Call Method call replacement is a common use case. This simple transformation can be simplified even more if the method call is replaced with a static delegation method in the same class. In that case, the method size won t increase and the method transformation can be implemented like this: public class MethodCallAdapter extends MethodAdapter implements Opcodes { private final String cname; private final Set infos; public MethodCallAdapter(MethodVisitor mv, String cname, Set infos) { super(mv); this.cname = cname; this.infos = infos; public void visitmethodinsn(int opcode, String owner, String name, String desc) { Info info = matchinginfo(opcode, owner, if(info!=null) { super.visitmethodinsn(invokestatic, cname, info.adaptername, info.adapterdesc); return super.visitmethodinsn(opcode, owner, Note that this transformation can t be used to intercept class construction (new in Java language). In the bytecode object construction represented by two separate instructions that can be far apart in the steam of events. First one is NEW opcode that creates not-initialized object instance of specified type. Before that instance could be used, <init> method of that instance has to be called using INVOKESPECIAL opcode. Code generated by java compilers make this even more complicated because result of NEW opcode is duped on the stack and duplicated reference is used as a result value. So, a transformation like this will obviously have to use some state machine or load the entire method in memory (i.e. using ASM tree package) and transform it directly. Such an example is beyond the scope of this paper. We are looking into the ways to generalize it and include into the ASM commons package Inline Method This transformation is very similar to the one used for merging two classes. So, we can also use content of the MethodNode to insert inlined code into some other method. However in this case we not only need to rename types, but we also need to replace all RETURN opcodes with jumps to the end of the method and make sure that try/catch blocks are in the right order. Here is an adapter that does that: public class MethodCallInliner extends LocalVariablesSorter { private final String oldclass; private final String newclass; private final MethodNode mn; private List blocks = new ArrayList(); private boolean inlining; private MethodCallInliner(int access, String desc, MethodVisitor mv, MethodNode mn, String oldclass, String newclass) { super(access, desc, mv); this.oldclass = oldclass; this.newclass = newclass; this.mn = mn; public void visitmethodinsn(int opcode, String owner, String name, String desc) { if(!canbeinlined(owner, name, desc)) { mv.visitmethodinsn(opcode, owner, return; Map map = Collections.singletonMap( oldclass, newclass); Remapper remapper = new Remapper(map); Label end = new Label(); inlining = true; mn.instructions.resetlabels(); mn.accept(new InliningAdapter(this, opcode==opcodes.invokestatic? Opcodes.ACC_STATIC : 0, desc, remapper, end)); inlining = false; super.visitlabel(end); public void visittrycatchblock(label start, Label end, Label handler, String type) { if(!inlining) { blocks.add(new CatchBlock(start, end, handler, type)); else { super.visittrycatchblock(start, end, handler, type); public void visitmaxs(int stack, int locals) { Iterator it = blocks.iterator(); while(it.hasnext()) { CatchBlock b = (CatchBlock) it.next(); super.visittrycatchblock(b.start, b.end, b.handler, b.type); super.visitmaxs(stack, locals); The above adapter extends LocalVariablesSorter in order to handle local variables from the inlined code. It is also captures visittrycatchblock() calls the end of the method and replay them back there. Inlined method code, icluding try/catch blocks and local variables is inserted from the MethodNode, decorared by InliningAdapter. This adapter does all type renaming and replacing of the RETURN opcodes is done in a nested adapter: public static class InliningAdapter extends RemappingMethodAdapter { private final LocalVariablesSorter lvs; private final Label end; public InliningAdapter(LocalVariablesSorter mv, Label end, int acc, String desc, Remapper remapper) { super(acc, desc, mv, remapper); this.lvs = mv; this.end = end; int off = (acc & Opcodes.ACC_STATIC)!=0? 0 : 1;

7 Type[] args = Type.getArgumentTypes(desc); for (int i = args.length-1; i >= 0; i--) { super.visitvarinsn(args[i].getopcode( Opcodes.ISTORE), i + offset); if(offset>0) { super.visitvarinsn(opcodes.astore, 0); public void visitinsn(int opcode) { if(opcode==opcodes.return) { super.visitjumpinsn(opcodes.goto, end); else { super.visitinsn(opcode); public void visitmaxs(int stack, int locals) { protected int newlocalmapping(type type) { return lvs.newlocal(type); Note that this adapter loads method arguments from the stack into remapped local variables and also removes the visitmaxs() event. 4. Performance It is hard to provide direct performance comparison with other frameworks. We are trying to maintain performance suite for null transformation for ASM, BCEL, SERP and Javassist and compare results with the overhead of ASM transformations from the commons package. Here are the results of running those tests using Java 6 on Windows PS with Intel Duo 2.33Gz processor for reading and writing back classes from the rt.jar (not including file I/O): ASM 3.x with copy pool ASM 3.x compute maxs ASM 3.x compute frames ASM 3.x tree package BCEL 5.2 BCEL 5.2 compute maxs BCEL Aspectj BCEL Aspectj compute maxs Javassist 3.4 Serp sec 1.43 sec 2.67 sec 1.77 sec sec sec 4.77 sec 5.93 sec 2.70 sec sec The following table present results for running several ASM helper classes and transformations on the same classes: ASM 3.x class info 0.04 sec ASM 3.x SerialVersionUIDAdder 1.05 sec ASM 3.x LocalVariablesSorter 1.29 sec ASM 3.x analyze with SimpleVerifier 9.05 sec 5. CONCLUSIONS This paper demonstrated number of Java bytecode transformations that can be easily assembled together to implement AOP solutions. The examples shown, implemented using the ASM framework, demonstrate the power and simplicity of the ASM framework. Using ASM allows developers to focus on code transformations instead of spending time on low level bytecode manipulations. The ASM framework is the de-facto standard for highperformance bytecode transformations, and it is used in many Java-based applications and frameworks including code analyzers (SonarJ, IBM AUS), ORM mappers (including Oracle TopLink and Berkley DB, ObjectWeb EasyBeans and Speedo), and scripting languages (BeanShell, Groovy and JRuby). 6. ACKNOWLEDGEMENTS First I would like to thank ASM team and all users of the ASM framework for being such a great community. I also want to thank Tim Eck, the lead developer of Terracotta DSO, and Jason van Zyl, from Maven project for feedback on this paper. 7. REFERENCES [1] The ASM project web site, [2] E. Bruneton, R. Lenglet, T. Coupaye. ASM: a code manipulation tool to implement adaptable systems. [3] M. Dahm, Byte Code Engineering, Proceedings JIT 99, Springer, [4] A. White, Serp, [5] G. A. Cohen, J. S. Chase, D. L. Kaminsky, Automatic program transformation with JOIE, USENIX 1998 Annual Technical Conference, New Orleans, Louisiana, USA, [6] E. Kuleshov. Using ASM toolkit for bytecode manipulation. [7] E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Professional Computing Series [8] The SAX project.

ASM 4.0 A Java bytecode engineering library. Eric Bruneton

ASM 4.0 A Java bytecode engineering library. Eric Bruneton ASM 4.0 A Java bytecode engineering library Eric Bruneton Copyright c 2007, 2011 Eric Bruneton All rights reserved. Redistribution and use in source (LYX format) and compiled forms (L A TEX, PDF, PostScript,

More information

Instrumenting Java bytecode

Instrumenting Java bytecode Instrumenting Java bytecode Seminar work for the Compilers-course, spring 2005 Jari Aarniala Department of Computer Science University of Helsinki, Finland [email protected] ABSTRACT Bytecode

More information

ASM: a code manipulation tool to implement adaptable systems

ASM: a code manipulation tool to implement adaptable systems ASM: a code manipulation tool to implement adaptable systems Eric Bruneton, Romain Lenglet, Thierry Coupaye France Télécom R&D, DTL/ASR 28, chemin du Vieux Chêne BP 98, 38243 MEYLAN cedex {Eric.Bruneton,Romain.Lenglet,Thierry.Coupaye}@rd.francetelecom.com

More information

Java Virtual Machine Locks

Java Virtual Machine Locks Java Virtual Machine Locks SS 2008 Synchronized Gerald SCHARITZER (e0127228) 2008-05-27 Synchronized 1 / 13 Table of Contents 1 Scope...3 1.1 Constraints...3 1.2 In Scope...3 1.3 Out of Scope...3 2 Logical

More information

Java Application Developer Certificate Program Competencies

Java Application Developer Certificate Program Competencies Java Application Developer Certificate Program Competencies After completing the following units, you will be able to: Basic Programming Logic Explain the steps involved in the program development cycle

More information

A Thread Monitoring System for Multithreaded Java Programs

A Thread Monitoring System for Multithreaded Java Programs A Thread Monitoring System for Multithreaded Java Programs Sewon Moon and Byeong-Mo Chang Department of Computer Science Sookmyung Women s University, Seoul 140-742, Korea [email protected], [email protected]

More information

Habanero Extreme Scale Software Research Project

Habanero Extreme Scale Software Research Project Habanero Extreme Scale Software Research Project Comp215: Java Method Dispatch Zoran Budimlić (Rice University) Always remember that you are absolutely unique. Just like everyone else. - Margaret Mead

More information

Patterns in. Lecture 2 GoF Design Patterns Creational. Sharif University of Technology. Department of Computer Engineering

Patterns in. Lecture 2 GoF Design Patterns Creational. Sharif University of Technology. Department of Computer Engineering Patterns in Software Engineering Lecturer: Raman Ramsin Lecture 2 GoF Design Patterns Creational 1 GoF Design Patterns Principles Emphasis on flexibility and reuse through decoupling of classes. The underlying

More information

Java EE Web Development Course Program

Java EE Web Development Course Program Java EE Web Development Course Program Part I Introduction to Programming 1. Introduction to programming. Compilers, interpreters, virtual machines. Primitive types, variables, basic operators, expressions,

More information

Eclipse Visualization and Performance Monitoring

Eclipse Visualization and Performance Monitoring Eclipse Visualization and Performance Monitoring Chris Laffra IBM Ottawa Labs http://eclipsefaq.org/chris Chris Laffra Eclipse Visualization and Performance Monitoring Page 1 Roadmap Introduction Introspection

More information

Software Engineering Techniques

Software Engineering Techniques Software Engineering Techniques Low level design issues for programming-in-the-large. Software Quality Design by contract Pre- and post conditions Class invariants Ten do Ten do nots Another type of summary

More information

Java Virtual Machine, JVM

Java Virtual Machine, JVM Java Virtual Machine, JVM a Teodor Rus [email protected] The University of Iowa, Department of Computer Science a These slides have been developed by Teodor Rus. They are copyrighted materials and may not

More information

Aspect-Oriented Programming

Aspect-Oriented Programming Aspect-Oriented Programming An Introduction to Aspect-Oriented Programming and AspectJ Niklas Påhlsson Department of Technology University of Kalmar S 391 82 Kalmar SWEDEN Topic Report for Software Engineering

More information

Fundamentals of Java Programming

Fundamentals of Java Programming Fundamentals of Java Programming This document is exclusive property of Cisco Systems, Inc. Permission is granted to print and copy this document for non-commercial distribution and exclusive use by instructors

More information

language 1 (source) compiler language 2 (target) Figure 1: Compiling a program

language 1 (source) compiler language 2 (target) Figure 1: Compiling a program CS 2112 Lecture 27 Interpreters, compilers, and the Java Virtual Machine 1 May 2012 Lecturer: Andrew Myers 1 Interpreters vs. compilers There are two strategies for obtaining runnable code from a program

More information

Interpreters and virtual machines. Interpreters. Interpreters. Why interpreters? Tree-based interpreters. Text-based interpreters

Interpreters and virtual machines. Interpreters. Interpreters. Why interpreters? Tree-based interpreters. Text-based interpreters Interpreters and virtual machines Michel Schinz 2007 03 23 Interpreters Interpreters Why interpreters? An interpreter is a program that executes another program, represented as some kind of data-structure.

More information

Java Interview Questions and Answers

Java Interview Questions and Answers 1. What is the most important feature of Java? Java is a platform independent language. 2. What do you mean by platform independence? Platform independence means that we can write and compile the java

More information

Computing Concepts with Java Essentials

Computing Concepts with Java Essentials 2008 AGI-Information Management Consultants May be used for personal purporses only or by libraries associated to dandelon.com network. Computing Concepts with Java Essentials 3rd Edition Cay Horstmann

More information

Under the Hood: The Java Virtual Machine. Lecture 24 CS 2110 Fall 2011

Under the Hood: The Java Virtual Machine. Lecture 24 CS 2110 Fall 2011 Under the Hood: The Java Virtual Machine Lecture 24 CS 2110 Fall 2011 Compiling for Different Platforms Program written in some high-level language (C, Fortran, ML,...) Compiled to intermediate form Optimized

More information

1. What are Data Structures? Introduction to Data Structures. 2. What will we Study? CITS2200 Data Structures and Algorithms

1. What are Data Structures? Introduction to Data Structures. 2. What will we Study? CITS2200 Data Structures and Algorithms 1 What are ata Structures? ata Structures and lgorithms ata structures are software artifacts that allow data to be stored, organized and accessed Topic 1 They are more high-level than computer memory

More information

Glossary of Object Oriented Terms

Glossary of Object Oriented Terms Appendix E Glossary of Object Oriented Terms abstract class: A class primarily intended to define an instance, but can not be instantiated without additional methods. abstract data type: An abstraction

More information

Replication on Virtual Machines

Replication on Virtual Machines Replication on Virtual Machines Siggi Cherem CS 717 November 23rd, 2004 Outline 1 Introduction The Java Virtual Machine 2 Napper, Alvisi, Vin - DSN 2003 Introduction JVM as state machine Addressing non-determinism

More information

Built-in Concurrency Primitives in Java Programming Language. by Yourii Martiak and Mahir Atmis

Built-in Concurrency Primitives in Java Programming Language. by Yourii Martiak and Mahir Atmis Built-in Concurrency Primitives in Java Programming Language by Yourii Martiak and Mahir Atmis Overview One of the many strengths of Java is the built into the programming language support for concurrency

More information

Android Application Development Course Program

Android Application Development Course Program Android Application Development Course Program Part I Introduction to Programming 1. Introduction to programming. Compilers, interpreters, virtual machines. Primitive data types, variables, basic operators,

More information

Enterprise AOP with Spring Applications IN ACTION SAMPLE CHAPTER. Ramnivas Laddad FOREWORD BY ROD JOHNSON MANNING

Enterprise AOP with Spring Applications IN ACTION SAMPLE CHAPTER. Ramnivas Laddad FOREWORD BY ROD JOHNSON MANNING Enterprise AOP with Spring Applications IN ACTION SAMPLE CHAPTER Ramnivas Laddad FOREWORD BY ROD JOHNSON MANNING AspectJ in Action Second Edition by Ramnivas Laddad Chapter 10 Copyright 2010 Manning Publications

More information

The Java Virtual Machine and Mobile Devices. John Buford, Ph.D. [email protected] Oct 2003 Presented to Gordon College CS 311

The Java Virtual Machine and Mobile Devices. John Buford, Ph.D. buford@alum.mit.edu Oct 2003 Presented to Gordon College CS 311 The Java Virtual Machine and Mobile Devices John Buford, Ph.D. [email protected] Oct 2003 Presented to Gordon College CS 311 Objectives Review virtual machine concept Introduce stack machine architecture

More information

Java Coding Practices for Improved Application Performance

Java Coding Practices for Improved Application Performance 1 Java Coding Practices for Improved Application Performance Lloyd Hagemo Senior Director Application Infrastructure Management Group Candle Corporation In the beginning, Java became the language of the

More information

CSCI E 98: Managed Environments for the Execution of Programs

CSCI E 98: Managed Environments for the Execution of Programs CSCI E 98: Managed Environments for the Execution of Programs Draft Syllabus Instructor Phil McGachey, PhD Class Time: Mondays beginning Sept. 8, 5:30-7:30 pm Location: 1 Story Street, Room 304. Office

More information

Logging in Java Applications

Logging in Java Applications Logging in Java Applications Logging provides a way to capture information about the operation of an application. Once captured, the information can be used for many purposes, but it is particularly useful

More information

C Compiler Targeting the Java Virtual Machine

C Compiler Targeting the Java Virtual Machine C Compiler Targeting the Java Virtual Machine Jack Pien Senior Honors Thesis (Advisor: Javed A. Aslam) Dartmouth College Computer Science Technical Report PCS-TR98-334 May 30, 1998 Abstract One of the

More information

CS 111 Classes I 1. Software Organization View to this point:

CS 111 Classes I 1. Software Organization View to this point: CS 111 Classes I 1 Software Organization View to this point: Data Objects and primitive types Primitive types operators (+, /,,*, %). int, float, double, char, boolean Memory location holds the data Objects

More information

Handout 1. Introduction to Java programming language. Java primitive types and operations. Reading keyboard Input using class Scanner.

Handout 1. Introduction to Java programming language. Java primitive types and operations. Reading keyboard Input using class Scanner. Handout 1 CS603 Object-Oriented Programming Fall 15 Page 1 of 11 Handout 1 Introduction to Java programming language. Java primitive types and operations. Reading keyboard Input using class Scanner. Java

More information

09336863931 : provid.ir

09336863931 : provid.ir provid.ir 09336863931 : NET Architecture Core CSharp o Variable o Variable Scope o Type Inference o Namespaces o Preprocessor Directives Statements and Flow of Execution o If Statement o Switch Statement

More information

System Structures. Services Interface Structure

System Structures. Services Interface Structure System Structures Services Interface Structure Operating system services (1) Operating system services (2) Functions that are helpful to the user User interface Command line interpreter Batch interface

More information

Stack Allocation. Run-Time Data Structures. Static Structures

Stack Allocation. Run-Time Data Structures. Static Structures Run-Time Data Structures Stack Allocation Static Structures For static structures, a fixed address is used throughout execution. This is the oldest and simplest memory organization. In current compilers,

More information

University of Twente. A simulation of the Java Virtual Machine using graph grammars

University of Twente. A simulation of the Java Virtual Machine using graph grammars University of Twente Department of Computer Science A simulation of the Java Virtual Machine using graph grammars Master of Science thesis M. R. Arends, November 2003 A simulation of the Java Virtual Machine

More information

jmonitor: Java Runtime Event Specification and Monitoring Library

jmonitor: Java Runtime Event Specification and Monitoring Library RV 04 Preliminary Version jmonitor: Java Runtime Event Specification and Monitoring Library Murat Karaorman 1 Texas Instruments, Inc. 315 Bollay Drive, Santa Barbara, California USA 93117 Jay Freeman 2

More information

02 B The Java Virtual Machine

02 B The Java Virtual Machine 02 B The Java Virtual Machine CS1102S: Data Structures and Algorithms Martin Henz January 22, 2010 Generated on Friday 22 nd January, 2010, 09:46 CS1102S: Data Structures and Algorithms 02 B The Java Virtual

More information

Design Patterns in Parsing

Design Patterns in Parsing Abstract Axel T. Schreiner Department of Computer Science Rochester Institute of Technology 102 Lomb Memorial Drive Rochester NY 14623-5608 USA [email protected] Design Patterns in Parsing James E. Heliotis

More information

An Exception Monitoring System for Java

An Exception Monitoring System for Java An Exception Monitoring System for Java Heejung Ohe and Byeong-Mo Chang Department of Computer Science, Sookmyung Women s University, Seoul 140-742, Korea {lutino, [email protected] Abstract. Exception

More information

Java (12 Weeks) Introduction to Java Programming Language

Java (12 Weeks) Introduction to Java Programming Language Java (12 Weeks) Topic Lecture No. Introduction to Java Programming Language 1 An Introduction to Java o Java as a Programming Platform, The Java "White Paper" Buzzwords, Java and the Internet, A Short

More information

C# Cookbook. Stephen Teilhet andjay Hilyard. O'REILLY 8 Beijing Cambridge Farnham Köln Paris Sebastopol Taipei Tokyo '"J""'

C# Cookbook. Stephen Teilhet andjay Hilyard. O'REILLY 8 Beijing Cambridge Farnham Köln Paris Sebastopol Taipei Tokyo 'J' C# Cookbook '"J""' Stephen Teilhet andjay Hilyard O'REILLY 8 Beijing Cambridge Farnham Köln Paris Sebastopol Taipei Tokyo Tableof Contents Preface xv 1. Numbers 1 1.1 Determining Approximate Equality Between

More information

Checking Access to Protected Members in the Java Virtual Machine

Checking Access to Protected Members in the Java Virtual Machine Checking Access to Protected Members in the Java Virtual Machine Alessandro Coglio Kestrel Institute 3260 Hillview Avenue, Palo Alto, CA 94304, USA Ph. +1-650-493-6871 Fax +1-650-424-1807 http://www.kestrel.edu/

More information

CMSC 132: Object-Oriented Programming II. Design Patterns I. Department of Computer Science University of Maryland, College Park

CMSC 132: Object-Oriented Programming II. Design Patterns I. Department of Computer Science University of Maryland, College Park CMSC 132: Object-Oriented Programming II Design Patterns I Department of Computer Science University of Maryland, College Park Design Patterns Descriptions of reusable solutions to common software design

More information

JVM Tool Interface. Michal Pokorný

JVM Tool Interface. Michal Pokorný JVM Tool Interface Michal Pokorný JVM TI Inspect & control execution on JVM (profiling, debugging, monitoring, thread analysis, coverage, ) Higher-level interface: Java Platform Debugger Architecture JVM

More information

Experimental Evaluation of Distributed Middleware with a Virtualized Java Environment

Experimental Evaluation of Distributed Middleware with a Virtualized Java Environment Experimental Evaluation of Distributed Middleware with a Virtualized Java Environment Nuno A. Carvalho, João Bordalo, Filipe Campos and José Pereira HASLab / INESC TEC Universidade do Minho MW4SOC 11 December

More information

1 The Java Virtual Machine

1 The Java Virtual Machine 1 The Java Virtual Machine About the Spec Format This document describes the Java virtual machine and the instruction set. In this introduction, each component of the machine is briefly described. This

More information

Chapter 13: Program Development and Programming Languages

Chapter 13: Program Development and Programming Languages 15 th Edition Understanding Computers Today and Tomorrow Comprehensive Chapter 13: Program Development and Programming Languages Deborah Morley Charles S. Parker Copyright 2015 Cengage Learning Learning

More information

Jonathan Worthington Scarborough Linux User Group

Jonathan Worthington Scarborough Linux User Group Jonathan Worthington Scarborough Linux User Group Introduction What does a Virtual Machine do? Hides away the details of the hardware platform and operating system. Defines a common set of instructions.

More information

Getting Started with the Internet Communications Engine

Getting Started with the Internet Communications Engine Getting Started with the Internet Communications Engine David Vriezen April 7, 2014 Contents 1 Introduction 2 2 About Ice 2 2.1 Proxies................................. 2 3 Setting Up ICE 2 4 Slices 2

More information

KITES TECHNOLOGY COURSE MODULE (C, C++, DS)

KITES TECHNOLOGY COURSE MODULE (C, C++, DS) KITES TECHNOLOGY 360 Degree Solution www.kitestechnology.com/academy.php [email protected] [email protected] Contact: - 8961334776 9433759247 9830639522.NET JAVA WEB DESIGN PHP SQL, PL/SQL

More information

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C 1 An essential part of any embedded system design Programming 2 Programming in Assembly or HLL Processor and memory-sensitive

More information

The Java Series. Java Essentials I What is Java? Basic Language Constructs. Java Essentials I. What is Java?. Basic Language Constructs Slide 1

The Java Series. Java Essentials I What is Java? Basic Language Constructs. Java Essentials I. What is Java?. Basic Language Constructs Slide 1 The Java Series Java Essentials I What is Java? Basic Language Constructs Slide 1 What is Java? A general purpose Object Oriented programming language. Created by Sun Microsystems. It s a general purpose

More information

Write Barrier Removal by Static Analysis

Write Barrier Removal by Static Analysis Write Barrier Removal by Static Analysis Karen Zee and Martin Rinard Laboratory for Computer Science Massachusetts Institute of Technology Cambridge, MA 02139 {kkz, [email protected] ABSTRACT We present

More information

AP Computer Science AB Syllabus 1

AP Computer Science AB Syllabus 1 AP Computer Science AB Syllabus 1 Course Resources Java Software Solutions for AP Computer Science, J. Lewis, W. Loftus, and C. Cocking, First Edition, 2004, Prentice Hall. Video: Sorting Out Sorting,

More information

Thomas Jefferson High School for Science and Technology Program of Studies Foundations of Computer Science. Unit of Study / Textbook Correlation

Thomas Jefferson High School for Science and Technology Program of Studies Foundations of Computer Science. Unit of Study / Textbook Correlation Thomas Jefferson High School for Science and Technology Program of Studies Foundations of Computer Science updated 03/08/2012 Unit 1: JKarel 8 weeks http://www.fcps.edu/is/pos/documents/hs/compsci.htm

More information

Encapsulating Crosscutting Concerns in System Software

Encapsulating Crosscutting Concerns in System Software Encapsulating Crosscutting Concerns in System Software Christa Schwanninger, Egon Wuchner, Michael Kircher Siemens AG Otto-Hahn-Ring 6 81739 Munich Germany {christa.schwanninger,egon.wuchner,michael.kircher}@siemens.com

More information

Inside the Java Virtual Machine

Inside the Java Virtual Machine CS1Bh Practical 2 Inside the Java Virtual Machine This is an individual practical exercise which requires you to submit some files electronically. A system which measures software similarity will be used

More information

Compiling Object Oriented Languages. What is an Object-Oriented Programming Language? Implementation: Dynamic Binding

Compiling Object Oriented Languages. What is an Object-Oriented Programming Language? Implementation: Dynamic Binding Compiling Object Oriented Languages What is an Object-Oriented Programming Language? Last time Dynamic compilation Today Introduction to compiling object oriented languages What are the issues? Objects

More information

Generating Aspect Code from UML Models

Generating Aspect Code from UML Models Generating Aspect Code from UML Models Iris Groher Siemens AG, CT SE 2 Otto-Hahn-Ring 6 81739 Munich, Germany [email protected] Stefan Schulze Siemens AG, CT SE 2 Otto-Hahn-Ring 6 81739 Munich,

More information

Java SE 8 Programming

Java SE 8 Programming Oracle University Contact Us: 1.800.529.0165 Java SE 8 Programming Duration: 5 Days What you will learn This Java SE 8 Programming training covers the core language features and Application Programming

More information

PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions. Outline. Performance oriented design

PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions. Outline. Performance oriented design PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions Slide 1 Outline Principles for performance oriented design Performance testing Performance tuning General

More information

I. INTRODUCTION. International Journal of Computer Science Trends and Technology (IJCST) Volume 3 Issue 2, Mar-Apr 2015

I. INTRODUCTION. International Journal of Computer Science Trends and Technology (IJCST) Volume 3 Issue 2, Mar-Apr 2015 RESEARCH ARTICLE An Exception Monitoring Using Java Jyoti Kumari, Sanjula Singh, Ankur Saxena Amity University Sector 125 Noida Uttar Pradesh India OPEN ACCESS ABSTRACT Many programmers do not check for

More information

Chapter 1 Fundamentals of Java Programming

Chapter 1 Fundamentals of Java Programming Chapter 1 Fundamentals of Java Programming Computers and Computer Programming Writing and Executing a Java Program Elements of a Java Program Features of Java Accessing the Classes and Class Members The

More information

Performance Monitoring API for Java Enterprise Applications

Performance Monitoring API for Java Enterprise Applications Performance Monitoring API for Java Enterprise Applications Purpose Perfmon4j has been successfully deployed in hundreds of production java systems over the last 5 years. It has proven to be a highly successful

More information

Concrete uses of XML in software development and data analysis.

Concrete uses of XML in software development and data analysis. Concrete uses of XML in software development and data analysis. S. Patton LBNL, Berkeley, CA 94720, USA XML is now becoming an industry standard for data description and exchange. Despite this there are

More information

Developing a Web Server Platform with SAPI Support for AJAX RPC using JSON

Developing a Web Server Platform with SAPI Support for AJAX RPC using JSON Revista Informatica Economică, nr. 4 (44)/2007 45 Developing a Web Server Platform with SAPI Support for AJAX RPC using JSON Iulian ILIE-NEMEDI, Bucharest, Romania, [email protected] Writing a custom web

More information

Advanced compiler construction. General course information. Teacher & assistant. Course goals. Evaluation. Grading scheme. Michel Schinz 2007 03 16

Advanced compiler construction. General course information. Teacher & assistant. Course goals. Evaluation. Grading scheme. Michel Schinz 2007 03 16 Advanced compiler construction Michel Schinz 2007 03 16 General course information Teacher & assistant Course goals Teacher: Michel Schinz [email protected] Assistant: Iulian Dragos INR 321, 368 64

More information

Java 6 'th. Concepts INTERNATIONAL STUDENT VERSION. edition

Java 6 'th. Concepts INTERNATIONAL STUDENT VERSION. edition Java 6 'th edition Concepts INTERNATIONAL STUDENT VERSION CONTENTS PREFACE vii SPECIAL FEATURES xxviii chapter i INTRODUCTION 1 1.1 What Is Programming? 2 J.2 The Anatomy of a Computer 3 1.3 Translating

More information

Glassbox: Open Source and Automated Application Troubleshooting. Ron Bodkin Glassbox Project Leader [email protected]

Glassbox: Open Source and Automated Application Troubleshooting. Ron Bodkin Glassbox Project Leader ron.bodkin@glasssbox.com Glassbox: Open Source and Automated Application Troubleshooting Ron Bodkin Glassbox Project Leader [email protected] First a summary Glassbox is an open source automated troubleshooter for Java

More information

Computer Programming I

Computer Programming I Computer Programming I COP 2210 Syllabus Spring Semester 2012 Instructor: Greg Shaw Office: ECS 313 (Engineering and Computer Science Bldg) Office Hours: Tuesday: 2:50 4:50, 7:45 8:30 Thursday: 2:50 4:50,

More information

Aspect Oriented Programming. with. Spring

Aspect Oriented Programming. with. Spring Aspect Oriented Programming with Spring Problem area How to modularize concerns that span multiple classes and layers? Examples of cross-cutting concerns: Transaction management Logging Profiling Security

More information

IBM Tivoli Identitiy Manager 5.1: Writing Java Extensions and Application Code

IBM Tivoli Identitiy Manager 5.1: Writing Java Extensions and Application Code IBM Tivoli Identitiy Manager 5.1: Writing Java Extensions and Application Code White Paper April 2012 Ori Pomerantz [email protected] Copyright IBM Corp. 2012. All Rights Reserved. US Government Users Restricted

More information

What is a database? COSC 304 Introduction to Database Systems. Database Introduction. Example Problem. Databases in the Real-World

What is a database? COSC 304 Introduction to Database Systems. Database Introduction. Example Problem. Databases in the Real-World COSC 304 Introduction to Systems Introduction Dr. Ramon Lawrence University of British Columbia Okanagan [email protected] What is a database? A database is a collection of logically related data for

More information

Enterprise Application Development In Java with AJAX and ORM

Enterprise Application Development In Java with AJAX and ORM Enterprise Application Development In Java with AJAX and ORM ACCU London March 2010 ACCU Conference April 2010 Paul Grenyer Head of Software Engineering [email protected] http://paulgrenyer.blogspot.com

More information

Java CPD (I) Frans Coenen Department of Computer Science

Java CPD (I) Frans Coenen Department of Computer Science Java CPD (I) Frans Coenen Department of Computer Science Content Session 1, 12:45-14:30 (First Java Programme, Inheritance, Arithmetic) Session 2, 14:45-16:45 (Input and Programme Constructs) Materials

More information

Tutorial Reference Manual. Java WireFusion 4.1

Tutorial Reference Manual. Java WireFusion 4.1 Tutorial Reference Manual Java WireFusion 4.1 Contents INTRODUCTION...1 About this Manual...2 REQUIREMENTS...3 User Requirements...3 System Requirements...3 SHORTCUTS...4 DEVELOPMENT ENVIRONMENT...5 Menu

More information

Object-Oriented Design Lecture 4 CSU 370 Fall 2007 (Pucella) Tuesday, Sep 18, 2007

Object-Oriented Design Lecture 4 CSU 370 Fall 2007 (Pucella) Tuesday, Sep 18, 2007 Object-Oriented Design Lecture 4 CSU 370 Fall 2007 (Pucella) Tuesday, Sep 18, 2007 The Java Type System By now, you have seen a fair amount of Java. Time to study in more depth the foundations of the language,

More information

An Overview of Java. overview-1

An Overview of Java. overview-1 An Overview of Java overview-1 Contents What is Java Major Java features Java virtual machine Java programming language Java class libraries (API) GUI Support in Java Networking and Threads in Java overview-2

More information

Debugging Java Applications

Debugging Java Applications Debugging Java Applications Table of Contents Starting a Debugging Session...2 Debugger Windows...4 Attaching the Debugger to a Running Application...5 Starting the Debugger Outside of the Project's Main

More information

Chapter 7D The Java Virtual Machine

Chapter 7D The Java Virtual Machine This sub chapter discusses another architecture, that of the JVM (Java Virtual Machine). In general, a VM (Virtual Machine) is a hypothetical machine (implemented in either hardware or software) that directly

More information

Syllabus for CS 134 Java Programming

Syllabus for CS 134 Java Programming - Java Programming Syllabus Page 1 Syllabus for CS 134 Java Programming Computer Science Course Catalog 2000-2001: This course is an introduction to objectoriented programming using the Java language.

More information

The WebShop e-commerce framework

The WebShop e-commerce framework The WebShop e-commerce framework Marcus Fontoura 1, Wolfgang Pree 2, and Bernhard Rumpe 3 1 Cyberspace and Web Technology Department, IBM Almaden Research Center 650 Harry Rd., San Jose, CA, 91520, U.S.A

More information

EVALUATION. WA1844 WebSphere Process Server 7.0 Programming Using WebSphere Integration COPY. Developer

EVALUATION. WA1844 WebSphere Process Server 7.0 Programming Using WebSphere Integration COPY. Developer WA1844 WebSphere Process Server 7.0 Programming Using WebSphere Integration Developer Web Age Solutions Inc. USA: 1-877-517-6540 Canada: 1-866-206-4644 Web: http://www.webagesolutions.com Chapter 6 - Introduction

More information

Lecture 7: Class design for security

Lecture 7: Class design for security Lecture topics Class design for security Visibility of classes, fields, and methods Implications of using inner classes Mutability Design for sending objects across JVMs (serialization) Visibility modifiers

More information

A Meeting Room Scheduling Problem

A Meeting Room Scheduling Problem A Scheduling Problem Objective Engineering, Inc. 699 Windsong Trail Austin, Texas 78746 512-328-9658 FAX: 512-328-9661 [email protected] http://www.oeng.com Objective Engineering, Inc., 1999-2007. Photocopying,

More information

Designing and Writing a Program DESIGNING, CODING, AND DOCUMENTING. The Design-Code-Debug Cycle. Divide and Conquer! Documentation is Code

Designing and Writing a Program DESIGNING, CODING, AND DOCUMENTING. The Design-Code-Debug Cycle. Divide and Conquer! Documentation is Code Designing and Writing a Program DESIGNING, CODING, AND DOCUMENTING Lecture 16 CS2110 Spring 2013 2 Don't sit down at the terminal immediately and start hacking Design stage THINK first about the data you

More information

STORM. Simulation TOol for Real-time Multiprocessor scheduling. Designer Guide V3.3.1 September 2009

STORM. Simulation TOol for Real-time Multiprocessor scheduling. Designer Guide V3.3.1 September 2009 STORM Simulation TOol for Real-time Multiprocessor scheduling Designer Guide V3.3.1 September 2009 Richard Urunuela, Anne-Marie Déplanche, Yvon Trinquet This work is part of the project PHERMA supported

More information

Programming Languages

Programming Languages Programming Languages In the beginning To use a computer, you needed to know how to program it. Today People no longer need to know how to program in order to use the computer. To see how this was accomplished,

More information

MCI-Java: A Modified Java Virtual Machine Approach to Multiple Code Inheritance

MCI-Java: A Modified Java Virtual Machine Approach to Multiple Code Inheritance This is pre-print of a paper that will appear in the Proceedings of: 3 rd Virtual Machine Research & Technology Symposium Usenix VM 4, May 6-7, 24, San Jose, alifornia. MI-Java: Modified Java Virtual Machine

More information

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program Free Java textbook available online "Thinking in Java" by Bruce Eckel, 4th edition, 2006, ISBN 0131872486, Pearson Education Introduction to the Java programming language CS 4354 Summer II 2015 The third

More information

Changes to credit card processing in Microsoft Dynamics AX 2012 R2

Changes to credit card processing in Microsoft Dynamics AX 2012 R2 Microsoft Dynamics AX Changes to credit card processing in Microsoft Dynamics AX 2012 R2 Implementation Note This document explains what has changed in the implementation of credit card processing in Accounts

More information

Chapter 1. Dr. Chris Irwin Davis Email: [email protected] Phone: (972) 883-3574 Office: ECSS 4.705. CS-4337 Organization of Programming Languages

Chapter 1. Dr. Chris Irwin Davis Email: cid021000@utdallas.edu Phone: (972) 883-3574 Office: ECSS 4.705. CS-4337 Organization of Programming Languages Chapter 1 CS-4337 Organization of Programming Languages Dr. Chris Irwin Davis Email: [email protected] Phone: (972) 883-3574 Office: ECSS 4.705 Chapter 1 Topics Reasons for Studying Concepts of Programming

More information

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program Free Java textbook available online "Thinking in Java" by Bruce Eckel, 4th edition, 2006, ISBN 0131872486, Pearson Education Introduction to the Java programming language CS 4354 Summer II 2014 Jill Seaman

More information

Design Patterns. Design patterns are known solutions for common problems. Design patterns give us a system of names and ideas for common problems.

Design Patterns. Design patterns are known solutions for common problems. Design patterns give us a system of names and ideas for common problems. Design Patterns Design patterns are known solutions for common problems. Design patterns give us a system of names and ideas for common problems. What are the major description parts? Design Patterns Descriptions

More information