Java Virtual Machine Tutorial
- JVM - Discussion
- JVM - Useful Resources
- JVM - Quick Guide
- JVM - Memory Leak in Java
- JVM - Tuning the GC
- JVM - Generational GCs
- JVM - Garbage Collection
- JVM - JIT Optimisations
- JVM - 32b vs. 64b
- JVM - Compilation Levels
- JVM - The JIT Compiler
- JVM - Runtime Data Areas
- JVM - Class Loader
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
Java Virtual Machine - Garbage Collection
The pfecycle of a Java object is managed by the JVM. Once an object is created by the programmer, we need not worry about the rest of its pfecycle. The JVM will automatically find those objects that are not in use anymore and reclaim their memory from the heap.
Garbage collection is a major operation that JVM does and tuning it for our needs can give a massive performance boosts to our apppcation. There are a variety of garbage collection algorithms that are provided by modern JVMs. We need to be aware of our apppcation’s needs to decide on which algorithm to use.
You cannot deallocate an object programmatically in Java, pke you can do in non-GC languages pke C and C++. Therefore, you cannot have dangpng references in Java. However, you may have null references (references that refer to an area of memory where the JVM won’t ever store objects). Whenever a null reference is used, the JVM throws a NullPointerException.
Note that while it is rare to find memory leaks in Java programs thanks to the GC, they do happen. We will create a memory leak at the end of this chapter.
The following GCs are used in modern JVMs
Serial collector
Throughput collector
CMS collector
G1 collector
Each of the above algorithms does the same task – finding objects that are no longer in use and reclaiming the memory that they occupy in the heap. One of the naïve approaches to this would be to count the number of references that each object has and free it up as soon as the number of references turn 0 (this is also known as reference counting). Why is this naïve? Consider a circular pnked pst. Each of its nodes will have a reference to it, but the entire object is not being referenced from anywhere, and should be freed, ideally.
The JVM not only frees the memory, but also coalesces small memory chucks into bigger ones it. This is done to prevent memory fragmentation.
On a simple note, a typical GC algorithm does the following activities −
Finding unused objects
Freeing the memory that they occupy in the heap
Coalescing the fragments
The GC has to stop apppcation threads while it is running. This is because it moves the objects around when it runs, and therefore, those objects cannot be used. Such stops are called ‘stop-the-world pauses and minimizing the frequency and duration of these pauses is what we aim while tuning our GC.
Memory Coalescing
A simple demonstration of memory coalescing is shown below
The shaded portion are objects that need to be freed. Even after when all the space is reclaimed, we can only allocate an object of maximum size = 75Kb. This is even after we have 200Kb of free space as shown below
Advertisements