Memory Architecture
Memory Architecture
Method Area
Type information constant pool Field information Method Table
Method information
Class variables
Method Area
Fully qualified type s
name. Type Information Constant pool Field Informa tion
Whether class or an
interface Method Information Class variables Ref. to class loader and class Class Method Table
Method Area
Type Informa tion Constant Pool Field Informa tion
Method Information
Class variables
symbolic references to
- types - fields - Methods
Method Area
Type Informa tion Constant pool Field Information field s name field s type field s modifiers (subset ) - public - private - protected - static - final - volatile - transient
Method Information
Class variables
Method Table
Method Area
Type Informa tion Constant pool Field Informa tion Method Table Method Information Class variables Ref. to class loader and class Class Method s name Method s return type Number and type of parameters Modifiers (subset) - public - private - protected - static - final - synchronized - native - abstract
Method Area
Type Informa tion Constant pool Field Informa tion Method Table Method Informa tion Class variables Ref. to class loader and class Class
Method Area
Type Informa tion Constant pool Field Informa tion Method Table Method Informa tion Class variables Ref. to Class loader And class Class Reference to class loader is used for dynamic linking. instance java.lang.Class is created every type for the following info. - getName(); - getSuperClass(); - isInterface(); - getInterfaces(); - getClassLoader();
Method Area
Type Informa tion Constant pool Field Informa tion
Class variables
Method Table
Heap Memory
Objects and arrays are allocated in this
area. Two different threads of the same application, however, could trample on each other's heap data.
Lock on Objects
object is associated with a lock (or mutex) to
coordinate multi-threaded access to the object. multi Only one thread at a time can "own" an object's lock. Once a thread owns a lock, it can request the same lock again multiple times, but then has to release the lock the same number of times before it is made available to other threads.
Java Stack
Java stack stores a thread's state in
discrete frames. Each frame contains - local variables Area. - operand stack - frame data
indices. Values of type int, float, reference, and return Address occupy one cell. Values of type byte, short, and char also occupy one cell. Values of type long and double occupy two consecutive cells in the array.
class Example3a { public static int runClassMethod(int i, long l, float f, double d, Object o, byte b) { return 0; } public int runInstanceMethod(char c, double d, short s, boolean b) { return 0; } }
Operand Stack
cells. local variables are accessed via array indices, the operand stack is accessed by pushing and popping values. instructions take their operands from - operand stack - immediately following the opcode - constant pool
// push the int in local variable 0 // push the int in local variable 1 // pop two ints, add them, push result // pop int, store into local variable 2
Frame data
Frame data is needed to support
constant pool resolution normal method return exception dispatch debugging.
class Example3c { public static void addAndPrint() { double result = addTwoTypes(1, 88.88); System.out.println(result); } public static double addTwoTypes(int i, double d) { return i + d; } }
class abc { public int a; String str; abc() { a=10; atr= string1 ; } public void print{ System.out.print(a+ +str); } } interface def { void add(); } class pqr extends abc implements def { static int b; final int c=50; String s; pqr(int m) { super(); b=m; s= new String( string2 ); } void add() { a=a+c; add1(); } static void add1() { c=b+50; } }
Example
class Main { public static void main(String[] s) { pqr p=new pqr(20); p.add(); p.print(); } }
class abc { Type info public int a; abc String str; java.lang.Object abc() { Isclass=true a=10; str= string1 ; modifier=4 } public void print{ System.out.print(a+ +str); } }
Constant pool
Symbol ref. array a 10 str <init> print string1
Field info
name a str Type Modifier int String 5 4 index 0 1
Method info
0 0 1 5
name ret.type npar modifier parlist codeptr <init> print void void
Method Table
name index <init> print 2 3
Class variables
null
Type info
def java.lang.Object Isclass=false modifier=4
Constant pool
Symbol ref. array add
Method info
name ret.type npar modifier parlist codeptr add void 0 4
Method Table
name index add 0
class pqr extends abc implements def { static int b; final int c=50; String s; pqr(int m) { super(); b=m; s= new String( string2 ); } void add() { a=a+c; add1(); } static void add1() { c=b+50; } }
Type info
pqr abc Isclass=true modifier=4
Class variables
b Field info
name b c S Type Modifier int int String 4,6 4,7 4 index 0 1 2
Constant pool
Symbolic ref. array b 50 c s <init> super add add1
Method info
name ret.type npar modifier parlist codeptr <init> add add1 super void void void void 1 0 0 0 4 4 4 4
Method Table
name index <init> 3 add 5 add1 6 super 4
name ret.type npar modifier parlist codeptr <init> add add1 super void void void void 1 0 0 0 4 4 4 4
class Main { public static void main(String[] s) { pqr p=new pqr(20); p.add(); p.print(); } }
Type info
Main java.lang.Object Isclass=true modifier=4
Constant pool
Symbol ref. array main 20
Method info
name ret.type npar modifier parlist codeptr void 0 4
Method Table
name index main 0
Main
Main main
Main p
pqr main
Main p
pqr
abc str s
stack Heap
Main p
pqr
Pqr.<init> abc.<init>
Main p
pqr
abc str s
Main p add
pqr
abc str s
Main p
pqr
abc str s
add string2
a,b,c add1 a,b,c a,b,c Main p pqr abc str s print string2 a,b,c string2 a,b,c Main p string2 pqr abc str s str s string2
Constant pool
Class variables
Metadata
Method Area
Ref. to class loader and class Class Method Table
Garbage collection
JVM Heap
C++ Heap
Frame data
Operand Stack
JVM stack
Threads
C++ stack
Design Choices
How to allocate bytes
- Contiguous memory allocation. - Non contiguous memory allocation. How many bytes to be allocated - exact requested number of bytes. - Allocate bytes in terms of 2^n (Buddy System). How defragmentation to be done - Compaction. - Buddy system.
Garbage Collection
starting address+ size requested address, checks the ref. count. If zero returns the index of table entry to Data Manager. Data Manager deletes the entry from MAT and adds in Defragment Table. For each entry in Defragment Table, Defragmenter combines the consecutive fragments. Starting Address Size
Design problem
VM requests an array of bytes - to store data in Method Area. - for stack frame. - for object on Heap. MM doesn t know the purpose of bytes. How does MM allocates memory in three different address spaces for different type of requests. Use Three MMs. Each MM has its own addr. Space. Its responsibility of VM to direct the requests to appropriate MM.
10K 16K
Heap
Java
JVM
M/C 2
C#
M/C 1
CLR
VB
M/C 2
Memory Managers
Type Memory manager. Roots Memory manager. Managed heap manager. Unmanaged heap manager. GC runs. No GC. GC runs. No GC.
Memory Allocation
Before GC
After GC
Thank You