কম্পিউটার

কিভাবে সার্কুলার রেফারেন্স জাভাস্ক্রিপ্টে মেমরি ফুটো হতে পারে?


বৃত্তাকার রেফারেন্স

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

হাইব্রিড সিস্টেমে, যেখানে রেফারেন্স গণনা এবং আবর্জনা সংগ্রহ ব্যবহার করা হয়, মেমরি লিক ঘটবে কারণ সিস্টেমটি সার্কুলার রেফারেন্স সনাক্ত করতে ব্যর্থ হয়।

উদাহরণ

নিচের উদাহরণটি জাভাস্ক্রিপ্ট অবজেক্ট এবং DOM অবজেক্টের মধ্যে একটি সার্কুলার রেফারেন্স দেখায়। জাভাস্ক্রিপ্ট অবজেক্টে DOM অবজেক্ট(Div) এবং Dom object(Div) এর রেফারেন্স রয়েছে, "expando" প্রোপার্টির মাধ্যমে, জাভাস্ক্রিপ্ট অবজেক্ট (obj) এর একটি রেফারেন্স রয়েছে। যেহেতু উভয় বস্তুই একে অপরের সাথে উল্লেখ করা হয়েছে, মেমরি লিক করে সেখানে কোনোটিকেই ধ্বংস করা যাবে না।

<html>
<body>
<script>  
   window.onload = function(){
   var obj=document.getElementById("DivElement");
   document.getElementById("DivElement").expandoProperty=obj;
   obj.String=new Array(1000).join(new Array(2000);
   };
</script>
</body>
</html>

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

নিম্নলিখিত উদাহরণে প্রাথমিকভাবে জাভাস্ক্রিপ্ট অবজেক্ট এবং ডম অবজেক্ট উভয়ই সার্কুলার রেফারেন্সে রয়েছে কিন্তু যখন জাভাস্ক্রিপ্ট অবজেক্টে নাল বরাদ্দ করা হয় তখন উভয় অবজেক্ট (জাভাস্ক্রিপ্ট এবং ডিওএম অবজেক্ট) তারা কাকে উল্লেখ করছে তা বোঝার জন্য দ্বিধাগ্রস্ত হবে যে জাভাস্ক্রিপ্ট অবজেক্ট রেফারেন্স করছে কিনা। সার্কুলার রেফারেন্স ভেঙ্গে সেখানে নাল বা DOM অবজেক্ট।

উদাহরণ

<html>
<body>
<script>  
   window.onload = function(){
   var obj=document.getElementById("DivElement");
   document.getElementById("DivElement").expandoProperty=obj;
   obj.String=new Array(1000).join(new Array(2000);
   obj = null        // this breaks circular reference
   };
</script>
</body>
</html>

  1. কিভাবে জাভাস্ক্রিপ্ট অবজেক্টে একটি স্ট্রিং রূপান্তর করবেন?

  2. জাভাস্ক্রিপ্টে একটি আমদানি করা বস্তুকে কীভাবে ডি-স্ট্রাকচার করবেন?

  3. কিভাবে একটি বহুমাত্রিক জাভাস্ক্রিপ্ট অবজেক্ট তৈরি করবেন?

  4. কিভাবে একটি বস্তুর মেমরি বরাদ্দ করা যায় যার দৈর্ঘ্য 0 সেট করা আছে - জাভাস্ক্রিপ্ট?