Android রানটাইম (ART) হল ম্যানেজ করা রানটাইম যা Android-এ অ্যাপ এবং কিছু সিস্টেম পরিষেবা ব্যবহার করে। ART এবং এর পূর্বসূরি Dalvik মূলত Android প্রোজেক্টের জন্য তৈরি করা হয়েছিল। রানটাইম হিসেবে ART, Dalvik এক্সিকিউটেবল (DEX) ফর্ম্যাট এবং DEX বাইটকোড স্পেসিফিকেশন এক্সিকিউট করে।
ART এবং Dalvik হল DEX বাইটকোড রান করা মানানসই রানটাইম, তাই Dalvik-এর জন্য ডেভেলপ করা অ্যাপ ART-এর সাথে রান করার সময় কাজ করা উচিত। তবে, Dalvik-এ কাজ করে এমন কিছু টেকনিক ART-এ কাজ করে না। সবচেয়ে গুরুত্বপূর্ণ সমস্যা সম্পর্কে জানতে, Android রানটাইমে (ART) অ্যাপের পারফর্ম্যান্স যাচাই করা দেখুন।
ART ফিচার
ART-এর প্রয়োগ করা কিছু প্রধান ফিচার এখানে দেওয়া হল।
অহেড-অফ-টাইম (AOT) কম্পাইলেশন
ART আগে থেকে (AOT) কম্পাইলেশন চালু করে, যা অ্যাপের পারফর্ম্যান্স উন্নত করতে পারে। এছাড়াও, ART-তে ইনস্টল করার সময় Dalvik-এর চেয়ে আরও কঠোরভাবে যাচাই করা হয়।
ইনস্টল করার সময়, ART ডিভাইসে থাকা dex2oat টুল ব্যবহার করে অ্যাপ কম্পাইল করে। এই ইউটিলিটি ইনপুট হিসেবে DEX ফাইল গ্রহণ করে এবং টার্গেট ডিভাইসের জন্য একটি কম্পাইল করা অ্যাপ এক্সিকিউটেবল তৈরি করে। ইউটিলিটি যেন কোনও অসুবিধা ছাড়াই সব সঠিক DEX ফাইল কম্পাইল করতে পারে। তবে, কিছু পোস্ট-প্রসেসিং টুল ভুল ফাইল তৈরি করে যা Dalvik-এ কাজ করলেও ART-এ কম্পাইল করা যায় না। আরও তথ্যের জন্য, গার্বেজ কালেকশন সংক্রান্ত সমস্যা সমাধান করা দেখুন।
উন্নত গার্বেজ সংগ্রহ
গার্বেজ কালেকশন (GC) হল খুব বেশি রিসোর্স ইনটেনসিভ, যা কোনও অ্যাপের পারফর্ম্যান্সকে দুর্বল করে দিতে পারে, এর ফলে ডিসপ্লে চপি হয়ে যায়, UI রেসপন্সিভ হয় না এবং অন্যান্য সমস্যা হয়। ART বিভিন্ন উপায়ে গার্বেজ কালেকশন উন্নত করে:
- সিঙ্গেল GC পজ সহ বেশিরভাগ ক্ষেত্রে কনকারেন্ট ডিজাইন
- ব্যাকগ্রাউন্ড মেমরি ব্যবহার ও ফ্র্যাগমেন্টেশন কমাতে কনকারেন্ট কপি করা
- GC পজের দৈর্ঘ্য হিপ সাইজের উপর নির্ভর করে না
- সম্প্রতি অ্যালোকেট করা, স্বল্প-মেয়াদী অবজেক্ট পরিষ্কার করার বিশেষ ক্ষেত্রে কম মোট GC সময় সহ কালেক্টর
- উন্নত গার্বেজ কালেকশন এরগোনমিক্স, যা কনকারেন্ট গার্বেজ
কালেকশনকে আরও সময়োপযোগী করে তোলে, যার ফলে
GC_FOR_ALLOCইভেন্ট সাধারণ ব্যবহারের ক্ষেত্রে অত্যন্ত বিরল হয়ে ওঠে
ডেভেলপমেন্ট ও ডিবাগিং সংক্রান্ত উন্নতি
অ্যাপ ডেভেলপমেন্ট ও ডিবাগিং উন্নত করতে ART বিভিন্ন ফিচার অফার করে।
স্যাম্পলিং প্রোফাইলারের জন্য সহায়তা
ঐতিহাসিকভাবে, ডেভেলপাররা প্রোফাইলার হিসেবে Traceview টুল (অ্যাপ এক্সিকিউশন ট্রেস করার জন্য ডিজাইন করা) ব্যবহার করেছেন। Traceview প্রয়োজনীয় তথ্য দিলেও, Dalvik-এ এর ফলাফল প্রতি-মেথড-কল ওভারহেড দ্বারা প্রভাবিত হয় এবং টুল ব্যবহার করলে রান টাইম পারফর্ম্যান্সের উপর উল্লেখযোগ্য প্রভাব পড়ে।
ART-তে ডেডিকেটেড স্যাম্পেলিং প্রোফাইলারের জন্য সহায়তা যোগ করা হয়েছে, এতে এই সীমাবদ্ধতা নেই। এটি অ্যাপের এক্সিকিউশন সম্পর্কে আরও সঠিক ভিউ দেয় এবং সেটি উল্লেখযোগ্যভাবে ধীর হয়ে যায় না। KitKat রিলিজের মধ্যে Dalvik-এর জন্য Traceview-তে স্যাম্পেল নেওয়ার সুবিধা যোগ করা হয়েছে।
আরও ডিবাগিং ফিচারের জন্য সহায়তা
ART-তে বেশ কিছু নতুন ডিবাগিং বিকল্প কাজ করে, বিশেষ করে মনিটর ও গার্বেজ কালেকশন-সম্পর্কিত ফাংশনালিটি। যেমন, আপনি এগুলি করতে পারেন:
- স্ট্যাক ট্রেসে কোন কোন লক রয়েছে তা দেখুন, তারপর যে থ্রেডে লক রয়েছে সেখানে যান।
- কোনও নির্দিষ্ট ক্লাসের কতগুলি লাইভ ইনস্ট্যান্স আছে তা জিজ্ঞাসা করুন, ইনস্ট্যান্সগুলি দেখতে বলুন এবং কোন রেফারেন্স কোনও অবজেক্টকে লাইভ রাখছে তা দেখুন।
- নির্দিষ্ট ইনস্ট্যান্সের জন্য ইভেন্ট (যেমন, ব্রেকপয়েন্ট) ফিল্টার করুন।
- কোনও মেথড থেকে বেরিয়ে আসার সময় (“method-exit” ইভেন্ট ব্যবহার করে) সেটির রিটার্ন করা ভ্যালু দেখুন।
- কোনও নির্দিষ্ট ফিল্ড অ্যাক্সেস করা এবং/অথবা পরিবর্তন করা হলে, কোনও প্রোগ্রামের এক্সিকিউশন সাসপেন্ড করতে ফিল্ড ওয়াচপয়েন্ট সেট করুন।
ব্যতিক্রম ও ক্র্যাশ রিপোর্টে উন্নত ডায়াগনস্টিক বিবরণ
রানটাইম ব্যতিক্রম
ঘটলে ART আপনাকে যতটা সম্ভব প্রাসঙ্গিক তথ্য ও বিবরণ দেয়। ART, java.lang.ClassCastException,
java.lang.ClassNotFoundException,
এবং java.lang.NullPointerException-এর জন্য ব্যতিক্রমের বিস্তারিত বিবরণ প্রদান করে।
(Dalvik-এর পরবর্তী ভার্সন java.lang.ArrayIndexOutOfBoundsException
এবং java.lang.ArrayStoreException,
-এর জন্য আরও বিস্তারিত ব্যতিক্রম সংক্রান্ত তথ্য প্রদান করে, যার মধ্যে এখন অ্যারের সাইজ এবং আউট-অফ-বাউন্ডস অফসেট অন্তর্ভুক্ত থাকে এবং ART
ও এটি করে।)
যেমন, java.lang.NullPointerException
এখন নাল পয়েন্টার দিয়ে অ্যাপ কী করার চেষ্টা করছিল সেই সম্পর্কিত তথ্য দেখায়,
যেমন, অ্যাপ যে ফিল্ডে লেখার চেষ্টা করছিল অথবা যে মেথড কল করার চেষ্টা করছিল
সেটি। এখানে বিশেষ কিছু উদাহরণ দেওয়া হল:
java.lang.NullPointerException: Attempt to write to field 'int android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object reference
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
এছাড়াও, ART অ্যাপ নেটিভ ক্র্যাশ রিপোর্টে উন্নত প্রাসঙ্গিক তথ্য প্রদান করে, যার মধ্যে Java এবং নেটিভ স্ট্যাক তথ্য উভয়ই অন্তর্ভুক্ত থাকে।
সমস্যার বিষয়ে অভিযোগ জানানো
অ্যাপ JNI সংক্রান্ত সমস্যা ছাড়া অন্য কোনও সমস্যা হলে, Android ওপেন সোর্স
প্রোজেক্ট ইস্যু ট্র্যাকার-এর মাধ্যমে
সেটি রিপোর্ট করুন। Google Play Store-এ অ্যাপটি উপলভ্য থাকলে,
adb bugreport এবং অ্যাপের লিঙ্ক অন্তর্ভুক্ত করুন। অন্যথায়, সম্ভব হলে, এমন একটি
APK অ্যাটাচ করুন যা সমস্যাটি আবার তৈরি করে।