Java memory management
Java memory management
S Mukherjee
Java Memory Management & GC
Key Areas:
Heap (Objects)
Stack (Method calls)
Metaspace (Class metadata)
Divided into:
Young Genera on (Eden + Survivor)
Old Genera on
Metaspace (Java 8+)
S Mukherjee
Java Memory Management & GC
void print() {
int x = 10; // Stored in stack
}
Un l
Life me Un l GC method
ends
Per
Scope Global (across threads)
thread
It has 3 parts:
o Eden: Where objects are first created.
o Survivor 1 & 2: Temporary holding areas for objects that survive
once.
S Mukherjee
Java Memory Management & GC
Objects that stay alive for a longer me (survive mul ple cleanups in
Young Gen) are moved here.
Think of it as a re rement home for old people (long-living objects).
It takes more me to clean, and causes app pauses when cleaned (called
Major GC).
These temp strings are short-lived → GC will clean them quickly from Eden.
S Mukherjee
Java Memory Management & GC
Since list stays in memory and grows, it's not collected early → moved to Old
Genera on.
Recommended:
Keep short-lived objects short-lived (don’t hold unnecessary references).
Avoid memory leaks so that Major GC happens less o en.
Monitor GC behavior in produc on (use VisualVM, JConsole, etc.).
S Mukherjee
Java Memory Management & GC
Example:
String name = new String("Java"); // Strong reference
Example:
WeakReference<String> weakRef = new WeakReference<>(new
String("Weak"));
Example:
So Reference<String> so Ref = new So Reference<>(new String("So "));
S Mukherjee
Java Memory Management & GC
Default object
Strong Never (unless null)
refs
Caching (LRU
So When memory is low
cache)
Maps, memory-
Weak Any me if no strong refs
sensi ve
Post-cleanup
Phantom A er GC collects it (no fy)
hooks
JVM Profilers:
VisualVM
jconsole
JProfiler
Eclipse MAT
jmap, jstat, jvisualvm
S Mukherjee
Java Memory Management & GC
Example:
List<String> list = new ArrayList<>();
while (true) {
list.add("Leak"); // Keeps growing → GC can't clean it
}
S Mukherjee
Java Memory Management & GC
S Mukherjee