Memory organization storing variables efficiently in the RAM
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-computer 2. 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:
- Slides: 49