Chapter 16 Java Virtual Machine. To compile a java program in Simple.java, enter javac Simple.java javac outputs Simple.class, a file that contains bytecode.

Slides:



Advertisements
Similar presentations
Virtual Machines Matthew Dwyer 324E Nichols Hall
Advertisements

Instruction Set Design
1 Lecture 10 Intermediate Representations. 2 front end »produces an intermediate representation (IR) for the program. optimizer »transforms the code in.
Names and Bindings.
Compilation 2007 Code Generation Michael I. Schwartzbach BRICS, University of Aarhus.
BA1 JVM arkitektur BA2 Specifikation I The Java Virtual Machine Specification specificeres bl.a.: –De grundlæggende datatyper.
Memory Management Case study (JVM & CLR) KIRAN KUMAR V KIRAN KUMAR V LENIN THUMMALAPALLI LENIN THUMMALAPALLI.
1 1 Lecture 14 Java Virtual Machine Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung Institute of Technology.
Cmput Lecture 8 Department of Computing Science University of Alberta ©Duane Szafron 2000 Revised 1/26/00 The Java Memory Model.
1 Storage Registers vs. memory Access to registers is much faster than access to memory Goal: store as much data as possible in registers Limitations/considerations:
Memory Allocation. Three kinds of memory Fixed memory Stack memory Heap memory.
Tanenbaum, Structured Computer Organization, Fifth Edition, (c) 2006 Pearson Education, Inc. All rights reserved The Microarchitecture Level.
Procedure calls (1) The fact: Most programming languages support the concept of procedures (methods). Each method has its own local variables that are.
JVM-1 Introduction to Java Virtual Machine. JVM-2 Outline Java Language, Java Virtual Machine and Java Platform Organization of Java Virtual Machine Garbage.
Chapter 4 H1 Assembly Language: Part 2. Direct instruction Contains the absolute address of the memory location it accesses. ld instruction:
Chapter 16 Java Virtual Machine. To compile a java program in Simple.java, enter javac Simple.java javac outputs Simple.class, a file that contains bytecode.
5/6/99 Ashish Sabharwal1 JVM Architecture n Local storage area –Randomly accessible –Just like standard RAM –Stores variables (eg. an array) –Have to specify.
The Microarchitecture Level The level above the digital logic level is the microarchitecture level.  Its job is to implement the ISA (Instruction Set.
1 Software Testing and Quality Assurance Lecture 31 – SWE 205 Course Objective: Basics of Programming Languages & Software Construction Techniques.
CMSC 341 Introduction to Java Based on tutorial by Rebecca Hasti at
Code Generation Introduction. Compiler (scalac, gcc) Compiler (scalac, gcc) machine code (e.g. x86, arm, JVM) efficient to execute i=0 while (i < 10)
Intro to Java The Java Virtual Machine. What is the JVM  a software emulation of a hypothetical computing machine that runs Java bytecodes (Java compiler.
David Evans CS201j: Engineering Software University of Virginia Computer Science Lecture 18: 0xCAFEBABE (Java Byte Codes)
Introduction to Java Appendix A. Appendix A: Introduction to Java2 Chapter Objectives To understand the essentials of object-oriented programming in Java.
Compiler Construction Lecture 17 Mapping Variables to Memory.
1 The Java Virtual Machine Yearly Programming Project.
The Java Virtual Machine 1 Course Overview PART I: overview material 1Introduction 2Language processors (tombstone diagrams, bootstrapping) 3Architecture.
Chapter 7 Evaluating the Instruction Set Architecture of H1: Part 1.
Machine Instruction Characteristics
Java Bytecode What is a.class file anyway? Dan Fleck George Mason University Fall 2007.
Lecture 10 : Introduction to Java Virtual Machine
Java Programming Introduction & Concepts. Introduction to Java Developed at Sun Microsystems by James Gosling in 1991 Object Oriented Free Compiled and.
1 Introduction to JVM Based on material produced by Bill Venners.
Roopa.T PESIT, Bangalore. Source and Credits Dalvik VM, Dan Bornstein Google IO 2008 The Dalvik virtual machine Architecture by David Ehringer.
An Efficient Stack Machine Martin Schöberl. JOP Stack Architecture2 Overview JVM stack machine Parameter passing Stack access patterns Common stack caches.
Lecture 8 February 29, Topics Questions about Exercise 4, due Thursday? Object Based Programming (Chapter 8) –Basic Principles –Methods –Fields.
Kirk Scott Computer Science The University of Alaska Anchorage 1.
ITCS 3181 Logic and Computer Systems 2015 B. Wilkinson Slides4-2.ppt Modification date: March 23, Procedures Essential ingredient of high level.
More on MIPS programs n SPIM does not support everything supported by a general MIPS assembler. For example, –.end doesn’t work Use j $ra –.macro doesn’t.
Chap. 10, Intermediate Representations J. H. Wang Dec. 14, 2015.
ITEC 352 Lecture 19 Functions in Assembly. Functions + Assembly Review Questions? Project due on Friday Stacks Function activation / deactivation.
Programming Languages and Paradigms Activation Records in Java.
CS216: Program and Data Representation University of Virginia Computer Science Spring 2006 David Evans Lecture 18: Code Safety and Virtual Machines
More Examples of Abstract Interpretation Register Allocation.
Review on Program Challenge CSc3210 Yuan Long.
Hello world !!! ASCII representation of hello.c.
Operating Systems A Biswas, Dept. of Information Technology.
RealTimeSystems Lab Jong-Koo, Lim
Memory Management in Java Mr. Gerb Computer Science 4.
Design issues for Object-Oriented Languages
Computer Architecture & Operations I
Computer Architecture Instruction Set Architecture
The Java Virtual Machine (JVM)
A Closer Look at Instruction Set Architectures
CS216: Program and Data Representation
Computer Architecture and Organization Miles Murdocca and Vincent Heuring Chapter 4 – The Instruction Set Architecture.
CS 153: Concepts of Compiler Design November 2 Class Meeting
William Stallings Computer Organization and Architecture 8th Edition
Java Virtual Machine (JVM)
Java Byte Codes (0xCAFEBABE) cs205: engineering software
CSc 453 Interpreters & Interpretation
Lecture 19: 0xCAFEBABE (Java Byte Codes) CS201j: Engineering Software
Processor Organization and Architecture
ECEG-3202 Computer Architecture and Organization
Byte Code Verification
Course Overview PART I: overview material PART II: inside a compiler
CS 153: Concepts of Compiler Design November 6 Class Meeting
Where is all the knowledge we lost with information? T. S. Eliot
CMPE 152: Compiler Design April 16 Class Meeting
CSc 453 Interpreters & Interpretation
Presentation transcript:

Chapter 16 Java Virtual Machine

To compile a java program in Simple.java, enter javac Simple.java javac outputs Simple.class, a file that contains bytecode (machine language for the Java Virtual Machine (JVM). To run Simple.class, enter java Simple program data

java (the Java interpreter) makes your computer act like the JVM so it can execute bytecode.

Why is Java slow? Interpretation of bytecode can involve a lot of overhead. JVM dynamically links classes versus C++ where linking is done at compile time. Slow start-up. JVM performs checks during loading, linking, and executing bytecode (array bounds, invalid casts, etc).

Why is Java good for the Web? Bytecode is space efficient (transport). Bytecode is portable to any system with a java interpreter. Java applets are safe to run. For example, you can’t access the file system from an applet.

Four parts of the JVM Execution engine (contains pc register) Method area (contains information on each class: bytecode, static variables, information needed for verification and linking). Java stack (the run time stack). Each frame of the Java stack contains a local variable array and an operand stack. heap (contains data associated with objects). Periodically, garbage collection deallocates objects in the heap that are no longer referenced.

Comparison of JVM and Traditional Program Memory Allocation Execution engine: not part of comparison; acts like CPU Method area: Code and Globals Java Stack (the run time stack). The Stack Heap (contains data associated with objects). The Heap

There are two types of stacks in the JVM The Java stack The Java stack consists of frames, one frame for each method invocation. Each frame contains an operand stack and a local variable array.

Local variable array Contains local variables indexed starting from 0. For example, the first slot of the local variable array is called local variable 0. This array also contains parameters. All primitives and references fit in this array. byte and short are sign-extended char is zero-extended double and long use two slots in the array

Operand stack Used to hold operands and results during the execution of instructions. Example: iadd: pops two operands of the Operand Stack, adds them and pushes the result back onto the Operand Stack

Operand stack The JVM is said to have a Stack Architecture because of the Operand Stack, not the Java Stack.

JVM is a Stack Archtitecture 32 bit store load putstatic getstatic (indexed)

Most instructions consist of an opcode only and are 1 byte long. For example, iconst_0, iconst_1, iconst_2, iconst_3, iconst_4, iconst_5 which push 0, 1, 2, 3, 4, and 5, respectively, onto the operand stack. The more common operations are performed by such single-byte opcode-only instructions. The first letter of the opcode represents the argument data type - i for integer, a for reference

Some instructions require an operand. For example, bipush 6 which pushes 6 and uses 2 bytes – one for opcode and one for operand. This instruction consists of the opcode for bipush (byte integer push) followed by a byte containing 6. A 4-byte, sign-extended version is actually what gets pushed. To push a number greater than 127, use sipush (short int push). For example, sipush 130 The range of values that can be operands for sipush is [ ]

Symbolic bytecode that adds three numbers

The initial letter of some mnemonics indicates the data type. For example, iadd, dadd, fadd, ladd. a: reference d: double f: float i: integer ia: integer array l: long The actual operation takes place in the Execution Engine.

iload_0 pushes the value in local variable 0 (i.e., it pushes the value from the first slot of the local variable array onto the operand stack; first 4 slots only) iload 4 pushes the value in local variable 4. Load instructions on the JVM one byte two bytes

istore_0 pops and stores the value on top of the operand stack into local variable 0. istore 4 pops and stores the value on top of the operand stack into local variable 4. Store instructions on the JVM

A static variable in Java is a variable associated with a class rather than an object. It is shared by all objects of its class. A static method in Java is a method that can be called via its class.

The getstatic and putstatic instructions transfer values between the top of the operand stack and static variables. The operand that appears in getstatic and putstatic instructions is an index into the constant pool. For example, getstatic 2 pushes a value at location 2 in the constant pool onto the operand stack.

Invoking a static method with invokestatic instruction Calling environment pushes args onto its stack beginning with receiver (invokevirtual) or constant pool ref to class (invokestatic). Creates frame for the called method and pushes it onto the Java stack. Pops the arguments from the caller’s operand stack and places them in the called method’s local variable array starting from local variable1. Local variable 0 is used to hold a reference to the object or the class as appropriate. Transfers control to the called method.

invokestatic Argument is index of constant pool ptr to actual method this pushed first

Returning a value to the calling method with the ireturn instruction The value returned is pushed onto the calling method’s operand stack. s

iconst_3 return

Implementation of the execution engine

sp = operand top-of-stack *sp == sp[0] ap = local variable array trivial to “decode”

The wisdom of using a stack architecture for the JVM A stack architecture on a simulated machine is no slower than a register architecture (on a simulated machine). Register architecture is faster only if the registers are real registers. On a simulated machine even registers are in memory. Bytecode is very compact which is important for a web programs. Few extra operands for operations. stack == memory == slow!!

A simple Java program follows, along with its bytecode

notice: return address handled by JVM; not on our stack

A formatted display of the constant pool for our simple program follows.

type of entrywhat class; what thing the actual class (reference) method name; param list default constructor

Information in the constant pool for index 3

An attribute in a class file The first entry is the constant pool index of the attribute name. The second entry is the length of what follows.

A hex display of the complete class file for our simple program follows.

max operand stack sz max lva array sz lv1 = 11;

Sizes of comparable programs

Some comparison and control instructions goto unconditional jump if_cmplt compares top two stack items if_icmpge compares top two stack items iflt compares top of stack with 0 if_acmpeq compares references (not values) if_acmpne compares references (not values) See the illustrative program on the next slide.

jump absolute to jmp relative addressing java puts test at bottom of loop

Instructions that jump use pc-relative addressing A70006 (the machine code for goto 6) jumps to the location whose address is 6 + the contents of the pc register (before incrementation). Range limitation: ±32k within method.

Unassembling the Simple class file javap –c Simple

cinit() init()

Unassemble this program to see its bytecode

pushes left-to-right

public class O { public static void f() { //... } int x; }

Arrays and objects

(o) needed to pass to constructor even though f() is static we invoke it with an object receiver

Now that you know the basics of the JVM, you can enjoy (and understand) some more advanced discussions of the JVM.