Embed
Email

JVM Internals

Document Sample
JVM Internals
Shared by: HC111205225156
Categories
Tags
Stats
views:
5
posted:
12/5/2011
language:
English
pages:
24
JVM Internals

Douglas Q. Hawkins

JVM Internals



Bytecode

Garbage Collection

Optimizations

Compile Time

Run Time

Java Bytecode

Java Bytecode

Local Variables

Stack Based

Operand Stack

Local Variable Space









7 +

10

3

Operation Types

Load and Store

Arithmetic and Logic

Type Conversion

Control Transfer

Object Creation and Manipulation

Operand Stack

Method Invocation

Demo

Garbage Collection

Garbage Collection



Generational Garbage Collection

Segmented into Young, Old, and Permanent

Generations





Types of Collectors

Parallel - across multiple threads

Concurrent - while program runs

Demo

Garbage Collection Pattern

Minor

Major

Major Again - for objects with finalize

Soft References

Major

Major Again - for objects with finalize

Throw OutOfMemoryError

Optimizations

Optimizations

Just In Time Compilation

Purely Interpreted

Ahead of Time Compilation





Almost No Compile Time Optimization

Most Optimizations are Runtime

Compile Time Demo

Is This Optimized?

double sumU = 0, sumV = 0;

for ( int i = 0; i = nums.length ) {

throw new ArrayIndexOutOfBoundsException();

}

System.out.println( “nums[“ + i + “]=” + nums[ i ] );

}

Loop Invariant Hoisting

for ( int i = 0; i < nums.length; ++i ) {

...

}





int length = nums.length;

for ( int i = 0; i < length; ++i ) {

...

}

Loop Unrolling

int sum = 0;

for ( int i = 0; i < 10; ++i ) {

sum += i;

}



int sum = 0;

sum += 1;

...

sum += 9;

Method Inlining

Vector vector = ...

double magnitude = vector.magnitude();

static always

Vector vector = ...

final always

double magnitude = Math.sqrt(

vector.u*vector.u + vector.v*vector.v ); private always

virtual often

Vector vector = ... reflective sometimes

double magnitude;

if ( vector instance of Vector2D ) { dynamic often

magnitude = Math.sqrt(

vector.u*vector.u + vector.v*vector.v );

} else {

magnitude = vector.magnitude();

}

Lock Coarsening

StringBuffer buffer = ...

buffer.append( “Hello” );

buffer.append( name );

buffer.append( “\n” );



StringBuffer buffer = ...

lock( buffer ); buffer.append( “Hello” ); unlock( buffer );

lock( buffer ); buffer.append( name ); unlock( buffer );

lock( buffer ); buffer.append( “\n” ); unlock( buffer );



StringBuffer buffer = ...

lock( buffer );

buffer.append( “Hello” );

buffer.append( name );

buffer.append( “\n” );

unlock( buffer );

Other Lock Optimizations

Biased Locking

Adaptive Locking - Thread sleep vs. Spin lock

Escape Analysis

Point p1 = new Point(x1, y1), p2 = new Point(x2, y2);

synchronized ( p1 ) {

synchronized ( p2 ) {

double dx = p1.getX() - p2.getX();

double dy = p1.getY() - p2.getY();

double distance = Math.sqrt( dx*dx + dy*dy );

}

}





double dx = x1 - x2;

double dx = y1 - y2;

double distance = Math.sqrt( dx*dx + dy*dy );

Run Time Demo

Resources

Brian Goetz



Developer Works Articles



Tony Printezis



Garbage Collection in the Java HotSpot Virtual Machine -

http://www.devx.com/Java/Article/21977



Java Specialist Newsletter - http://www.javaspecialists.eu/



http://java.sun.com/javase/6/docs/technotes/guides/vm/cms-6.html



http://java.sun.com/docs/hotspot/gc1.4.2/faq.html



http://www.fasterj.com/articles/G1.html



http://www.informit.com/guides/content.aspx?g=java&seqNum=27


Related docs
Other docs by HC111205225156
Suffolk School Governor Training Programme
Views: 0  |  Downloads: 0
NSC Student Term Dates 10/11
Views: 0  |  Downloads: 0
Information Technology Department
Views: 0  |  Downloads: 0
Sheet1
Views: 0  |  Downloads: 0
Safety & Health Management System Guidelines
Views: 0  |  Downloads: 0
Kinnitatud
Views: 1  |  Downloads: 0
Order & Judgment Template
Views: 0  |  Downloads: 0
PARTS-AUTO-GM
Views: 19  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!