CS1027 010 Memory W12
CS1027 010 Memory W12
Java Memory
Management
Memory Allocation in Java
• When a program is being executed,
separate areas of memory are
allocated for each
• class
• interface
• object
• running method
1-2
Memory Allocation in Java
• Call stack / runtime stack
• Used for method information while the
method is being executed
• Local variables
• Formal parameters
• Return value
• Where method should return to
• Heap
• Used for
• Static information (interfaces and classes)
• Instance information (objects)
1-3
call stack
Memory
allocated to
your program
objects in
the heap
static
space in
the heap
1-4
Memory Allocation in Java
• Example: What happens when an
object is created by new, as in
Person friend = new Person(…);
1-5
Runtime Stack
• Call stack (runtime stack) is the
memory space used for method
information while a method is being run
• When a method is invoked, a call frame
(or activation record ) for that method is
created and “pushed” onto the call stack
• All the information needed during the
execution of the method is grouped together
in the call frame
1-6
Call Frame (Activation Record)
for a Method
Return value
Local variables
Formal Parameters
Return address
1-7
Call Frame (Activation Record)
• A call frame contains:
• Address to return to after method ends
• Method’s formal parameter variables
• Method’s local variables
• Return value (if any)
1-10
Call Stack for a Typical Calling Sequence
Frame for m3
Frame for m4
Frame for m2 Frame for m2 Frame for m2
Frame for main Frame for main Frame for main etc.
1-14
Example: Call Frames - Simple Variables
public class CallFrameDemo1
{
public static double square(double n){
double temp;
temp = n * n;
return temp;
}
1-16
Discussion
• There will be a call frame on the call stack for
each method called. So what other call
frame(s) will be pushed onto the call stack for
our example?
• Which call frames will be on the call stack at
the same time?
1-17
Heap Space
• Static space: contains one copy of
each class and interface named in the
program
• Contains their static variables, and
methods
• Object space:
• Information is stored about each object:
• Value of its instance variables
• Type of object (i.e. name of class)
1-18
Object Creation
• Now let's look at reference variables …
• Memory is allocated in the heap area
when an object is created using new
• The reference variable is put in the call
frame on the runtime stack
• The object is created using memory in the
heap
1-19
public class CallFrameDemo2 {
1-22
Memory Deallocation
• What happens when a method returns?
• On the runtime stack:
• The call frame is automatically
popped off when the method
returns
• So, that memory is deallocated
1-23
Memory Deallocation
• What happens to objects on the heap?
• An object stays on the heap even if there
is no longer a variable referencing it!
• So, Java has automatic garbage
collection
• It regularly identifies objects which no
longer have a variable referencing
them, and deallocates that memory
1-24