JavaRush /جاوا بلاگ /Random-UR /جاوا میموری کے انتظام کے لیے ایک گائیڈ (اور اپنا کوڈ محفو...
pandaFromMinsk
سطح
Минск

جاوا میموری کے انتظام کے لیے ایک گائیڈ (اور اپنا کوڈ محفوظ کرنا)

گروپ میں شائع ہوا۔
مترجم کا نوٹ: اس نوٹ کا ترجمہ کرنے کی خواہش جون کی صبح ایک سب وے کار میں آدھی نیند میں پڑھنے کے بعد ظاہر ہوئی۔ ہدف کے سامعین: وہ لوگ جو جاوا کی دنیا میں اپنے پہلے قدم اٹھا رہے ہیں اور، اپنے بنیادی تکنیکی پس منظر یا خواہش کی نوعیت کی وجہ سے، جاوا کے ہڈ میں آنے اور تمام "الیکٹرو ڈائنامک" عمل کو سیکھنے کے لیے بہت بے چین ہیں۔ مجھے یقین ہے کہ جو لوگ اسے پڑھتے ہیں، یہ JVM اور GC کو ترتیب دینے کی دنیا میں سفر کا نقطہ آغاز ہوگا۔ صاف ہوا! اصل مضمون یہاں ایک ڈویلپر کے طور پر، آپ جاوا ایپلیکیشن سے کیڑے صاف کرنے اور کارکردگی حاصل کرنے میں لاتعداد گھنٹے صرف کرتے ہیں جہاں اس کی ضرورت ہوتی ہے۔ جانچ کے دوران، آپ نے دیکھا کہ ایپلیکیشن آہستہ آہستہ چلتی ہے، اور آخر میں یہ مکمل طور پر کریش ہو جاتی ہے یا صرف خراب کارکردگی دکھاتی ہے۔ آخر کار یہ قبول کر لیں کہ میموری لیک ہو جاتی ہے۔ کوڑا اٹھانے والا جاوا ان لیکس سے نمٹنے کے لیے اپنی پوری کوشش کرتا ہے۔ لیکن ایسی بہت سی چیزیں ہیں جو اس طرح کے حالات کا سامنا کرتے وقت کی جا سکتی ہیں۔ آپ کو میموری لیک کالز کی شناخت کرنے، وجوہات کی نشاندہی کرنے، اور ایپلیکیشن کی مجموعی کارکردگی کو متاثر کرنے میں جاوا کوڑا جمع کرنے والے کے کردار کو سمجھنے کے طریقوں کی ضرورت ہے۔

جاوا میموری لیک کی اہم علامات

کئی علامات ہیں جو اس بات کی نشاندہی کرتی ہیں کہ ایپلی کیشن میں میموری لیک ہونے کے مسائل ہیں۔ اچانک ایپلی کیشن کی ناکامی کے بجائے کارکردگی میں معمولی کمی، صرف میموری لیک ہونے کی نشاندہی کرتی ہے۔ یہ مسئلہ ہر بار آپریشن کے دوران یا صرف اس وقت ہو سکتا ہے جب ایپلی کیشن ڈیٹا کی ایک بڑی مقدار کے ساتھ کام کرنا شروع کر دے یا اس کے برعکس آپ ایپلیکیشن کو سکیل کرنا شروع کر دیں۔ ایک بار لیک ہونے کے بعد میموری کے تمام دستیاب وسائل استعمال ہو جانے کے بعد ایپلیکیشن غالباً میموری کی خرابی دکھائے گی۔ اگر آپ ایپلیکیشن کو دوبارہ شروع کرتے ہیں اور بہترین کی امید رکھتے ہیں، تو آپ کو بار بار کریشوں کا سامنا کرنا پڑے گا جب تک کہ لیک ٹھیک نہیں ہو جاتا۔ عام طور پر، میموری لیک اس وقت ہوتی ہے جب میموری کو آزاد کرنے کے بجائے آبجیکٹ کے حوالہ جات جمع ہوتے ہیں۔ وہ تمام دستیاب میموری پر قبضہ کر لیتے ہیں اور ایپلیکیشن کے لیے ضروری وسائل تک رسائی کو ناممکن بنا دیتے ہیں۔

کنفیگریشن کی خرابیاں میموری لیک ہونے کے طور پر ظاہر ہو رہی ہیں۔

اس سے پہلے کہ آپ ایسے حالات کو دیکھیں جو جاوا میموری کے مسائل کا سبب بنتے ہیں اور تجزیہ کرتے ہیں، آپ کو یہ یقینی بنانا ہوگا کہ تحقیق کا تعلق بالکل مختلف مسئلہ سے نہیں ہے۔ کچھ میموری سے باہر کی غلطیاں مختلف خرابیوں کی وجہ سے ہوتی ہیں، جیسے کنفیگریشن کی خرابی۔ ایپلی کیشن ہیپ میموری پر کم ہو سکتی ہے یا سسٹم پر موجود دیگر ایپلیکیشنز سے متصادم ہو سکتی ہے۔ اگر آپ کم میموری کے مسائل کے بارے میں بات کرنا شروع کرتے ہیں لیکن یہ نہیں جان سکتے کہ لیک ہونے کی وجہ کیا ہے، تو ایپلیکیشن پر ایک مختلف نظر ڈالیں۔ آپ دیکھیں گے کہ آپ کو حتمی شکل دینے والے دھاگے میں تبدیلیاں کرنے یا مستقل جنریشن اسپیس کی مقدار میں اضافہ کرنے کی ضرورت ہے، جو جاوا کلاسز کی تفصیل اور کچھ اضافی ڈیٹا کو ذخیرہ کرنے کے لیے JVM میموری کا ایک علاقہ ہے۔

میموری مانیٹرنگ ٹولز کے فوائد

میموری مانیٹرنگ ٹولز جاوا ایپلیکیشن کے دستیاب وسائل کے استعمال میں زیادہ مرئیت فراہم کرتے ہیں۔ اس سافٹ ویئر کو استعمال کرکے، آپ میموری لیک ہونے اور کارکردگی کے دیگر واقعات کے مسئلے کی جڑ کی تلاش کو کم کرنے کی طرف ایک قدم اٹھاتے ہیں۔ ٹولز کئی زمروں میں آتے ہیں، اور آپ کو یہ معلوم کرنے کے لیے مختلف قسم کی ایپلی کیشنز استعمال کرنے کی ضرورت پڑ سکتی ہے کہ مسئلہ کو صحیح طریقے سے کیسے جھنڈا دیا جائے اور کیا غلط ہوا، چاہے آپ میموری لیکس سے نمٹ رہے ہوں۔ ہیپ ڈمپ فائلیں جاوا میموری کا تجزیہ کرنے کے لیے ضروری معلومات فراہم کرتی ہیں۔ اس صورت میں، آپ کو دو ٹولز استعمال کرنے کی ضرورت ہے: ایک ڈمپ فائل بنانے کے لیے اور دوسرا تفصیلی تجزیہ کے لیے۔ یہ حل اس بارے میں تفصیلی معلومات فراہم کرتا ہے کہ درخواست کے ساتھ کیا ہو رہا ہے۔ ایک بار جب ٹول ممکنہ مسائل کی جگہوں کی نشاندہی کرتا ہے اور واقعے کے صحیح مقام کو دریافت کرنے کے لیے علاقے کو تنگ کرنے کے لیے کام کرتا ہے۔ اور وقت کی یہ مدت آزمائش اور غلطی کے سب سے طویل اور موڈ کو سخت کرنے والے حصے کا وقت ہے۔ میموری تجزیہ کار آپ کے کوڈ میں کئی مسائل کی نشاندہی کرتا ہے، لیکن آپ کو قطعی طور پر یقین نہیں ہے کہ آپ کی ایپلی کیشن کو کن مسائل کا سامنا ہے۔ اگر آپ کو اب بھی وہی خرابی درپیش ہے تو دوبارہ شروع کریں اور دوسری ممکنہ غلطی پر کام کریں۔ ایک وقت میں ایک تبدیلی کریں اور غلطی کو نقل کرنے کی کوشش کریں۔ غلطی کے حالات کو نقل کرنے کے لیے آپ کو درخواست کو کچھ وقت تک چلنے دینا ہوگا۔ اگر پہلے ٹیسٹ کے دوران میموری لیک ہو جائے تو، ایپلی کیشن کو ٹیسٹ لوڈ کرنا یقینی بنائیں۔ ایک ایپلیکیشن تھوڑی مقدار میں ڈیٹا کے ساتھ ٹھیک کام کر سکتی ہے، لیکن بڑی مقدار میں ڈیٹا کے ساتھ کام کرتے وقت دوبارہ وہی غلطیاں پھینک سکتی ہے۔ اگر وہی غلطی اب بھی ہوتی ہے، تو آپ کو دوبارہ شروع کرنے اور دوسری ممکنہ وجہ تلاش کرنے کی ضرورت ہے۔ ایپلی کیشن کے مکمل طور پر کام کرنے کے بعد میموری مانیٹرنگ ٹولز اپنی افادیت ثابت کرتے ہیں۔ آپ JVM کی کارکردگی کو دور سے مانیٹر کر سکتے ہیں اور ناکامی کے حالات کو فعال طور پر تلاش کر سکتے ہیں اس سے پہلے کہ کوئی ڈویلپر مسئلے میں ڈوب جائے اور مستقبل میں ان کی پروگرامنگ تکنیک کو بہتر بنانے میں مدد کے لیے تاریخی کارکردگی کا ڈیٹا اکٹھا کرے اور دیکھے کہ جاوا بھاری بوجھ کے تحت کس طرح کارکردگی دکھاتا ہے۔ بہت سے حلوں میں "خطرہ" الرٹ موڈز یا اسی طرح کے دوسرے موڈز شامل ہوتے ہیں تاکہ ڈویلپر فوری طور پر جان سکے کہ کیا غلط ہو رہا ہے۔ ہر ڈویلپر نہیں چاہتا کہ ایک اہم ایپلیکیشن، پروڈکشن کے دوران، کریش ہو اور ایپلیکیشن ڈاؤن ٹائم کے دوران دسیوں یا سیکڑوں ہزاروں ڈالر کے نقصان کا سبب بنے، لہذا میموری کی نگرانی کرنے والے ٹولز ڈویلپر کے جوابی وقت کو کم کر دیتے ہیں۔ میموری مانیٹرنگ ایپلی کیشنز آپ کو گاہک کے پاس جانے کے لیے کہنے کے بجائے، آپ کو فوری طور پر تشخیصی عمل شروع کرنے کی اجازت دیتی ہیں، جہاں کوئی بھی آپ کو قطعی طور پر یہ نہیں بتائے گا کہ کیا غلطی ہوئی ہے یا ایپلیکیشن نے کون سا ایرر کوڈ بنایا ہے۔ اگر آپ اکثر اپنے آپ کو اپنے جاوا ایپلیکیشن کی میموری اور کارکردگی کے مسائل میں ڈوبے ہوئے پاتے ہیں، تو جانچ کے عمل میں گہرا غوطہ لگائیں۔ ترقی کے عمل میں ہر کمزور علاقے کی نشاندہی کریں اور اپنی جانچ کی حکمت عملیوں کو تبدیل کریں۔ ساتھیوں سے مشورہ کریں اور اپنے ٹیسٹنگ طریقوں کا موجودہ بہترین طریقوں سے موازنہ کریں۔ بعض اوقات آپ کو کوڈ کے ایک چھوٹے سے ٹکڑے پر نظر ثانی کرنے کی ضرورت ہوتی ہے اور پھر پوری درخواست پر دیرپا اثر کو یقینی بنانا ہوتا ہے۔

جاوا میموری اور میموری لیکس پر کوڑا جمع کرنے والے کا کردار

جاوا میں کوڑا جمع کرنے والا ایپلی کیشن کی کارکردگی اور میموری کے استعمال میں کلیدی کردار ادا کرتا ہے۔ یہ غیر استعمال شدہ (مردہ) اشیاء کو تلاش کرتا ہے اور انہیں حذف کر دیتا ہے۔ یہ اشیاء اب میموری پر قابض نہیں ہیں، لہذا آپ کی درخواست وسائل کی دستیابی کو یقینی بناتی رہتی ہے۔ بعض اوقات درخواست GC کو مردہ اشیاء کو ہٹانے کے لیے کافی وقت یا وسائل نہیں دیتی اور وہ جمع ہو جاتی ہیں۔ آپ کو ایسی صورت حال کا سامنا کرنا پڑ سکتا ہے جہاں ان اشیاء تک فعال رسائی ہو جو آپ کے خیال میں مر چکے ہیں۔ کچرا اٹھانے والا اس بارے میں کچھ نہیں کر سکتا کیونکہ... اس کا خودکار میموری مینجمنٹ میکانزم فعال اشیاء کو نظرانداز کرتا ہے۔ عام طور پر کوڑا اٹھانے والا خود مختار طور پر کام کرتا ہے، لیکن آپ کو یادداشت کے شدید مسائل کا جواب دینے کے لیے اس کے رویے کو ٹیون کرنے کی ضرورت ہے۔ تاہم، GC خود کارکردگی کے مسائل پیدا کر سکتا ہے۔

جی سی ایریاز

کوڑا اٹھانے والا اسمبلی کو بہتر بنانے کے لیے اشیاء کو مختلف علاقوں میں الگ کرتا ہے۔ ینگ جنریشن میں ایسی اشیاء شامل ہیں جو جلد ختم ہو جاتی ہیں۔ کوڑا اٹھانے والا اکثر اس علاقے میں اس وقت سے کام کرتا ہے جب اسے صاف کرنا ہوتا ہے۔ ایک خاص مدت تک پہنچنے کے بعد زندہ رہنے والی اشیاء پرانی نسل میں منتقل ہو جاتی ہیں۔ اولڈ جنریشن ایریا میں، اشیاء طویل عرصے تک رہتی ہیں اور کلکٹر کے ذریعہ انہیں اکثر نہیں ہٹایا جاتا ہے۔ تاہم، جب کلکٹر دائرہ کار میں چل رہا ہوتا ہے، تو درخواست ایک بڑے آپریشن سے گزرتی ہے جہاں کلکٹر کوڑا کرکٹ صاف کرنے کے لیے زندہ اشیاء کے ذریعے دیکھتا ہے۔ نتیجے کے طور پر، درخواست کی اشیاء حتمی مستقل نسل کے علاقے میں واقع ہیں. عام طور پر، ان اشیاء میں ضروری JVM میٹا ڈیٹا شامل ہوتا ہے۔ ایپلیکیشن مستقل جنریشن میں زیادہ کچرا پیدا نہیں کرتی ہے، لیکن جب کلاسوں کی مزید ضرورت نہیں ہوتی ہے تو اسے ہٹانے کے لیے ایک کلکٹر کی ضرورت ہوتی ہے۔

کوڑا اٹھانے والے اور رسپانس ٹائم کے درمیان تعلق

کوڑا اٹھانے والا، درخواست کے دھاگوں کے عمل درآمد کی ترجیح سے قطع نظر، تکمیل کا انتظار کیے بغیر انہیں روک دیتا ہے۔ اس رجحان کو "دنیا کو روکو" واقعہ کہا جاتا ہے۔ کوڑا اٹھانے والے کے ینگ جنریشن کے علاقے کی کارکردگی پر معمولی اثر پڑتا ہے، لیکن اگر GC سخت صفائی کر رہا ہے تو مسائل نمایاں ہیں۔ آپ کا اختتام ایسی صورت حال میں ہوتا ہے جہاں ینگ جنریشن مائنر جی سی مسلسل چل رہا ہوتا ہے یا اولڈ جنریشن بے قابو حالت میں چلی جاتی ہے۔ ایسی صورت حال میں، آپ کو ینگ جنریشن فریکوئنسی کو کارکردگی کے ساتھ متوازن کرنے کی ضرورت ہے جس کے لیے اس کلیکٹر ایریا کے سائز کو بڑھانے کی ضرورت ہے۔ کوڑا اٹھانے والے کے مستقل جنریشن اور پرانی جنریشن والے علاقوں کا اطلاق کی کارکردگی اور میموری کے استعمال پر خاصا اثر پڑتا ہے۔ کچرے کی صفائی کا یہ بڑا آپریشن مردہ اشیاء کو باہر نکالنے کے لیے ڈھیر سے گزرتا ہے۔ اس عمل میں معمولی تعمیر سے زیادہ وقت لگتا ہے اور کارکردگی کے اثرات میں زیادہ وقت لگ سکتا ہے۔ جب اسکربنگ کی شدت زیادہ ہوتی ہے اور اولڈ جنریشن ایریا کا سائز بڑا ہوتا ہے، تو "دنیا کو روکو" کے واقعات کی وجہ سے پوری ایپلیکیشن کی کارکردگی متاثر ہو جاتی ہے۔ کوڑا کرکٹ جمع کرنے کو بہتر بنانے کے لیے اس بات کی نگرانی کی ضرورت ہوتی ہے کہ پروگرام کتنی بار چلایا جاتا ہے، مجموعی کارکردگی پر کیا اثر پڑتا ہے، اور نگرانی کی فریکوئنسی کو کم کرنے کے لیے ایپلیکیشن کی ترتیبات کو کیسے ایڈجسٹ کیا جائے۔ آپ کو ایک ہی چیز کی شناخت کرنے کی ضرورت پڑسکتی ہے جسے ایک سے زیادہ بار رکھا گیا ہے بغیر ایپلی کیشن کو جگہ کا تعین کرنے سے روکے، یا آپ کو کمپریشن پوائنٹس تلاش کرنے کی ضرورت پڑسکتی ہے جو پورے سسٹم کو روکے ہوئے ہیں۔ توازن کو درست رکھنے کے لیے CPU لوڈ سے لے کر کچرا اٹھانے والے سائیکل تک ہر چیز پر پوری توجہ دینے کی ضرورت ہوتی ہے، خاص طور پر اگر نوجوان اور پرانی نسل غیر متوازن ہو۔ میموری لیکس کو ایڈریس کرنا اور کوڑا کرکٹ جمع کرنے کو بہتر بنانا جاوا ایپلیکیشن کی کارکردگی کو بہتر بنانے میں مدد کرتا ہے۔ آپ لفظی طور پر بہت سارے متحرک حصوں کو جگا رہے ہیں۔ لیکن درست ٹربل شوٹنگ اپروچ اور تجزیہ کے ٹولز کے ساتھ جو سخت مرئیت فراہم کرنے کے لیے بنائے گئے ہیں، آپ سرنگ کے آخر میں روشنی تک پہنچ جائیں گے۔ بصورت دیگر، آپ کارکردگی سے متعلق مسائل کا شکار ہوں گے۔ محتاط میموری کی جگہ کا تعین اور نگرانی جاوا ایپلیکیشن میں اہم کردار ادا کرتی ہے۔ آپ کو اپنی درخواست کو بہتر بنانے اور یادداشت سے باہر کی غلطیوں سے بچنے کے لیے کوڑا کرکٹ جمع کرنے، آبجیکٹ کو ٹھکانے لگانے اور کارکردگی کے درمیان تعامل پر مکمل کنٹرول حاصل کرنے کی ضرورت ہے۔ مانیٹرنگ ٹولز آپ کو ممکنہ مسائل پر سب سے اوپر رہنے اور میموری کے استعمال کے رجحانات کو اجاگر کرنے میں مدد کرتے ہیں تاکہ آپ خرابیوں کا سراغ لگانے کے لیے ایک فعال طریقہ اختیار کریں۔ یادداشت کا لیک اکثر معمول کے طریقے سے خرابی کا ازالہ کرنے کی غیر موثریت کو ظاہر کرتا ہے، خاص طور پر اگر آپ کو کنفیگریشن پیرامیٹر کی غلط اقدار کا سامنا کرنا پڑتا ہے، لیکن میموری سے متعلق مسائل کو حل کرنے سے آپ کو ایسے واقعات سے فوری طور پر بچنے میں مدد مل سکتی ہے جو آپ کے راستے میں رکاوٹ بنتے ہیں۔ جاوا میموری ٹیوننگ اور جی سی کا کمال آپ کی ترقی کے عمل کو بہت آسان بنا دیتا ہے۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION