অ্যান্ড্রয়েড রানটাইম (এআরটি) কোড প্রোফাইলিং সহ একটি জাস্ট-ইন-টাইম (জেআইটি) কম্পাইলার অন্তর্ভুক্ত করে যা অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলি চালানোর সাথে সাথে তাদের কর্মক্ষমতাকে ক্রমাগত উন্নত করে। JIT কম্পাইলারটি ART-এর বর্তমান আগ-অফ-টাইম (AOT) কম্পাইলারকে পরিপূরক করে এবং রানটাইম কর্মক্ষমতা উন্নত করে, স্টোরেজ স্পেস বাঁচায় এবং অ্যাপ্লিকেশন ও সিস্টেম আপডেটের গতি বাড়ায়। এটি স্বয়ংক্রিয় অ্যাপ্লিকেশন আপডেট বা ওভার-দ্য-এয়ার (OTA) আপডেটের সময় অ্যাপ্লিকেশনগুলির পুনঃসংকলনের সময় সিস্টেমের ধীরগতি এড়ানোর মাধ্যমে AOT কম্পাইলারের উন্নতি করে।
যদিও জেআইটি এবং এওটি অপ্টিমাইজেশনের অনুরূপ সেটের সাথে একই কম্পাইলার ব্যবহার করে, উত্পন্ন কোড অভিন্ন নাও হতে পারে। JIT রানটাইম টাইপ তথ্য ব্যবহার করে, আরও ভাল ইনলাইনিং করতে পারে এবং স্ট্যাক রিপ্লেসমেন্ট (OSR) সংকলনকে সম্ভব করে তোলে, যার সবগুলিই সামান্য ভিন্ন কোড তৈরি করে।
জেআইটি আর্কিটেকচার
JIT সংকলন
JIT সংকলন নিম্নলিখিত কার্যক্রম জড়িত:
- ব্যবহারকারী অ্যাপটি চালায়, যা তারপর
.dex
ফাইল লোড করতে ART কে ট্রিগার করে।- যদি
.oat
ফাইল (.dex
ফাইলের জন্য AOT বাইনারি) পাওয়া যায়, ART এটি সরাসরি ব্যবহার করে। যদিও.oat
ফাইলগুলি নিয়মিত জেনারেট করা হয়, তবে তারা সবসময় কম্পাইল করা কোড (AOT বাইনারি) ধারণ করে না। - যদি
.oat
ফাইলে সংকলিত কোড না থাকে, ART.dex
ফাইলটি চালানোর জন্য JIT এবং দোভাষীর মাধ্যমে চলে।
- যদি
-
speed
সংকলন ফিল্টার (যা বলে "অ্যাপ থেকে যতটা সম্ভব কম্পাইল করুন") অনুযায়ী সংকলিত নয় এমন যেকোনো অ্যাপ্লিকেশনের জন্য JIT সক্ষম। - JIT প্রোফাইল ডেটা একটি সিস্টেম ডিরেক্টরির একটি ফাইলে ডাম্প করা হয় যা শুধুমাত্র অ্যাপ্লিকেশন অ্যাক্সেস করতে পারে।
- AOT কম্পাইলেশন (
dex2oat
) ডেমন সেই ফাইলটিকে কম্পাইলেশন চালানোর জন্য পার্স করে।চিত্র 3. JIT ডেমন কার্যক্রম।
Google Play পরিষেবা হল অন্যান্য অ্যাপ্লিকেশন দ্বারা ব্যবহৃত একটি উদাহরণ যা শেয়ার করা লাইব্রেরির মতো আচরণ করে।
JIT কর্মপ্রবাহ
- প্রোফাইলিং তথ্য কোড ক্যাশে সংরক্ষণ করা হয় এবং মেমরির চাপে আবর্জনা সংগ্রহের শিকার হয়।
- অ্যাপ্লিকেশানটি ব্যাকগ্রাউন্ডে থাকাকালীন নেওয়া একটি স্ন্যাপশটে সম্পূর্ণ ডেটা থাকবে (অর্থাৎ, জেআইটি করা হয়েছে এমন সবকিছু) এর কোনও গ্যারান্টি নেই৷
- সবকিছু রেকর্ড করা হয়েছে তা নিশ্চিত করার কোন প্রচেষ্টা নেই (কারণ এটি রানটাইম কর্মক্ষমতা প্রভাবিত করতে পারে)।
- পদ্ধতি তিনটি ভিন্ন অবস্থায় হতে পারে:
- ব্যাখ্যা করা (ডেক্স কোড)
- JIT সংকলিত
- AOT সংকলিত
- ফোরগ্রাউন্ড অ্যাপের কর্মক্ষমতা প্রভাবিত না করে JIT চালানোর জন্য মেমরির প্রয়োজনীয়তা প্রশ্নে থাকা অ্যাপের উপর নির্ভর করে। বড় অ্যাপের জন্য ছোট অ্যাপের চেয়ে বেশি মেমরির প্রয়োজন হয়। সাধারণভাবে, বড় অ্যাপগুলি প্রায় 4 MB স্থির করে।
JIT লগিং চালু করুন
JIT লগিং চালু করতে, নিম্নলিখিত কমান্ডগুলি চালান:
adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:jit
adb shell start
JIT নিষ্ক্রিয় করুন
JIT নিষ্ক্রিয় করতে, নিম্নলিখিত কমান্ডগুলি চালান:
adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb 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
প্রোফাইল ডেটা সাফ করুন
Android 13 বা তার আগের সংস্করণে
স্থানীয় প্রোফাইল ডেটা সাফ করতে এবং সংকলিত কোড সরাতে, নিম্নলিখিতটি চালান:
adb shell pm compile --reset
Android 14 বা তার পরবর্তী সংস্করণে
শুধুমাত্র স্থানীয় প্রোফাইল ডেটা সাফ করতে:
adb shell pm art clear-app-profiles
দ্রষ্টব্য: Android 13 বা তার আগের কমান্ডের বিপরীতে, এই কমান্ডটি অ্যাপের সাথে ইনস্টল করা এক্সটার্নাল প্রোফাইল ডেটা (`.dm`) সাফ করে না।
স্থানীয় প্রোফাইল ডেটা সাফ করতে এবং স্থানীয় প্রোফাইল ডেটা থেকে তৈরি সংকলিত কোড সরাতে (যেমন, ইনস্টল অবস্থায় পুনরায় সেট করতে), নিম্নলিখিতটি চালান:
adb shell pm compile --reset
দ্রষ্টব্য: এই কমান্ডটি অ্যাপের সাথে ইনস্টল করা বহিরাগত প্রোফাইল ডেটা (`.dm`) থেকে জেনারেট করা সংকলিত কোডকে সরিয়ে দেয় না।
সমস্ত সংকলিত কোড সাফ করতে, এই কমান্ডটি চালান:
adb shell cmd package compile -m verify -f
দ্রষ্টব্য: এই কমান্ড স্থানীয় প্রোফাইল ডেটা ধরে রাখে।
,অ্যান্ড্রয়েড রানটাইম (এআরটি) কোড প্রোফাইলিং সহ একটি জাস্ট-ইন-টাইম (জেআইটি) কম্পাইলার অন্তর্ভুক্ত করে যা অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলি চালানোর সাথে সাথে তাদের কর্মক্ষমতাকে ক্রমাগত উন্নত করে। JIT কম্পাইলারটি ART-এর বর্তমান আগ-অফ-টাইম (AOT) কম্পাইলারকে পরিপূরক করে এবং রানটাইম কর্মক্ষমতা উন্নত করে, স্টোরেজ স্পেস বাঁচায় এবং অ্যাপ্লিকেশন ও সিস্টেম আপডেটের গতি বাড়ায়। এটি স্বয়ংক্রিয় অ্যাপ্লিকেশন আপডেট বা ওভার-দ্য-এয়ার (OTA) আপডেটের সময় অ্যাপ্লিকেশনগুলির পুনঃসংকলনের সময় সিস্টেমের ধীরগতি এড়ানোর মাধ্যমে AOT কম্পাইলারের উন্নতি করে।
যদিও জেআইটি এবং এওটি অপ্টিমাইজেশনের অনুরূপ সেটের সাথে একই কম্পাইলার ব্যবহার করে, উত্পন্ন কোড অভিন্ন নাও হতে পারে। JIT রানটাইম টাইপ তথ্য ব্যবহার করে, আরও ভাল ইনলাইনিং করতে পারে এবং স্ট্যাক রিপ্লেসমেন্ট (OSR) সংকলনকে সম্ভব করে তোলে, যার সবগুলিই সামান্য ভিন্ন কোড তৈরি করে।
জেআইটি আর্কিটেকচার
JIT সংকলন
JIT সংকলন নিম্নলিখিত কার্যক্রম জড়িত:
- ব্যবহারকারী অ্যাপটি চালায়, যা তারপর
.dex
ফাইল লোড করতে ART কে ট্রিগার করে।- যদি
.oat
ফাইল (.dex
ফাইলের জন্য AOT বাইনারি) পাওয়া যায়, ART এটি সরাসরি ব্যবহার করে। যদিও.oat
ফাইলগুলি নিয়মিত জেনারেট করা হয়, তবে তারা সবসময় কম্পাইল করা কোড (AOT বাইনারি) ধারণ করে না। - যদি
.oat
ফাইলে সংকলিত কোড না থাকে, ART.dex
ফাইলটি চালানোর জন্য JIT এবং দোভাষীর মাধ্যমে চলে।
- যদি
-
speed
সংকলন ফিল্টার (যা বলে "অ্যাপ থেকে যতটা সম্ভব কম্পাইল করুন") অনুযায়ী সংকলিত নয় এমন যেকোনো অ্যাপ্লিকেশনের জন্য JIT সক্ষম। - JIT প্রোফাইল ডেটা একটি সিস্টেম ডিরেক্টরির একটি ফাইলে ডাম্প করা হয় যা শুধুমাত্র অ্যাপ্লিকেশন অ্যাক্সেস করতে পারে।
- AOT কম্পাইলেশন (
dex2oat
) ডেমন সেই ফাইলটিকে কম্পাইলেশন চালানোর জন্য পার্স করে।চিত্র 3. JIT ডেমন কার্যক্রম।
Google Play পরিষেবা হল অন্যান্য অ্যাপ্লিকেশন দ্বারা ব্যবহৃত একটি উদাহরণ যা শেয়ার করা লাইব্রেরির মতো আচরণ করে।
JIT কর্মপ্রবাহ
- প্রোফাইলিং তথ্য কোড ক্যাশে সংরক্ষণ করা হয় এবং মেমরির চাপে আবর্জনা সংগ্রহের শিকার হয়।
- অ্যাপ্লিকেশানটি ব্যাকগ্রাউন্ডে থাকাকালীন নেওয়া একটি স্ন্যাপশটে সম্পূর্ণ ডেটা থাকবে (অর্থাৎ, জেআইটি করা হয়েছে এমন সবকিছু) এর কোনও গ্যারান্টি নেই৷
- সবকিছু রেকর্ড করা হয়েছে তা নিশ্চিত করার কোন প্রচেষ্টা নেই (কারণ এটি রানটাইম কর্মক্ষমতা প্রভাবিত করতে পারে)।
- পদ্ধতি তিনটি ভিন্ন অবস্থায় হতে পারে:
- ব্যাখ্যা করা (ডেক্স কোড)
- JIT সংকলিত
- AOT সংকলিত
- ফোরগ্রাউন্ড অ্যাপের কর্মক্ষমতা প্রভাবিত না করে JIT চালানোর জন্য মেমরির প্রয়োজনীয়তা প্রশ্নে থাকা অ্যাপের উপর নির্ভর করে। বড় অ্যাপের জন্য ছোট অ্যাপের চেয়ে বেশি মেমরির প্রয়োজন হয়। সাধারণভাবে, বড় অ্যাপগুলি প্রায় 4 MB স্থির করে।
JIT লগিং চালু করুন
JIT লগিং চালু করতে, নিম্নলিখিত কমান্ডগুলি চালান:
adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:jit
adb shell start
JIT নিষ্ক্রিয় করুন
JIT নিষ্ক্রিয় করতে, নিম্নলিখিত কমান্ডগুলি চালান:
adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb 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
প্রোফাইল ডেটা সাফ করুন
Android 13 বা তার আগের সংস্করণে
স্থানীয় প্রোফাইল ডেটা সাফ করতে এবং সংকলিত কোড সরাতে, নিম্নলিখিতটি চালান:
adb shell pm compile --reset
Android 14 বা তার পরবর্তী সংস্করণে
শুধুমাত্র স্থানীয় প্রোফাইল ডেটা সাফ করতে:
adb shell pm art clear-app-profiles
দ্রষ্টব্য: Android 13 বা তার আগের কমান্ডের বিপরীতে, এই কমান্ডটি অ্যাপের সাথে ইনস্টল করা এক্সটার্নাল প্রোফাইল ডেটা (`.dm`) সাফ করে না।
স্থানীয় প্রোফাইল ডেটা সাফ করতে এবং স্থানীয় প্রোফাইল ডেটা থেকে তৈরি সংকলিত কোড সরাতে (যেমন, ইনস্টল অবস্থায় পুনরায় সেট করতে), নিম্নলিখিতটি চালান:
adb shell pm compile --reset
দ্রষ্টব্য: এই কমান্ডটি অ্যাপের সাথে ইনস্টল করা বহিরাগত প্রোফাইল ডেটা (`.dm`) থেকে জেনারেট করা সংকলিত কোডকে সরিয়ে দেয় না।
সমস্ত সংকলিত কোড সাফ করতে, এই কমান্ডটি চালান:
adb shell cmd package compile -m verify -f
দ্রষ্টব্য: এই কমান্ড স্থানীয় প্রোফাইল ডেটা ধরে রাখে।