Garbage Collection
গারবেজ কালেকশন
Runtime নিজেই বের করে কোন object আর কেউ পৌঁছাতে পারে না (unreachable), আর সেগুলোর memory ফেরত নেয় — programmer-এর free() ছাড়াই।
সংজ্ঞাটা reachability-র — “কেউ পৌঁছাতে পারে না” ≠ “কেউ দরকার নেই”, তাই GC কখনো liveness জানে না, শুধু reachability মাপে:
roots (stack, globals, registers)
└── যা যা pointer-এ পৌঁছায় = live
বাকি সব = garbage
- Tracing (mark-sweep, copying): roots থেকে graph traverse — cycle-এ অন্ধ না
- Reference counting: প্রতি object-এ counter — cycle ধরতে পারে না
- Trade-off: manual free-এর deterministic মুক্তি বনাম GC-র pause আর বেশি peak memory
- C-তেও GC বানানো যায় (Boehm); ভাষার বৈশিষ্ট্য না, runtime-এর