Java Memory Management β Basic Idea
Java ka memory management system Java Virtual Machine (JVM) ke through control hota hai. Jab bhi koi object create hota hai, uske liye JVM memory allocate karta hai aur jab wo object use nahi hota, to Garbage Collector usse remove kar deta hai.
Java mein memory 2 major areas mein divide hoti hai:
Stack vs. Heap Memory
1. Stack Memory:
- Ye memory method ke local variables aur function calls ko store karti hai.
- Jab koi method call hota hai, uske liye ek stack frame banta hai.
- Method end hone par wo frame remove ho jata hai.
- Fast and automatic memory management hota hai.
2. Heap Memory:
- Ye memory objects aur instance variables ke liye use hoti hai.
- Jab tum
new
keyword se object banate ho, wo heap mein store hota hai. - Garbage Collector heap ki safai karta hai, unused objects ko remove karke.
Example:
public class Test {
int x = 10; // stored in heap (object)
public void show() {
int y = 5; // stored in stack (method local variable)
}
}
What is Garbage Collection (GC) in Java?
Garbage Collection ka kaam hai unused ya unreachable objects ko memory se hata dena taaki memory free ho jaye aur performance degrade na ho.
Java mein hum GC ko manually control nahi karte, ye automatic hota hai, lekin hum usse indirectly request kar sakte hain:
System.gc(); // GC ko request bhejna
π Note: JVM isko ignore bhi kar sakta hai. Itβs just a request, not a command.
πͺ¦ finalize() Method β RIP Before Object Dies
Java mein finalize()
ek method hota tha jo tab call hota tha jab object destroy hone wala hota hai.
@Override
protected void finalize() throws Throwable {
System.out.println("Object is about to be destroyed");
}
Important: Java 9 ke baad finalize()
method deprecated ho gaya hai kyunki ye unreliable aur unsafe tha. Aaj ke time pe isko avoid karna chahiye.
Types of References in Java (Strong, Weak, Soft, Phantom)
JVM garbage collector reference ke type ke basis par decide karta hai ki object ko delete karna hai ya nahi. Java mein 4 types ke references hote hain:
1. Strong Reference (Default)
- Jo normal object tum banate ho, wo strong reference hota hai.
- Jab tak ye reference exist karta hai, object GC ke liye eligible nahi hota.
Test obj = new Test(); // strong reference
2. Weak Reference
- GC in objects ko tabhi delete kar sakta hai jab no strong reference bacha ho.
- Mostly caching ke cases mein use hota hai.
WeakReference<Test> weakRef = new WeakReference<>(new Test());
3. Soft Reference
- GC in objects ko tab delete karta hai jab memory low hoti hai.
- Useful for memory-sensitive caches.
SoftReference<Test> softRef = new SoftReference<>(new Test());
4. Phantom Reference
- Ye object GC ke liye already eligible hota hai, but tum iske saath cleanup tasks plan kar sakte ho.
- Use
ReferenceQueue
ke saath.
PhantomReference<Test> phantomRef = new PhantomReference<>(new Test(), new ReferenceQueue<>());
Summary
- Java memory divide hoti hai Stack (for methods, local vars) aur Heap (for objects) mein.
- Garbage Collector automatically memory free karta hai.
finalize()
method ab outdated hai, use avoid karo.- Java mein 4 reference types hote hain β Strong, Weak, Soft, Phantom β jo GC ke behavior ko control karte hain.
Developer Tip
Memory leak Java mein bhi possible hai agar references proper handle nahi karo.
Weak/Soft references ka use karo jab cache ya temporary data store karna ho.
Comments