অ্যান্ড্রয়েড রানটাইম (ART)-এ কোড প্রোফাইলিং সহ একটি জাস্ট-ইন-টাইম (JIT) কম্পাইলার রয়েছে, যা অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলো চলার সময় সেগুলোর পারফরম্যান্স ক্রমাগত উন্নত করে। JIT কম্পাইলারটি ART-এর বর্তমান অ্যাহেড-অফ-টাইম (AOT) কম্পাইলারের পরিপূরক হিসেবে কাজ করে এবং রানটাইমের পারফরম্যান্স উন্নত করে, স্টোরেজ স্পেস বাঁচায় এবং অ্যাপ্লিকেশন ও সিস্টেম আপডেটকে দ্রুততর করে। এটি স্বয়ংক্রিয় অ্যাপ্লিকেশন আপডেট চলাকালীন সিস্টেমের গতি হ্রাস বা ওভার-দ্য-এয়ার (OTA) আপডেটের সময় অ্যাপ্লিকেশনগুলোর পুনঃসংকলন এড়িয়ে AOT কম্পাইলারের চেয়েও উন্নত।
যদিও JIT এবং AOT একই ধরনের অপটিমাইজেশন সহ একই কম্পাইলার ব্যবহার করে, তবুও তৈরি হওয়া কোড হুবহু এক নাও হতে পারে। JIT রানটাইম টাইপ ইনফরমেশন ব্যবহার করে, আরও ভালোভাবে ইনলাইনিং করতে পারে এবং অন স্ট্যাক রিপ্লেসমেন্ট (OSR) কম্পাইলেশন সম্ভব করে তোলে, যার ফলে কোড কিছুটা ভিন্ন ধরনের হয়।
JIT স্থাপত্য

JIT সংকলন
JIT কম্পাইলেশনের সাথে নিম্নলিখিত কার্যক্রমগুলো জড়িত:

- ব্যবহারকারী অ্যাপটি চালান, যা ART-কে
.dexফাইলটি লোড করতে উদ্দীপিত করে।- যদি
.oatফাইলটি (অর্থাৎ.dexফাইলের AOT বাইনারি) উপলব্ধ থাকে, ART সরাসরি সেটি ব্যবহার করে। যদিও.oatফাইলগুলো নিয়মিত তৈরি হয়, সেগুলোতে সবসময় কম্পাইল করা কোড (AOT বাইনারি) থাকে না। - যদি
.oatফাইলে কম্পাইল করা কোড না থাকে, তাহলে ART, JIT এবং ইন্টারপ্রেটারের মাধ্যমে.dexফাইলটি এক্সিকিউট করে।
- যদি
- যে কোনো অ্যাপ্লিকেশন যা
speedকম্পাইলেশন ফিল্টার (যেখানে বলা আছে "অ্যাপ থেকে যতটা সম্ভব কম্পাইল করো") অনুযায়ী কম্পাইল করা হয়নি, সেটির জন্য JIT সক্রিয় করা হয়। - JIT প্রোফাইল ডেটা সিস্টেম ডিরেক্টরির একটি ফাইলে জমা করা হয়, যেটিতে শুধুমাত্র অ্যাপ্লিকেশনটিই প্রবেশ করতে পারে।
- AOT কম্পাইলেশন (
dex2oat) ডেমন তার কম্পাইলেশন পরিচালনার জন্য ফাইলটি পার্স করে।
চিত্র ৩. JIT ডেমন-এর কার্যক্রম।
গুগল প্লে পরিষেবা হলো এমন একটি উদাহরণ যা শেয়ার্ড লাইব্রেরির মতো আচরণকারী অন্যান্য অ্যাপ্লিকেশনগুলো ব্যবহার করে থাকে।
JIT ওয়ার্কফ্লো

