This Blog is Under Construction

Saturday, December 17, 2016

Memory Management in Java

আমরা জানি যে প্রত্যেকটা Object বা Variable গুলো Method এর ভিতরে থাকে। আমরা এটাও জানি যে প্রত্যেকটা Program main() method থেকে যাত্রা শুরু করে যেখানে অনেক গুলো ক্লাস Helper হিসেবে কাজ করে। Interesting এর বিষয় হল প্রত্যেকটা method মানেই একেকটা Thread in java. যেটা  JVM কে বলে দেয় যে সে একটা নির্দিষ্ট কাজ করবে। কথা হল যতগুলো Method থাকবে সবই Thread. যেমন MainClass এ যদি দুইটা Method থাকে main() method & print() method তাহলে দুইটাকেই আমরা Thread বলব।

Method এর ভিতর যখন আমরা কোন Object declare করি তখন সেই Object টা Heap Memory তে জমা হয়(String object এর জন্য Heap এ pool create হয়)। আর প্রত্যেকটা Thread(মেথড) এর জন্য Stack Memory তে একেকটা ব্লক তৈরি হয় যেটার লিঙ্ক heap memory থেকে পাবে। তার মানে হল main এর জন্য একটা ব্লক, print এর জন্য একটা ব্লক যদি আমরা উপরের দুইটা মেথড কল্পনা করি।

আমরা জানি যে Stack এ push, pop operation আছে(last in first out)। নিচের সিম্পল class টা কল্পনা করি।



1
2
3
4
5
6
7
8
public class MainClass{
public static void main(String amarVariables[]){//প্রথমে যেহেতু main call হবে তাই stack এ এইটা ঠুকবে, so stack: main()
int i = 1;
String stringObject = new String();//heap এ যাবে
Management mgt = new Management();//যেহেতু এইটা object এইটা heap এ চলে যাবে।
mgt.print();//similarly print যেহেতু method, so stack : print()(top position), main(); 
   }
}


উপরের program এ বলা হচ্ছে stack এ আগে main() ঠুকবে তারপর print() ঠুকবে এভাবে যত method থাকবে সবই push operation এর rules অনুযায়ী ঠুকবে & pop অনুযায়ী সবার শেষে main বের হবে, তারমানে program terminate হবে। ঘটনা হল আমার stack তো এখন ফাঁকা কিন্তু heap মেমোরির কি হবে? সমস্ত application এর কাজ শেষ হয়ে যাওয়ার পর Java এর Garbage_Collection heap memory এর মধ্যে তল্লাশি করে দেখবে যে heap memory এর মধ্যে আর কোন object টির কাজ নেই, যেটার যেটার নেই সেটাকে মেমোরি থেকে automatically ফ্রি করে দিবে।
এখানে একটা কথা বলে রাখা ভাল সেটা হল stack memory এর সাইজ heap memory এর চেয়ে কম।
heap memory কে sharable_or_global_memory ও বলে but stack memory ঐ নির্দিষ্ট method এর জন্য block create হয়। যদি stack memory full হয়ে যায় তার মানে এটার মধ্যে এতো পরিমাণ thread চলে যে সে আর লোড নিতে পারে না। তখন এক ধরনের error চলে আসে StackOverflowError. Similarly heap memory তে দিবে OutOfMemoryError.
প্রশ্ন: Performance কোনটার বেশি stack memory না heap memory এর?
প্রশ্ন: differentiate between stack memory & heap memory.

No comments:

Post a Comment