3. In order to set aside a piece of memory for our
resource we use the new keyword
Dim myStudent As New Student
This create a newobj instruction in the MSIL
code generated from your application
The constructor of class will then set up the
initial state of the object
Sub New()
Course = 1
End Sub
4. Memory Allocation
Use the resources by accessing the class members
student.Name = txtName.Text
student.studentID = txtID.Text
Traditionally the programmer had to manually free up
system resources
For example in C++ you use a special Destructor
Programmers often forget to kill objects, or try to
access a piece of memory that has already been wiped
myStudent = Nothing
5. Garbage Collection in .NET
Garbage Collection is operating as a separate
thread in the background
GC itself requires resources to run
It is assigned low priority
Running out of memory?
Garbage Collection given REALTIME priority and
collect all unwanted objects
6. How does it Locate
Garbage?
When an application is loaded a portion of
memory is assigned to that particular
program.
This piece of memory is called the managed
heap.
The memory is seperated into three parts:
Generation Generation Generation
Zero One Two
7. Memory Allocation
When you create an object using the new contructor
Newobj called in MSIL
When it executes:
Calculates the number of bytes for the object or type
needs to be loaded into themanged heap
Add bytes required for an object’s
overhead
Each object has two overhead fields:
1. Method Table Pointer
2. SyncBlockIndex
8. Memory Allocation Cont’d
CLR checks to see if the bytes required
to allocate the object are available
If it fits it is allocated at the address
pointed to by NextObjPtr
The address of the object is returned
NextObjPtr navigates past the
object and finds where the next object
will be placed in the heap
9. Cont’d
All these processes happen in Generation
Zero level
When generation zero does not have enough
space to allocate to other objects
Garbage Collector given real time priority
Garbage Collector will monitor level zero again
to check objects scope
It will mark items that are no longer needed
10. Cont’d
As Garbage Collector starts it cleans up any objects
that have been marked for cleaning
AB C
Three Objects
B has lost its scope
B is marked for collection
Finally it is removed
A C
11. System only allocates memory at the end
Job of garbage collector to compact the memory
structure
A C
Garbage collection has not ended
Looks at all the objects that have survived the sweep
Those objects will be moved to Generation one
Generation Zero can be used to store new objects.
If Generation One doesn’t have enough space the
process will be carried out there too!!
12. Problems with Garbage
Collection
Garbage Collection is run non-
deterministically
In VB 6.0 you could set a object = Nothing and
the Class Terminate Event was raised.
In VB .NET you can still set an object =
Nothing, but this will not actually kill your
object it will only mark it for cleaning
13. GC Cont’d
If you don’t know when GC is going to run
how can you clear up extra resources
associate with a class instance?
Extra Resources such as files, network
connections, database connections are not
handled very well by garbage collection
Invoke the Sub Finalize
14. Finilize
This is the method that the Garbage Collector must
run on the object to clear any unmanaged
resources, prior to reclaiming memory used by the
object
By default the finilize method doesn’t do anything
We can override it and put in code to explicitly clean
up unmanaged resources
16. Classes Outside Applications
We have spent the last couple of weeks
creating classes within our application
How useful is that?
A bit useful…
17. Seperating Classes from your
Application
You can place your project in a class library
This is a project that gets compiled into a DLL
You can then reference it from another
project and access its functionality
It allows you to reuse code