- প্রোফাইলিং তথ্য কোড ক্যাশে সংরক্ষিত থাকে এবং মেমরির চাপের কারণে গার্বেজ কালেকশনের মাধ্যমে অপসারিত হয়।
- অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ডে থাকাকালীন নেওয়া স্ন্যাপশটে সম্পূর্ণ ডেটা (অর্থাৎ, JIT করা সবকিছু) থাকবে এমন কোনো নিশ্চয়তা নেই।
- সবকিছু রেকর্ড করা হচ্ছে কিনা তা নিশ্চিত করার কোনো চেষ্টা করা হয় না (কারণ এটি রানটাইম পারফরম্যান্সকে প্রভাবিত করতে পারে)।
- পদ্ধতিগুলো তিনটি ভিন্ন অবস্থায় থাকতে পারে:
- ব্যাখ্যা করা হয়েছে (ডেক্স কোড)
- JIT সংকলিত
- AOT সংকলিত
- ফোরগ্রাউন্ড অ্যাপের পারফরম্যান্সে প্রভাব না ফেলে JIT চালানোর জন্য প্রয়োজনীয় মেমরি অ্যাপটির উপর নির্ভর করে। ছোট অ্যাপের তুলনায় বড় অ্যাপের জন্য বেশি মেমরির প্রয়োজন হয়। সাধারণত, বড় অ্যাপগুলোর জন্য প্রায় ৪ মেগাবাইট মেমরি লাগে।
JIT লগিং চালু করুন
JIT লগিং চালু করতে, নিম্নলিখিত কমান্ডগুলো চালান:
adb rootadb shell stopadb shell setprop dalvik.vm.extra-opts -verbose:jitadb shell start
JIT নিষ্ক্রিয় করুন
JIT নিষ্ক্রিয় করতে, নিম্নলিখিত কমান্ডগুলি চালান:
adb rootadb shell stopadb shell setprop dalvik.vm.usejit falseadb shell start
বল সংকলন
জোরপূর্বক কম্পাইলেশন করতে, নিম্নলিখিতটি চালান:
adb shell cmd package compile
কোনো নির্দিষ্ট প্যাকেজ ফোর্স কম্পাইল করার সাধারণ ব্যবহারসমূহ:
- প্রোফাইল-ভিত্তিক:
adb shell cmd package compile -m speed-profile -f my-package
- পূর্ণ:
adb shell cmd package compile -m speed -f my-package
সমস্ত প্যাকেজ জোরপূর্বক কম্পাইল করার সাধারণ ব্যবহারসমূহ:
- প্রোফাইল-ভিত্তিক:
adb shell cmd package compile -m speed-profile -f -a
- পূর্ণ:
adb shell cmd package compile -m speed -f -a
প্রোফাইল ডেটা পরিষ্কার করুন
অ্যান্ড্রয়েড ১৩ বা তার আগের সংস্করণে
স্থানীয় প্রোফাইল ডেটা মুছে ফেলতে এবং কম্পাইল করা কোড অপসারণ করতে, নিম্নলিখিতটি চালান:
adb shell pm compile --reset
অ্যান্ড্রয়েড ১৪ বা তার পরবর্তী সংস্করণে
শুধুমাত্র স্থানীয় প্রোফাইল ডেটা মুছে ফেলার জন্য:
adb shell pm art clear-app-profiles
দ্রষ্টব্য: অ্যান্ড্রয়েড ১৩ বা তার আগের সংস্করণের কমান্ডের মতো নয়, এই কমান্ডটি অ্যাপের সাথে ইনস্টল হওয়া বাহ্যিক প্রোফাইল ডেটা (`.dm`) মুছে ফেলে না।
স্থানীয় প্রোফাইল ডেটা মুছে ফেলতে এবং স্থানীয় প্রোফাইল ডেটা থেকে তৈরি কম্পাইল করা কোড অপসারণ করতে (অর্থাৎ, ইনস্টল অবস্থায় রিসেট করতে), নিম্নলিখিতটি চালান:
adb shell pm compile --reset
দ্রষ্টব্য: এই কমান্ডটি অ্যাপের সাথে ইনস্টল হওয়া বাহ্যিক প্রোফাইল ডেটা (`.dm`) থেকে তৈরি কম্পাইল করা কোড মুছে ফেলে না।
সমস্ত কম্পাইল করা কোড মুছে ফেলতে এই কমান্ডটি চালান:
adb shell cmd package compile -m verify -f
দ্রষ্টব্য: এই কমান্ডটি স্থানীয় প্রোফাইল ডেটা অক্ষুণ্ণ রাখে।