জাভা/কোটলিন বরাদ্দ রেকর্ড করুন

জাভা/কোটলিন বরাদ্দ রেকর্ড করা আপনাকে অবাঞ্ছিত মেমরি প্যাটার্ন সনাক্ত করতে সাহায্য করে যা কর্মক্ষমতা সমস্যা সৃষ্টি করতে পারে। প্রোফাইলার আপনাকে বস্তু বরাদ্দ সম্পর্কে নিম্নলিখিত দেখাতে পারে:

  • কি ধরনের বস্তু বরাদ্দ করা হয়েছিল এবং তারা কতটা জায়গা ব্যবহার করে।
  • কোন থ্রেড সহ প্রতিটি বরাদ্দের স্ট্যাক ট্রেস।
  • যখন বস্তুগুলি ডিলোকেটেড করা হয়েছিল।

স্বাভাবিক এবং চরম ব্যবহারকারীর ইন্টারঅ্যাকশনের সময় আপনার মেমরি বরাদ্দ রেকর্ড করা উচিত যেখানে আপনার কোড হয় অল্প সময়ের মধ্যে অনেকগুলি বস্তু বরাদ্দ করছে বা ফাঁস হয়ে যাওয়া বস্তুগুলি বরাদ্দ করছে। কেন আপনার অ্যাপ মেমরি প্রোফাইল করা উচিত সে সম্পর্কে আরও জানুন

জাভা/কোটলিন বরাদ্দ কিভাবে রেকর্ড করবেন

Java/Kotlin বরাদ্দ রেকর্ড করতে, প্রোফাইলার হোম ট্যাব থেকে ট্র্যাক মেমরি খরচ (জাভা/কোটলিন বরাদ্দ) টাস্ক নির্বাচন করুন । মনে রাখবেন যে জাভা/কোটলিন বরাদ্দ রেকর্ড করতে আপনার একটি ডিবাগযোগ্য অ্যাপ প্রয়োজন ( প্রোফাইলার ব্যবহার করুন: ডিবাগযোগ্য (সম্পূর্ণ ডেটা) হিসাবে 'অ্যাপ' চালান )।

অ্যান্ড্রয়েড স্টুডিও ডিফল্টরূপে মেমরিতে সমস্ত বস্তু বরাদ্দ ক্যাপচার করে। আপনার যদি এমন একটি অ্যাপ থাকে যা অনেকগুলি বস্তু বরাদ্দ করে, আপনি প্রোফাইল করার সময় আপনার অ্যাপের সাথে দৃশ্যমান মন্থরতা লক্ষ্য করতে পারেন। প্রোফাইলিং করার সময় কর্মক্ষমতা উন্নত করতে, বরাদ্দ ট্র্যাকিং ড্রপ-ডাউনে যান এবং সম্পূর্ণ এর পরিবর্তে নমুনা নির্বাচন করুন। নমুনা করার সময়, প্রোফাইলার নিয়মিত বিরতিতে মেমরিতে বস্তু বরাদ্দ সংগ্রহ করে।

রেকর্ড করার সময় একটি আবর্জনা সংগ্রহের ইভেন্ট জোর করতে, আবর্জনা আইকনে ক্লিক করুন .

জাভা/কোটলিন বরাদ্দ ওভারভিউ

