Memory organization - storing variables efficiently in the RAM memory

advertisement
Memory organization - storing variables
efficiently in the RAM memory
Previously discussed: storing program
instructions in RAM memory
• Instructions (encoded using binary numbers) of a computer
program are stored in the RAM memory - (See:
http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/01
/intro-computer2.html)
Previously discussed: storing program
instructions in RAM memory (cont.)
• Alternate (more comprehensive) view of the content of the
RAM memory:
(I am using a 1000000 byte RAM memory in the example that's why the last address is 999999)
Previously discussed: storing program
instructions in RAM memory (cont.)
• Instructions in a Java program are static while the program
is running:
• The instructions of a Java program will not change
for the entire duration that the Java program is
executing
Creating variables: how to reserve RAM
memory
• Variables are also placed in RAM memory
Example: create one variable
We have used the memory cell with address 1000 to store the
value of the variable
Creating variables: how to reserve RAM
memory
• $64,000 question:
• If we want to create another variable, how can the
computer know which memory cell to use ???
• I.e.: how can the computer tell that the memory cell 1000
is now used (while previously, it was unused)
Creating variables: how to reserve RAM
memory (cont.)
• Answer:
• The computer program reserves some RAM memory for
special system variables in advance:
Creating variables: how to reserve RAM
memory (cont.)
• One of these system variables will remember the following
information:
• The start of the unused portion of memory
• A list of memory locations that has been used.
Creating variables: how to reserve RAM
memory (cont.)
Example:
Creating variables: how to reserve RAM
memory (cont.)
• What happens when you create a variable:
• Look up the start of the unused memory:
We find: 2000
Creating variables: how to reserve RAM
memory (cont.)
• Check in the list of used memory location if it is still unused:
Creating variables: how to reserve RAM
memory (cont.)
• Reserve memory location 2000 for the variable by marking
the location 2000 as used:
Creating variables: how to reserve RAM
memory (cont.)
• The next time a variable is created, the system knows that
the memory location 2000 is used !!!
Destroying variables
• Here is the situation after creating 3 variables:
The memory locations 2000, 2001 and 2002 have been
marked as used.
Destroying variables (cont.)
• If variable 1 is destroyed, the memory call 2000 is no
longer used.
Furthermore, the memory call can be re-used by some
other variable !
Destroying variables (cont.)
• How to destroy a variable:
• We simply remove the memory location from the used
memory location list:
Destroying variables (cont.)
• Note:
• If the program creates a new variable while in this situation:
It can detect that memory call 2000 is not used and can reassign this memory call to another variable !!!
More efficient way to represent used
memory cells
• Our current solution:
• We enter an individual memory address in the used
memory location list to indicate that the memory location
has been used:
More efficient way to represent used
memory cells (cont.)
• Problem with this approach:
• Need to use a large number of entries
More efficient way to represent used
memory cells (cont.)
• A more efficient solution: use a range:
The Swiss cheese effect
• If the process of variable creation and variable destruction
has gone on for some time, there will be regions of used
and unused memory cells all over the place in memory:
The Swiss cheese effect (cont.)
• I call this the Swiss cheese effect
• Note:
• We need to use 1 pair of addresses to record a used
region of memory locations
A special sequence of variable creation and
destruction
• The is one special sequence of variable creation and
destruction that will not create holes in the RAM memory:
• the Last In, First Out sequence:
• A variable that is created later is always
destroyed first.
A special sequence of variable creation and
destruction (cont.)
• Example:
• Create variable 1:
A special sequence of variable creation and
destruction (cont.)
• Create variable 2:
A special sequence of variable creation and
destruction (cont.)
• Create variable 3:
A special sequence of variable creation and
destruction (cont.)
• When you destroy the variables in the reverse order, you
preserve the region...
Destroy variable 3:
A special sequence of variable creation and
destruction (cont.)
Destroy variable 2:
Terminology: stack and heap
• Stack:
• Stack = an area of RAM memory used for variables
that are created and destroyed in a Last In, First Out
(LIFO) manner
• Heap:
• Heap = an area of RAM memory used for variables
that are created and destroyed in a non-LIFO manner
Terminology: stack and heap (cont.)
• Note:
• The name "stack" is derived from the similarity with a
"stack of book":
Terminology: stack and heap (cont.)
• The last book you put on a stack sits at the top (stack top)
• The first book that you can remove without causing the
stack to collapse is the book at the top of the stack
• The sequence of book inserting and book
deletion is Last In, First Out.
Memory organization: where different
things are stored in memory
• In order to use the computer RAM memory as efficiently
as possible, the computer RAM memory is organized into
3 parts:
Memory organization: where different
things are stored in memory
• In order to use the computer RAM memory as efficiently
as possible, the computer RAM memory is organized into
3 parts:
Memory organization: where different
things are stored in memory (cont.)
• Explanation:
• Area 1 contains information that are used throughout the
execution of the entire program (or what I call "persistent
information")
Information stored in this area consists of 2 types of items:
• Computer instructions (you need all instructions
in the computer program throughout its execution).
• Class variables (this kind of variables store
information that is used throughout the program
execution).
Memory organization: where different
things are stored in memory (cont.)
The amount of memory space in area 1 remains unchanged
throughout the execution of the program !!!
Memory organization: where different
things are stored in memory (cont.)
• Area 2 contains instance variables that used by multiple
methods (long term information) The space of Area 2 can
grow or shrink:
• Area 2 will grow when the program creates new
instance variables
• Area 2 will shrink when some c instance variables
are destroyed
Memory organization: where different
things are stored in memory (cont.)
• Area 3 contains local and parameter variables that used by
one single method (short term information)
• Local and parameter variables are created when a
method is invoked (starts executing)
• Local and parameter variables are destroyed when
a method is returns (exits)
Memory organization: where different
things are stored in memory (cont.)
• The space in Area 3 can also grow or shrink:
• Area 3 will grow when a method is invoked
• Area 3 will shrink when a method is returns (exits)
Memory organization: where different
things are stored in memory (cont.)
• Direction of growth of the areas 2 and 3:
• In order to use the available RAM memory as efficient as
possible, the direction of growth of areas 2 and 3 is towards
each other
Graphically:
Initial memory organization
• Consider the following computer program:
Initial memory organization (cont.)
• When a program first starts running, the computer RAM
memory will only contain the persistent information
I.e., only the program instructions and class variables are
stored in RAM:
Initial memory organization (cont.)
Initial memory organization (cont.)
• (Since we do not learned about class variables, our
example only has program instructions)
• The area 2 and area 3 will grow and shrink depending on
whether some variables are created and destroyed.
Out-of-memory error
• It is possible that the area 2 or area 3 grows so large that
the RAM memory becomes exhausted:
Out-of-memory error (cont.)
• Out-of-memory error:
• When you try to create a variable and the computer has
run out of unused RAM memory, it will cause a out-ofmemory error
• The program will terminate immediately
Out-of-memory error (cont.)
• Some situations that can cause out-of-memory errors:
• The program has an infinite loop and inside the loop,
the program creates a new variable
• When we discuss recursion later in the course, I will
warn you about the "infinite recursion" scenario that
can cause out-of-memory errors.
Terminology: System stack and System
heap
• Later in the course, you will learn that the sequence of
variable creation and destruction in area 3 is LIFO
Therefore:
• Area 3 is a stack !!!
In fact, this region of memory is called the System
stack
(There are no "holes" of unused regions in this
area)
Terminology: System stack and System
heap (cont.)
• Area 2 however, is a heap
This area is called the System heap.
Terminology: System stack and System
heap (cont.)
• Summary:
Download