Download Lecture 31 - KFUPM Open Courseware

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Software Testing and Quality
Assurance
Lecture 31 –
SWE 205
Course Objective:
Basics of Programming Languages &
Software Construction Techniques
1
Lecture Outline




Java Language, Java Virtual Machine and
Java Platform
Organization of Java Virtual Machine
Garbage Collection
Interpreter and Just-In-Time Compiler
Reference: Absolute Java (Second Edition)
2
Typical C Program
Hello.c
gcc
for Win
Hello
Windows
X86
gcc
for Mac
Hello
Mac
PowerPC
gcc
for Linux
Hello
Hello
Linux
X86
3
Typical Java Program
Hello.java
javac
Hello.class
Hello
Windows
X86
Hello
Mac
PowerPC
Hello
Hello
Linux
X86
4
The
A.java
Big
Picture
B.java
C.java
Java Language
Specification
Java
Compiler
A.class
B.class
C.class
Java Virtual Machine
Java Virtual
Machine
Specification
5
Java Platforms (1)

A Java Platform consists




Java Virtual Machine  CPU
A set of standard classes  API
JVM in all platforms must satisfy JVM spec.
Standard classes can be tailored according the
the resource constraints

Three levels of Java platforms:
J2EE, J2SE and J2ME
6
Java Platforms (2)
From KVM White Paper (Sun Microsystem)
7
What Is in the JVM Spec?



Bytecodes – the instruction set for Java
Virtual Machine
Class File Format – The platform
independent representation of Java binary
code
Verification Rules – the algorithm for
identifying programs that cannot
compromise the integrity of the JVM
8
Implementations of JVM
Java
Application
Java
Application
Java
Application
JVM
OS
Hardware
Java OS
Java Chip
Hardware
JVM Specification does not specify
how a JVM is implemented
9
Organization of JVM
Class Area
Class Information
Constant Pool
Heap
Stack
Native
Stack
Method Area
Internet
*.class
File System
*.class
Class
Loader
PC, FP, SP
Registers
Execution
Engine
Native
Interface
Native
Methods
10
Class Loader
1.
2.
•
•
•
3.
Loading: finding and importing the binary data for a
class
Linking:
Verification: ensuring the correctness of the imported
type
Preparation: allocating memory for class variables
and initializing the memory to default values
Resolution: transforming symbolic references from
the type into direct references.
Initialization: invoking Java code that initializes class
variables to their proper starting values
11
Verification





Is it a structurally valid class file?
Are all constant references correct?
Will each instruction always find a correct
formed stack and local variable array?
Check out external references
Other safety requirements
12
Class Area

Class Information





Internal representation of Java classes
Information about the superclass and
implemented interfaces
Information about the fields and methods
Constant Pool
Method Area

Contains the bytecodes of the methods of the
loaded classes
13
Stack

The Java stack is composed of frames


A frame contains the state of one Java method
invocation
Logically, a frame has two parts: local variable
array and operand stack
14
Stack

JVM has no registers; it uses the operand
stack for storage of intermediate data values



to keep the JVM's instruction set compact
to facilitate implementation on architectures with
limited number of general purpose registers
Each Java thread has its own stack and
cannot access the stack of other threads
15
Stack Frame
public class A
{
... ...
void f(int x)
{
int i;
for(i=0; i<x; i++)
{
... ...
}
... ...
}
SP
InterMediate
Data
Values
Operand
Stack
i
x
Local
Variable
Array
Caller’s SP
Caller’s FP
FP Return PC
16
Stack – Each Thread Has its own
Stack
Heap
Thread 1
Thread 2
Thread 3
Frame
Frame
Frame
Frame
Frame
Frame
Frame
Frame
Stack
17
Heap




All Java objects are allocated in the heap
Java applications cannot explicitly free an
object
The Garbage Collector is invoked from
time to time automatically to reclaim the
objects that are no longer needed by the
application
The heap is shared by all Java threads
18
Java Objects in the
clazzHeap
Fields 1
Fields 2
class Object
class A
……
Fields n
clazz
class B
……
Class Area
clazz
……
Heap
19
Garbage Collector
Roots: internally defined by the JVM implementation
Live Objects: reachable from the roots
Garbage (Dead Objects): not reachable from the roots, not
accessible to the application
root
A
C
B
E
D
G
F
20
Mark / Sweep / Compaction
root
root
A
B
C
D
E
F
G
A
B
C
D
E
F
G
Before GC
Live
After Mark
Garbage
root
root
B
B
E
G
E
G
After Sweep
After Compact
Unknown
Free
21
Generational Garbage
Collection
• Most objects live for very shot time
• A small percentage of them live much longer
Free
Young
Generation
Old
Generation
Free
Free
Young
Generation
Old
Generation
Old
Generation
Young
Generation
Old
Generation
22
Execution Engine


Executes Java bytecodes either using
interpreter or Just-In-Time compiler
Registers:



PC: Program Counter
FP: Frame Pointer
SP: Operand Stack Top Pointer
23
Interpreter vs Just-In-Time Compile
Bytecode
Bytecode
Interpreter
CPU
Interpretation
Native
Code
JIT
Compiler
CPU
JIT Compilation
24
while(program not end ) {
fetch next bytecode => b
switch(b) {
case ILOAD:
load an integer from the local
variable array and push on top
of current operand stack;
case ISTORE:
pop an integer from the top of
current operand stack and store
it into the local variable array;
case ALOAD:
... ...
} // end of switch
} // end of while
Bytecode Interpreter (1)
25
Bytecode interpreter (2)

Advantage



Ease to implement
Does not need extra memory to store compiled
code
Disadvantage

Very Slow: 10 ~ 100 times slower than execution
of native code
26
Just-In-Time Compiler




Dynamically compiles bytecode into native code
at runtime, usually in method granularity
Execution of native code is much faster than
interpretation of bytecode
Compilation is time consuming and may slow
down the application
Tradeoffs between execution time and
compilation time
27
Adaptive Compiler



Observation: less than 20% of the methods account for
more than 80% of execution time
 Methods contains loop with large number of iteration;
 Methods that are frequently invoked
Idea 1: only compile the methods where the application
spends a lot of time
Idea 2: perform advanced compiler optimization for the
hottest methods, simple or no compiler optimization for less
hot methods
28
How Adaptive Compiler Works





Set three thresholds T1, T2 (T1<T2)
Each method has a counter that is initialized to 0.
Whenever the method is invoked, increase its counter by 1
The methods with counter lower than T1 are executed
using interpreter
When a method’s counter reaches T1, compile this method
with simple optimizations
When a method’s counter reaches T2, recompile this
method with advanced optimizations
29
Processor Virtualization
Linux App
Win32 App
Linux
Windows
Virtual
Processor
Virtual
Processor
VMWare
Hardware
Processor
30
Key Points

Java Platform


Java Virtual Machine
A set of standard classes
31
Announcement

SWE Revised Program Discussion

Monday December 29, 2008 at 12:10-1:00
in 24/141
32