আপনি রেকর্ডিং বন্ধ করার পরে, আপনি নিম্নলিখিত দেখতে পাবেন:

  • ইভেন্টের টাইমলাইন অ্যাক্টিভিটি স্টেট, ইউজার ইনপুট ইভেন্ট এবং স্ক্রিন রোটেশন ইভেন্ট দেখায়।
  • মেমরি ব্যবহারের সময়রেখা নিম্নলিখিত তথ্য দেখায়। একটি নির্দিষ্ট সময়সীমাতে ফিল্টার করতে টাইমলাইনের একটি অংশ নির্বাচন করুন।
    • প্রতিটি মেমরি বিভাগ দ্বারা কত মেমরি ব্যবহার করা হচ্ছে তার একটি স্ট্যাক করা গ্রাফ, বাম দিকের y-অক্ষ এবং উপরে রঙ কী দ্বারা নির্দেশিত৷
    • একটি ড্যাশড লাইন বরাদ্দকৃত বস্তুর সংখ্যা নির্দেশ করে, যেমনটি ডানদিকে y-অক্ষ দ্বারা নির্দেশিত।
    • প্রতিটি আবর্জনা সংগ্রহ ইভেন্টের জন্য একটি আইকন।
  • টেবিল ট্যাব ক্লাসের একটি তালিকা দেখায়। মোট গণনা হল নির্বাচিত সময় সীমার শেষে বরাদ্দের সংখ্যা ( বরাদ্দ বিয়োগ Deallocations ) , তাই সর্বোত্তম মোট গণনা মান আছে এমন ক্লাসগুলি ডিবাগ করার অর্থ হতে পারে৷ আপনি যদি নির্বাচিত সময় সীমার মধ্যে সর্বোচ্চ বরাদ্দের উপর ভিত্তি করে সমস্যা সমাধানে আগ্রহী হন তবে বরাদ্দের দ্বারা অগ্রাধিকার দিন। একইভাবে অবশিষ্ট আকার হল বরাদ্দের আকার বিয়োগ করে ডিঅ্যালোকেশন সাইজ বাইটে।
  • আপনি যখন টেবিল তালিকার একটি ক্লাসে ক্লিক করেন, ইনস্ট্যান্স ফলকটি সংশ্লিষ্ট বস্তুর একটি তালিকা সহ খোলে, সেগুলি কখন বরাদ্দ করা হয়েছিল, কখন সেগুলিকে ডিললোকেড করা হয়েছিল এবং তাদের অগভীর আকার সহ
  • ভিজ্যুয়ালাইজেশন ট্যাবটি নির্বাচিত সময় সীমার মধ্যে কল স্ট্যাকের সমস্ত বস্তুর একটি সমষ্টিগত দৃশ্য দেখায়। এটি মূলত আপনাকে দেখায় যে দেখানো উদাহরণগুলির সাথে কলস্ট্যাকের মোট কত মেমরি লাগে। প্রথম সারিটি থ্রেডের নাম দেখায়। ডিফল্টরূপে, বরাদ্দের আকারের উপর ভিত্তি করে বস্তুগুলিকে বাম থেকে ডানে স্ট্যাক করা হয়; অর্ডার পরিবর্তন করতে ড্রপ-ডাউন ব্যবহার করুন।

  • নির্দিষ্ট হিপে ফিল্টার করতে হিপ ড্রপ-ডাউন ব্যবহার করুন। আপনি যখন একটি হিপ ডাম্প ক্যাপচার করেন তখন উপলব্ধ ফিল্টারগুলি ছাড়াও, আপনি JNI হিপের ক্লাসগুলিতে ফিল্টার করতে পারেন, যে গাদাটি দেখায় যে জাভা নেটিভ ইন্টারফেস (JNI) রেফারেন্সগুলি কোথায় বরাদ্দ করা হয়েছে এবং প্রকাশ করা হয়েছে৷

  • বরাদ্দ কিভাবে সাজানো যায় তা চয়ন করতে বিন্যাস ড্রপ-ডাউন ব্যবহার করুন। আপনি একটি হিপ ডাম্প ক্যাপচার করার সময় উপলব্ধ ব্যবস্থা ছাড়াও, আপনি কলস্ট্যাকের মাধ্যমে ব্যবস্থা করতে পারেন।

কিভাবে মেমরি গণনা করা হয়

অ্যান্ড্রয়েড সিস্টেম অনুসারে আপনার অ্যাপের প্রতিশ্রুতিবদ্ধ সমস্ত ব্যক্তিগত মেমরি পৃষ্ঠাগুলির উপর ভিত্তি করে আপনি শীর্ষে যে সংখ্যাগুলি দেখছেন। এই গণনায় সিস্টেম বা অন্যান্য অ্যাপের সাথে শেয়ার করা পৃষ্ঠাগুলি অন্তর্ভুক্ত নয়। মেমরি কাউন্টের বিভাগগুলি নিম্নরূপ:

  • জাভা : জাভা বা কোটলিন কোড থেকে বরাদ্দ করা বস্তুর মেমরি।
  • নেটিভ : C বা C++ কোড থেকে বরাদ্দ করা বস্তুর মেমরি।

    আপনি আপনার অ্যাপে C++ ব্যবহার না করলেও, আপনি এখানে ব্যবহার করা কিছু নেটিভ মেমরি দেখতে পারেন কারণ অ্যান্ড্রয়েড ফ্রেমওয়ার্ক আপনার পক্ষ থেকে বিভিন্ন কাজ পরিচালনা করতে নেটিভ মেমরি ব্যবহার করে, যেমন ইমেজ অ্যাসেট এবং অন্যান্য গ্রাফিক্স পরিচালনা করার সময়— যদিও কোড আপনি জাভা বা কোটলিনে লেখা আছে।

  • গ্রাফিক্স : জিএল সারফেস, জিএল টেক্সচার এবং আরও অনেক কিছু সহ স্ক্রিনে পিক্সেল প্রদর্শনের জন্য গ্রাফিক্স বাফার সারিগুলির জন্য ব্যবহৃত মেমরি। মনে রাখবেন যে এটি CPU এর সাথে শেয়ার করা মেমরি, ডেডিকেটেড GPU মেমরি নয়।

  • স্ট্যাক : আপনার অ্যাপে নেটিভ এবং জাভা উভয় স্ট্যাক দ্বারা ব্যবহৃত মেমরি। এটি সাধারণত আপনার অ্যাপটি কতগুলি থ্রেড চলছে তার সাথে সম্পর্কিত।

  • কোড : মেমরি যা আপনার অ্যাপ কোড এবং সংস্থানগুলির জন্য ব্যবহার করে, যেমন DEX বাইটকোড, অপ্টিমাইজ করা বা কম্পাইল করা DEXcode,। so লাইব্রেরি, এবং ফন্ট।

  • অন্যান্য : আপনার অ্যাপ দ্বারা ব্যবহৃত মেমরি যেটি কীভাবে শ্রেণিবদ্ধ করতে হবে তা সিস্টেম নিশ্চিত নয়৷

  • বরাদ্দকৃত : আপনার অ্যাপ দ্বারা বরাদ্দকৃত জাভা/কোটলিন বস্তুর সংখ্যা। এটি C বা C++ এ বরাদ্দ করা বস্তুকে গণনা করে না।

