কম্পিউটার

কিভাবে বন্ধ মেমরি লিক হতে পারে এবং কিভাবে এটি প্রতিরোধ করতে পারে?


বন্ধ

জাভাস্ক্রিপ্টের অন্যতম শক্তি হল বন্ধ করা। জাভাস্ক্রিপ্ট নেস্টেড ফাংশন, একটি ফাংশনের ভিতরে একটি ফাংশন, প্যারেন্ট ফাংশনগুলির ভেরিয়েবল অ্যাক্সেস করতে দেয়। একটি অভ্যন্তরীণ ফাংশন দ্বারা বহিরাগত ফাংশনের পরিবর্তনশীল অ্যাক্সেস করার এই প্রক্রিয়াটিকে ক্লোজার বলা হয়। একটি মেমরি লিক ঘটে যখন একটি ঘোষিত ভেরিয়েবল অভ্যন্তরীণ নেস্টেড ফাংশনে স্বয়ংক্রিয়ভাবে উপলব্ধ হয় এবং এটি ভিতরের নেস্টেড ফাংশনে উল্লেখ না থাকা সত্ত্বেও একটি মেমরিতে থাকে৷

নিম্নলিখিত উদাহরণে 'childFunction' হল অভ্যন্তরীণ ফাংশন যা 'parentFunction'-এর বাইরের ফাংশনের মধ্যে সংজ্ঞায়িত করা হয়েছে। যখন একটি প্যারামিটার "আউটার ভ্যাল" সহ 'প্যারেন্টফাংশন'-এ কল করা হয়, তখন বাইরের ভেরিয়েবল a-কে "বাইরের ভ্যাল"-এর মান নির্ধারণ করা হয়। ফাংশনটি একটি পয়েন্টার সহ অভ্যন্তরীণ ফাংশন "childFunction"-এ ফিরে আসে, যা পরিবর্তনশীল 'ভাল'।

বাইরের ফাংশনটি ফিরে আসা সত্ত্বেও বাইরের ফাংশনের স্থানীয় পরিবর্তনশীল a এখনও বিদ্যমান থাকবে। জাভাস্ক্রিপ্টে যে মুহুর্তে প্যারেন্ট ফাংশন বলা হয়, 'a' বৈশিষ্ট্য সহ একটি স্কোপ অবজেক্ট তৈরি করা হয়। এই বৈশিষ্ট্যটিতে arg1 এর মান রয়েছে, যা "বাইরের ভাল" নামেও পরিচিত। একইভাবে যখন প্যারেন্ট ফাংশন ফিরে আসে, তখন এটি অভ্যন্তরীণ ফাংশন (চাইল্ড ফাংশন) ফিরিয়ে দেবে, যা পরিবর্তনশীল ভ্যালে রয়েছে।

যেহেতু ভিতরের ফাংশনটি বাইরের ফাংশনের ভেরিয়েবলের একটি রেফারেন্স ধারণ করে, তাই 'a' বৈশিষ্ট্য সহ স্কোপ অবজেক্টটি আবর্জনা সংগ্রহ করা হবে না।

উদাহরণ

<html>
<body>
<script>
   window.onload= function parentFunction(arg1) {
      var a = arg1;
      return function childFunction (arg2)
   {
      alert( a +" "+ arg2);
   };
   };
   var val = parentFunction("outer val");
   val("inner val");
</script>
</body>
</html>

মেমরি লিক এড়ানো

আরো একটি ফাংশন যোগ করা হচ্ছে

আরেকটি ফাংশন যোগ করলে, দুটি অভ্যন্তরীণ ফাংশন থাকবে। যেহেতু দুটি অভ্যন্তরীণ ফাংশন রয়েছে, তাই কোনও ফাংশন সম্পূর্ণরূপে বন্ধ বন্ধ করে বাইরের ফাংশনের পরিবর্তনশীলকে উল্লেখ করতে পারে না৷

যখন কোন বন্ধ না হয় মেমরি ফুটো সম্ভাবনা কম হবে.

উদাহরণ

<html>
<body>
<script>
   window.onload=function parentFunction(){
      var Obj1 = function childFunction1()
      {
         document.write("the leak is avoided");
      };
   (function childFunction2(){
      var obj2 = document.getElementById("closure");
      obj2.onclick=Obj1
      })();
   };
</script>
<input type = "button" id="closure" value ="Click Here">
</body>
</html>

কোডটি এক্সিকিউট হয়ে গেলে নিচের মত একটি বোতাম প্রদর্শিত হবে

কিভাবে বন্ধ মেমরি লিক হতে পারে এবং কিভাবে এটি প্রতিরোধ করতে পারে?

বোতাম টিপলে আমরা নিচের মত আউটপুট পাব

আউটপুট

the leak is avoided

  1. স্পাইওয়্যার কী, কাকে আক্রমণ করা যায় এবং কীভাবে এটি প্রতিরোধ করা যায়

  2. অ্যাডওয়্যার কি এবং কিভাবে আপনি এটি প্রতিরোধ করতে পারেন?

  3. DNS লিক কী এবং কীভাবে এটি প্রতিরোধ করা যায়?

  4. কিভাবে স্পাইওয়্যার এবং অ্যাডওয়্যার প্রতিরোধ করবেন?