বরাদ্দের রেকর্ড পরিদর্শন করুন

বরাদ্দ রেকর্ড পরিদর্শন করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অস্বাভাবিকভাবে বড় বরাদ্দ বা মোট গণনা মান (আপনি কিসের জন্য অপ্টিমাইজ করছেন তার উপর নির্ভর করে) এবং এটি ফাঁস হতে পারে এমন বস্তুগুলি খুঁজে পেতে টেবিল ট্যাবে ক্লাস তালিকা ব্রাউজ করুন৷
  2. ইনস্ট্যান্স ভিউ প্যানে, একটি উদাহরণে ক্লিক করুন। সেই উদাহরণে কী প্রযোজ্য তার উপর নির্ভর করে, ক্ষেত্র বা বরাদ্দ কল স্ট্যাক ট্যাব খোলে। দৃষ্টান্তগুলি সত্যিই প্রয়োজন বা অপ্রয়োজনীয় নকল কিনা তা নির্ধারণ করতে ক্ষেত্র বা বরাদ্দ কল স্ট্যাক ট্যাবের তথ্য ব্যবহার করুন৷

প্রাসঙ্গিক সোর্স কোডে যেতে যেকোনো তালিকার এন্ট্রিতে ডান-ক্লিক করুন।

বিশ্বব্যাপী JNI রেফারেন্স দেখুন

জাভা নেটিভ ইন্টারফেস (জেএনআই) হল একটি ফ্রেমওয়ার্ক যা জাভা কোড এবং নেটিভ কোড একে অপরকে কল করতে দেয়। JNI রেফারেন্সগুলি নেটিভ কোড দ্বারা ম্যানুয়ালি পরিচালিত হয়, তাই নিম্নলিখিতগুলি সহ সমস্যাগুলি ঘটতে পারে:

  • নেটিভ কোড দ্বারা ব্যবহৃত জাভা অবজেক্টগুলি খুব দীর্ঘ সময়ের জন্য জীবিত রাখা হয়।
  • JNI রেফারেন্স প্রথমে স্পষ্টভাবে মুছে না দিয়ে বাতিল করা হলে জাভা হিপের কিছু অবজেক্ট পৌঁছানো যায় না।
  • বিশ্বব্যাপী JNI রেফারেন্স সীমা শেষ হয়ে গেছে।

এই ধরনের সমস্যা সমাধানের জন্য, সমস্ত গ্লোবাল JNI রেফারেন্স ব্রাউজ করতে প্রোফাইলারে JNI হিপ দেখুন নির্বাচন করুন এবং জাভা প্রকার এবং নেটিভ কল স্ট্যাক দ্বারা ফিল্টার করুন। ক্ষেত্র ট্যাবে একটি উদাহরণ ক্ষেত্রে ডান-ক্লিক করুন এবং প্রাসঙ্গিক বরাদ্দ কল স্ট্যাক দেখতে ইনস্ট্যান্সে যান নির্বাচন করুন।

বরাদ্দ কল স্ট্যাক ট্যাব আপনাকে দেখায় যেখানে JNI রেফারেন্সগুলি আপনার কোডে বরাদ্দ করা হয়েছে এবং প্রকাশ করা হয়েছে৷

JNI সম্পর্কে আরও তথ্যের জন্য, JNI টিপস দেখুন।