এই পৃষ্ঠাটি কিভাবে ART কনফিগার করতে হয় এবং এর সংকলন বিকল্পগুলি নিয়ে আলোচনা করে। এখানে সম্বোধন করা বিষয়গুলির মধ্যে রয়েছে সিস্টেম ইমেজের প্রাক-সংকলনের কনফিগারেশন, dex2oat কম্পাইলেশন অপশন, এবং কীভাবে সিস্টেম পার্টিশন স্পেস, ডেটা পার্টিশন স্পেস এবং পারফরমেন্স ট্রেড করা যায়।
ART এবং Dalvik , Dalvik এক্সিকিউটেবল ফরম্যাট এবং source.android.com-এ ART-এর সাথে কাজ করার জন্য অবশিষ্ট পৃষ্ঠাগুলি দেখুন। আপনার অ্যাপ্লিকেশানগুলি সঠিকভাবে কাজ করে তা নিশ্চিত করতে Android রানটাইম (ART) এ অ্যাপ আচরণ যাচাই করা দেখুন।
কিভাবে ART কাজ করে
ART এড-অফ-টাইম (AOT) সংকলন ব্যবহার করে এবং Android 7.0 (Nougat বা N) থেকে শুরু করে, এটি AOT, জাস্ট-ইন-টাইম (JIT) সংকলন এবং প্রোফাইল-গাইডেড কম্পাইলেশনের একটি হাইব্রিড সমন্বয় ব্যবহার করে। এই সমস্ত সংকলন মোডগুলির সমন্বয় কনফিগারযোগ্য এবং এই বিভাগে আলোচনা করা হবে। উদাহরণ হিসাবে, পিক্সেল ডিভাইসগুলি নিম্নলিখিত সংকলন প্রবাহের সাথে কনফিগার করা হয়েছে:
- একটি অ্যাপ্লিকেশন প্রাথমিকভাবে কোনো AOT সংকলন ছাড়াই ইনস্টল করা হয়। প্রথম কয়েকবার অ্যাপ্লিকেশন চালানো হয়, এটি ব্যাখ্যা করা হয়, এবং প্রায়শই চালানো পদ্ধতিগুলি JIT কম্পাইল করা হয়।
- যখন ডিভাইসটি নিষ্ক্রিয় থাকে এবং চার্জিং হয়, একটি সংকলন ডেমন প্রথম রানের সময় তৈরি হওয়া প্রোফাইলের উপর ভিত্তি করে AOT-সংকলন ঘন ঘন ব্যবহৃত কোডে চলে।
- একটি অ্যাপ্লিকেশনের পরবর্তী পুনঃসূচনা প্রোফাইল-নির্দেশিত কোড ব্যবহার করে এবং ইতিমধ্যে সংকলিত পদ্ধতিগুলির জন্য রানটাইমে JIT সংকলন করা এড়িয়ে চলুন। নতুন রানের সময় JIT-সংকলিত পদ্ধতিগুলি প্রোফাইলে যোগ করা হয়, যা পরে কম্পাইলেশন ডেমন দ্বারা বাছাই করা হবে।
ART-এ একটি কম্পাইলার ( dex2oat
টুল) এবং একটি রানটাইম ( libart.so
) রয়েছে যা জাইগোট শুরু করার জন্য লোড করা হয়। dex2oat
টুলটি একটি APK ফাইল নেয় এবং রানটাইম লোড হওয়া এক বা একাধিক সংকলন আর্টিফ্যাক্ট ফাইল তৈরি করে। ফাইলের সংখ্যা, তাদের এক্সটেনশন এবং নাম রিলিজ জুড়ে পরিবর্তন সাপেক্ষে, কিন্তু Android 8 রিলিজ হিসাবে, ফাইলগুলি তৈরি করা হচ্ছে:
-
.vdex
: যাচাইকরণের গতি বাড়ানোর জন্য কিছু অতিরিক্ত মেটাডেটা সহ APK-এর অসঙ্কোচিত DEX কোড রয়েছে। -
.odex
: APK-এ পদ্ধতির জন্য AOT সংকলিত কোড রয়েছে। -
.art (optional)
: এপিকে তালিকাভুক্ত কিছু স্ট্রিং এবং ক্লাসের ART অভ্যন্তরীণ উপস্থাপনা রয়েছে, অ্যাপ্লিকেশন স্টার্টআপের গতি বাড়াতে ব্যবহৃত।
সংকলন বিকল্প
ART-এর জন্য কম্পাইলেশন অপশন দুটি বিভাগে রয়েছে:
- সিস্টেম রম কনফিগারেশন: সিস্টেম ইমেজ তৈরি করার সময় কোন কোড AOT-সংকলিত হয়।
- রানটাইম কনফিগারেশন: এআরটি কীভাবে একটি ডিভাইসে অ্যাপ্লিকেশন কম্পাইল করে এবং চালায়।
এই দুটি বিভাগ কনফিগার করার জন্য একটি মূল ART বিকল্প হল কম্পাইলার ফিল্টার । কম্পাইলার ফিল্টারগুলি কীভাবে ART DEX কোড কম্পাইল করে তা চালায় এবং এটি dex2oat
টুলে পাস করা একটি বিকল্প। অ্যান্ড্রয়েড 8 থেকে শুরু করে, চারটি আনুষ্ঠানিকভাবে সমর্থিত ফিল্টার রয়েছে:
-
verify
: শুধুমাত্র DEX কোড যাচাইকরণ চালান। -
quicken
: (Android 12 থেকে সরানো হয়েছে) DEX কোড যাচাইকরণ চালান এবং আরও ভাল দোভাষী কর্মক্ষমতা পেতে কিছু DEX নির্দেশাবলী অপ্টিমাইজ করুন। -
speed
: DEX কোড যাচাইকরণ চালান এবং AOT-সমস্ত পদ্ধতি কম্পাইল করুন। -
speed-profile
: প্রোফাইল ফাইলে তালিকাভুক্ত DEX কোড যাচাইকরণ এবং AOT-কম্পাইল পদ্ধতি চালান।
সিস্টেম রম কনফিগারেশন
সিস্টেম রম কনফিগার করার জন্য অনেকগুলি এআরটি বিল্ড বিকল্প রয়েছে। আপনি কীভাবে এই বিকল্পগুলি কনফিগার করবেন তা নির্ভর করে সিস্টেম ইমেজের জন্য উপলব্ধ স্টোরেজ স্থান এবং পূর্বে ইনস্টল করা অ্যাপ্লিকেশনের সংখ্যার উপর। একটি সিস্টেম রমে সংকলিত JARs/APK গুলিকে চারটি বিভাগে ভাগ করা যেতে পারে:
- বুট ক্লাসপাথ কোড: ডিফল্টভাবে
speed-profile
কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়। - সিস্টেম সার্ভার কোড (এই নথিতে পরে
PRODUCT_SYSTEM_SERVER_JARS
,PRODUCT_APEX_SYSTEM_SERVER_JARS
,PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
,PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
দেখুন):- (যেহেতু অ্যান্ড্রয়েড 14 (AOSP পরীক্ষামূলক)) ডিফল্টভাবে
speed-profile
কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়েছে, অথবা যদি প্রোফাইল দেওয়া না থাকে তাহলেspeed
কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়েছে। - (অ্যান্ড্রয়েড 13 পর্যন্ত) ডিফল্টভাবে
speed
কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়েছে।
PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
এর মাধ্যমে কনফিগারযোগ্য (পরে এই নথিতে দেখুন)। - (যেহেতু অ্যান্ড্রয়েড 14 (AOSP পরীক্ষামূলক)) ডিফল্টভাবে
- পণ্য-নির্দিষ্ট মূল অ্যাপ্লিকেশনগুলি (এই নথিতে পরে
PRODUCT_DEXPREOPT_SPEED_APPS
দেখুন): ডিফল্টরূপেspeed
সংকলক ফিল্টার দিয়ে সংকলিত৷ - অন্যান্য সমস্ত অ্যাপ্লিকেশন: ডিফল্টরূপে
speed-profile
কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা, অথবা যদি প্রোফাইল প্রদান না করা হয় তাহলেverify
কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়।PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
এর মাধ্যমে কনফিগারযোগ্য (পরে এই নথিতে দেখুন)।
মেকফাইল অপশন
-
WITH_DEXPREOPT
-
DONT_DEXPREOPT_PREBUILTS
(অ্যান্ড্রয়েড 5 থেকে) -
PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
(Android 9 থেকে) -
WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
(Android 8 MR1 এ নতুন) -
LOCAL_DEX_PREOPT
-
PRODUCT_DEX_PREOPT_BOOT_FLAGS
-
PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
-
PRODUCT_DEX_PREOPT_MODULE_CONFIGS
-
PRODUCT_DEXPREOPT_SPEED_APPS (New in Android 8)
-
PRODUCT_SYSTEM_SERVER_APPS (New in Android 8)
-
PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD(Post Android 8)
-
WITH_DEXPREOPT_PIC (Removed in Android 8)
-
WITH_DEXPREOPT_BOOT_IMG_ONLY
(Android 8 MR1 এ সরানো হয়েছে) -
PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
- (যেহেতু অ্যান্ড্রয়েড 14 (AOSP পরীক্ষামূলক)) অনির্দিষ্ট থাকলে,
speed-profile
কম্পাইলার ফিল্টার ব্যবহার করা হয়, অথবা প্রোফাইল প্রদান না করা হলেspeed
কম্পাইলার ফিল্টার ব্যবহার করা হয়। - (অ্যান্ড্রয়েড 13 পর্যন্ত) অনির্দিষ্ট থাকলে,
speed
কম্পাইলার ফিল্টার ব্যবহার করা হয়। -
speed
সেট করা হলে,speed
কম্পাইলার ফিল্টার ব্যবহার করা হয়। -
speed-profile
সেট করা থাকলে,speed-profile
কম্পাইলার ফিল্টার ব্যবহার করা হয়, অথবা প্রোফাইল প্রদান না করা হলেverify
কম্পাইলার ফিল্টার ব্যবহার করা হয়। -
verify
করার জন্য সেট করা থাকলে,verify
কম্পাইলার ফিল্টার ব্যবহার করা হয়। -
PRODUCT_SYSTEM_SERVER_JARS
,PRODUCT_APEX_SYSTEM_SERVER_JARS
,PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
,PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
- (প্রয়োজনীয়)
PRODUCT_SYSTEM_SERVER_JARS
: প্ল্যাটফর্মে সিস্টেম সার্ভার ক্লাসপাথ জারগুলির তালিকা (যেমন,SYSTEMSERVERCLASSPATH
এর অংশ হিসাবে)। এই তালিকায় সিস্টেম সার্ভার ক্লাসপাথ জার যোগ করা প্রয়োজন। তালিকায় সিস্টেম সার্ভার ক্লাসপাথ জার যুক্ত করতে ব্যর্থ হলে সেই জারগুলি লোড হচ্ছে না। - (প্রয়োজনীয়)
PRODUCT_APEX_SYSTEM_SERVER_JARS
: সিস্টেম সার্ভার ক্লাসপাথ জারগুলির তালিকা যা এপেক্সের মাধ্যমে বিতরণ করা হয়েছে (যেমন,SYSTEMSERVERCLASSPATH
এর অংশ হিসাবে)। বিন্যাস হল<apex name>:<jar name>
। এই তালিকায় এপেক্স সিস্টেম সার্ভার ক্লাসপাথ জার যোগ করা প্রয়োজন। এই তালিকায় এপেক্স সিস্টেম সার্ভার ক্লাসপাথ জার যুক্ত করতে ব্যর্থ হলে সেই জারগুলি লোড হচ্ছে না। - (ঐচ্ছিক, Android 13 থেকে)
PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
: জারগুলির তালিকা যা সিস্টেম সার্ভার গতিশীলভাবে পৃথক ক্লাসলোডার ব্যবহার করে লোড করে (SystemServiceManager.startServiceFromJar
এর মাধ্যমে)। এই তালিকায় স্বতন্ত্র সিস্টেম সার্ভার জারগুলি যোগ করার প্রয়োজন নেই তবে দৃঢ়ভাবে সুপারিশ করা হয় কারণ এটি জারগুলিকে সংকলিত করে এবং তাই একটি ভাল রানটাইম কর্মক্ষমতা রয়েছে। - (অবশ্যক, Android 13 থেকে)
PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
: অ্যাপেক্সের মাধ্যমে বিতরণ করা জারগুলির তালিকা যা সিস্টেম সার্ভার পৃথক ক্লাসলোডার ব্যবহার করে গতিশীলভাবে লোড করে (যেমন,SystemServiceManager.startServiceFromJar
মাধ্যমে বা<apex-system-service>
হিসাবে ঘোষিত)। বিন্যাস হল<apex name>:<jar name>
। এই তালিকায় স্বতন্ত্র এপেক্স সিস্টেম সার্ভার জার যোগ করা প্রয়োজন। এই তালিকায় স্বতন্ত্র এপেক্স সিস্টেম সার্ভার জার যোগ করতে ব্যর্থ হলে বুট ব্যর্থতা দেখা দেয়। - প্রিলোড করা ক্লাসের তালিকা
সিস্টেম ইমেজে ইনস্টল করা DEX কোডে dex2oat
আহ্বান করা হয়েছে কিনা। ডিফল্টরূপে সক্রিয়.
DONT_DEXPREOPT_PREBUILTS সক্ষম করা প্রি-অপ্টিমাইজ হওয়া থেকে DONT_DEXPREOPT_PREBUILTS
বাধা দেয়৷ এগুলি এমন অ্যাপ যা তাদের Android.mk
এ নির্দিষ্ট include $(BUILD_PREBUILT)
করে। Google Play-এর মাধ্যমে আপডেট হতে পারে এমন প্রি-অপ্টিমাইজেশন এড়িয়ে যাওয়া সিস্টেম ইমেজে জায়গা বাঁচায় কিন্তু প্রথম বুট টাইম যোগ করে। মনে রাখবেন যে Android.bp
এ সংজ্ঞায়িত প্রি-বিল্ট অ্যাপগুলিতে এই বিকল্পটির কোনো প্রভাব নেই।
PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
পূর্ব-অপ্টিমাইজ করা অ্যাপ্লিকেশনগুলির জন্য ডিফল্ট কম্পাইলার ফিল্টার নির্দিষ্ট করে৷ এই অ্যাপগুলিকে Android.mk
এ সংজ্ঞায়িত করা হয়েছে বা তাদের Android.bp
এ নির্দিষ্ট include $(BUILD_PREBUILT)
। অনির্দিষ্ট থাকলে, ডিফল্ট মানটি হয় speed-profile
, অথবা মানটি অনির্দিষ্ট থাকলে এবং একটি প্রোফাইল প্রদান করা না থাকলে তা verify
করুন৷
WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY সক্ষম করা শুধুমাত্র বুট ক্লাসপথ এবং সিস্টেম সার্ভার WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
প্রাক-অপ্টিমাইজ করে৷
মডিউল সংজ্ঞায় LOCAL_DEX_PREOPT
বিকল্পটি নির্দিষ্ট করে একটি পৃথক অ্যাপের ভিত্তিতে প্রাক-অপ্টিমাইজেশন সক্ষম বা নিষ্ক্রিয় করা যেতে পারে। এটি এমন অ্যাপগুলির প্রাক-অপ্টিমাইজেশন অক্ষম করার জন্য কার্যকর হতে পারে যেগুলি অবিলম্বে Google Play আপডেটগুলি পেতে পারে কারণ আপডেটগুলি সিস্টেমের চিত্রে প্রাক-অপ্টিমাইজ করা কোডটিকে অপ্রচলিত করে দেবে৷ এটি প্রধান সংস্করণ আপগ্রেড OTA-তে স্থান বাঁচাতেও দরকারী কারণ ব্যবহারকারীদের ইতিমধ্যে ডেটা পার্টিশনে অ্যাপগুলির নতুন সংস্করণ থাকতে পারে।
LOCAL_DEX_PREOPT
যথাক্রমে প্রাক-অপ্টিমাইজেশান সক্ষম বা অক্ষম করতে 'সত্য' বা 'মিথ্যা' মানগুলিকে সমর্থন করে। উপরন্তু, 'নস্ট্রিপিং' নির্দিষ্ট করা যেতে পারে যদি প্রি-অপ্টিমাইজেশানটি APK বা JAR ফাইল থেকে classes.dex
ফাইলটি ছিনিয়ে না নেয়। সাধারণত এই ফাইলটি ছিনতাই করা হয় কারণ প্রাক-অপ্টিমাইজেশনের পরে এটির আর প্রয়োজন নেই, তবে তৃতীয় পক্ষের APK স্বাক্ষরগুলিকে বৈধ রাখার অনুমতি দেওয়ার জন্য এই শেষ বিকল্পটি প্রয়োজনীয়।
বুট ইমেজ কিভাবে কম্পাইল করা হয় তা নিয়ন্ত্রণ করতে dex2oat
এ অপশন পাস করে। এটি কাস্টমাইজড ইমেজ ক্লাস লিস্ট, কম্পাইল করা ক্লাস লিস্ট এবং কম্পাইলার ফিল্টার নির্দিষ্ট করতে ব্যবহার করা যেতে পারে।
বুট ইমেজ ছাড়াও সবকিছু কীভাবে সংকলিত হয় তা নিয়ন্ত্রণ করতে dex2oat
এ বিকল্পগুলি পাস করে।
একটি নির্দিষ্ট মডিউল এবং পণ্য কনফিগারেশনের জন্য dex2oat
বিকল্পগুলি পাস করার ক্ষমতা প্রদান করে। এটি একটি পণ্যের device.mk
ফাইলে $(call add-product-dex-preopt-module-config,<modules>,<option>)
দ্বারা সেট করা হয় যেখানে <modules>
JAR এবং APK-এর জন্য LOCAL_MODULE এবং LOCAL_PACKAGE নামের একটি তালিকা ফাইল, যথাক্রমে।
অ্যাপ্লিকেশনগুলির তালিকা যা পণ্যগুলির মূল হিসাবে চিহ্নিত করা হয়েছে এবং যেগুলি speed
কম্পাইলার ফিল্টারের সাথে কম্পাইল করা পছন্দনীয়৷ উদাহরণস্বরূপ, সিস্টেমইউআই-এর মতো স্থায়ী অ্যাপগুলি শুধুমাত্র পরবর্তী রিবুটে প্রোফাইল-নির্দেশিত সংকলন ব্যবহার করার সুযোগ পায়, তাই এই অ্যাপগুলি সবসময় AOT-সংকলিত থাকা পণ্যের পক্ষে ভাল হতে পারে।
সিস্টেম সার্ভার দ্বারা লোড করা অ্যাপ্লিকেশনের তালিকা৷ এই অ্যাপ্লিকেশনগুলি speed
কম্পাইলার ফিল্টার দিয়ে ডিফল্টরূপে কম্পাইল করা হয়।
ডিভাইসে ART এর একটি ডিবাগ সংস্করণ অন্তর্ভুক্ত করা হবে কিনা। ডিফল্টরূপে, এটি userdebug এবং eng বিল্ডের জন্য সক্রিয় করা হয়। আচরণটি স্পষ্টভাবে true
বা false
বিকল্প সেট করে ওভাররাইড করা যেতে পারে।
ডিফল্টরূপে, ডিভাইসটি অ-ডিবাগ সংস্করণ ( libart.so
) ব্যবহার করে। স্যুইচ করতে, সিস্টেম প্রপার্টি persist.sys.dalvik.vm.lib.2
libartd.so
সেট করুন।
Android 5.1.0 থেকে Android 6.0.1-এ, WITH_DEXPREOPT_PIC
পজিশন-ইনডিপেনডেন্ট কোড (PIC) সক্ষম করতে নির্দিষ্ট করা যেতে পারে। এর সাথে, ইমেজ থেকে সংকলিত কোডকে /সিস্টেম থেকে /ডাটা/ডালভিক-ক্যাশে স্থানান্তর করতে হবে না, ডেটা পার্টিশনে স্থান বাঁচাতে হবে। যাইহোক, একটি সামান্য রানটাইম প্রভাব আছে কারণ এটি একটি অপ্টিমাইজেশন অক্ষম করে যা অবস্থান-নির্ভর কোডের সুবিধা নেয়। সাধারণত, /ডেটাতে স্থান বাঁচাতে চায় এমন ডিভাইসগুলিকে PIC সংকলন সক্ষম করা উচিত।
অ্যান্ড্রয়েড 7.0-এ, পিআইসি সংকলন ডিফল্টরূপে সক্ষম ছিল।
এই বিকল্পটি WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY দিয়ে প্রতিস্থাপিত হয়েছে যা সিস্টেম সার্ভার জারগুলিকেও প্রিঅপ্ট করে৷
এই বিকল্পটি সিস্টেম সার্ভারের জন্য কম্পাইলার ফিল্টার নির্দিষ্ট করে।
নীচে সিস্টেম সার্ভার দ্বারা লোড করা জারগুলির তালিকা রয়েছে৷ জারগুলি PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
দ্বারা নির্দিষ্ট করা কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়েছে
বুট ক্লাসপাথ কনফিগারেশন
প্রিলোড করা ক্লাসের তালিকা হল ক্লাসের একটি তালিকা যা জাইগোট স্টার্টআপে শুরু করে। এটি প্রতিটি অ্যাপকে এই ক্লাস ইনিশিয়ালাইজারগুলিকে আলাদাভাবে চালানো থেকে বাঁচায়, তাদের দ্রুত শুরু করতে এবং মেমরিতে পৃষ্ঠাগুলি ভাগ করার অনুমতি দেয়। প্রিলোড করা ক্লাসের তালিকা ফাইলটি ডিফল্টরূপে frameworks/base/config/preloaded-classes
অবস্থিত এবং এতে একটি তালিকা রয়েছে যা সাধারণ ফোন ব্যবহারের জন্য টিউন করা হয়েছে। এটি পরিধানযোগ্য অন্যান্য ডিভাইসের জন্য ভিন্ন হতে পারে এবং সেই অনুযায়ী টিউন করতে হবে। এই টিউন করার সময় সতর্ক থাকুন; অব্যবহৃত ক্লাস লোড হয়ে গেলে অনেকগুলি ক্লাস যোগ করা স্মৃতি নষ্ট করে। খুব কম ক্লাস যোগ করলে প্রতিটি অ্যাপের নিজস্ব কপি থাকতে হয়, যা আবার মেমরি নষ্ট করে।
উদাহরণ ব্যবহার (পণ্যের device.mk এ):
PRODUCT_COPY_FILES += <filename>:system/etc/preloaded-classes
দ্রষ্টব্য: কোনো পণ্য কনফিগারেশন মেকফাইল উত্তরাধিকারসূত্রে নেওয়ার আগে এই লাইনটি স্থাপন করা আবশ্যক যেগুলি থেকে ডিফল্ট একটি পাওয়া যায়: build/target/product/base.mk
রানটাইম কনফিগারেশন
জিট বিকল্প
নিম্নলিখিত বিকল্পগুলি শুধুমাত্র Android রিলিজগুলিকে প্রভাবিত করে যেখানে ART JIT কম্পাইলার উপলব্ধ।
- dalvik.vm.usejit: JIT সক্ষম হোক বা না হোক।
- dalvik.vm.jitinitialsize (ডিফল্ট 64K): কোড ক্যাশের প্রাথমিক ক্ষমতা। কোড ক্যাশে নিয়মিত GC এবং প্রয়োজন হলে বৃদ্ধি হবে.
- dalvik.vm.jitmaxsize (ডিফল্ট 64M): কোড ক্যাশের সর্বোচ্চ ক্ষমতা।
- dalvik.vm.jitthreshold: (ডিফল্ট 10000) - এটি সেই থ্রেশহোল্ড যা একটি পদ্ধতির "হটনেস" কাউন্টারকে পাস করতে হবে যাতে পদ্ধতিটি JIT কম্পাইল করা যায়। "হটনেস" কাউন্টারটি রানটাইমের একটি মেট্রিক অভ্যন্তরীণ। এতে কলের সংখ্যা, অনগ্রসর শাখা এবং অন্যান্য বিষয় অন্তর্ভুক্ত রয়েছে।
- dalvik.vm.usejitprofiles: JIT প্রোফাইল সক্রিয় আছে কি না; dalvik.vm.usejit মিথ্যা হলেও এটি ব্যবহার করা যেতে পারে। মনে রাখবেন যে এটি মিথ্যা হলে, কম্পাইলার ফিল্টার
speed-profile
কোনো পদ্ধতি AOT-কম্পাইল করে না এবংverify
সমতুল্য। - dalvik.vm.jitprithreadweight (ডিফল্ট থেকে dalvik.vm.jitthreshold / 20) - অ্যাপ্লিকেশন UI থ্রেডের জন্য JIT "নমুনা" (জিটথ্রেশহোল্ড দেখুন) এর ওজন। অ্যাপের সাথে ইন্টারঅ্যাক্ট করার সময় ব্যবহারকারীদের অভিজ্ঞতাকে সরাসরি প্রভাবিত করে এমন পদ্ধতির সংকলন দ্রুত করতে ব্যবহার করুন।
- dalvik.vm.jittransitionweight: (ডিফল্ট থেকে dalvik.vm.jitthreshold / 10) পদ্ধতি আহ্বানের ওজন যা কম্পাইল কোড এবং ইন্টারপ্রেটারের মধ্যে রূপান্তরিত হয়। এটি নিশ্চিত করতে সহায়তা করে যে জড়িত পদ্ধতিগুলি ট্রানজিশনগুলি কমানোর জন্য সংকলিত হয়েছে (যা ব্যয়বহুল)।
প্যাকেজ ম্যানেজার বিকল্প
অ্যান্ড্রয়েড 7.0 থেকে, বিভিন্ন পর্যায়ে সংকলন/যাচাইয়ের স্তর নির্দিষ্ট করার একটি সাধারণ উপায় রয়েছে। সংকলন স্তরগুলি ডিফল্টগুলি সহ সিস্টেম বৈশিষ্ট্যগুলির মাধ্যমে কনফিগার করা যেতে পারে:
-
pm.dexopt.install=speed-profile
-
pm.dexopt.bg-dexopt=speed-profile
-
pm.dexopt.boot-after-ota=verify
-
pm.dexopt.first-boot=verify
প্রথমবার ডিভাইস বুট করার জন্য সংকলন ফিল্টার। এখানে ব্যবহৃত ফিল্টার শুধুমাত্র কারখানা পরে বুট সময় প্রভাবিত করে. একজন ব্যবহারকারী প্রথমবার ফোন ব্যবহার করার আগে দীর্ঘ সময় এড়াতে আমরা ফিল্টার
verify
পরামর্শ দিই। মনে রাখবেন যে যদি সিস্টেম ইমেজে সমস্ত অ্যাপ্লিকেশন ইতিমধ্যেই verify ,speed-profile
, বা ডান শ্রেণীর লোডার প্রসঙ্গ সহspeed
সাথে কম্পাইল করা হয়,verify
pm.dexopt.first-boot
কোন প্রভাব ফেলবে না।
এটি Google Play এর মাধ্যমে অ্যাপ্লিকেশন ইনস্টল করার সময় ব্যবহৃত সংকলন ফিল্টার। ডেক্স মেটাডেটা ফাইল থেকে প্রোফাইলের ব্যবহার সক্ষম করার জন্য আমরা ইনস্টল ফিল্টারটিকে গতি-প্রোফাইলে সেট করার পরামর্শ দিই। মনে রাখবেন যে যদি একটি প্রোফাইল প্রদান করা না হয় বা যদি এটি খালি হয় গতি-প্রোফাইল যাচাই করার সমতুল্য।
যখন ডিভাইসটি নিষ্ক্রিয়, চার্জিং এবং সম্পূর্ণরূপে চার্জ করা হয় তখন এটি ব্যবহার করা সংকলন ফিল্টার। প্রোফাইল-নির্দেশিত সংকলনের সুবিধা নিতে এবং স্টোরেজ সংরক্ষণ করতে speed-profile
কম্পাইলার ফিল্টারটি ব্যবহার করে দেখুন।
একটি ওভার-দ্য-এয়ার আপডেটের পরে ব্যবহৃত সংকলন ফিল্টার। খুব দীর্ঘ বুট সময় এড়াতে আমরা দৃঢ়ভাবে এই বিকল্পের জন্য verify
কম্পাইলার ফিল্টার সুপারিশ.
Dex2oat বিকল্প
মনে রাখবেন যে এই বিকল্পগুলি dex2oat
এ ডিভাইস সংকলনের সময় এবং প্রাক-অপ্টিমাইজেশনের সময় প্রভাবিত করে, যেখানে উপরে আলোচনা করা বেশিরভাগ বিকল্পগুলি শুধুমাত্র প্রাক-অপ্টিমাইজেশনকে প্রভাবিত করে।
বুট ইমেজ কম্পাইল করার সময় dex2oat
নিয়ন্ত্রণ করতে:
- dalvik.vm.image-dex2oat-Xms: প্রাথমিক হিপ সাইজ
- dalvik.vm.image-dex2oat-Xmx: সর্বোচ্চ হিপ সাইজ
- dalvik.vm.image-dex2oat-filter: কম্পাইলার ফিল্টার বিকল্প
- dalvik.vm.image-dex2oat-threads: ব্যবহার করার জন্য থ্রেডের সংখ্যা
বুট ইমেজ ছাড়াও সবকিছু কম্পাইল করার সময় dex2oat
নিয়ন্ত্রণ করতে:
- dalvik.vm.dex2oat-Xms: প্রাথমিক হিপ সাইজ
- dalvik.vm.dex2oat-Xmx: সর্বোচ্চ হিপ সাইজ
- dalvik.vm.dex2oat-filter: কম্পাইলার ফিল্টার বিকল্প
Android 6.0 এর মাধ্যমে রিলিজে, বুট ইমেজ ছাড়াও সবকিছু কম্পাইল করার জন্য একটি অতিরিক্ত বিকল্প প্রদান করা হয়:
- dalvik.vm.dex2oat-থ্রেড: ব্যবহার করার জন্য থ্রেডের সংখ্যা
অ্যান্ড্রয়েড 6.1 দিয়ে শুরু করে, বুট ইমেজ ছাড়াও সবকিছু কম্পাইল করার জন্য এটি দুটি অতিরিক্ত বিকল্প হয়ে ওঠে:
- dalvik.vm.boot-dex2oat-threads: বুট করার সময় ব্যবহার করার জন্য থ্রেডের সংখ্যা
- dalvik.vm.dex2oat-threads: বুট সময়ের পরে ব্যবহার করার জন্য থ্রেডের সংখ্যা
অ্যান্ড্রয়েড 7.1 দিয়ে শুরু করে, বুট ইমেজ ছাড়াও সবকিছু কম্পাইল করার সময় মেমরি কীভাবে ব্যবহার করা হয় তা নিয়ন্ত্রণ করার জন্য দুটি বিকল্প সরবরাহ করা হয়েছে:
- dalvik.vm.dex2oat-very-large: AOT সংকলন নিষ্ক্রিয় করতে বাইটে ন্যূনতম মোট ডেক্স ফাইলের আকার
- dalvik.vm.dex2oat-swap: dex2oat সোয়াপ ফাইল ব্যবহার করুন (লো-মেমরি ডিভাইসের জন্য)
dex2oat
জন্য প্রারম্ভিক এবং সর্বাধিক হিপ সাইজ নিয়ন্ত্রণ করে এমন বিকল্পগুলি কমানো উচিত নয় কারণ তারা কোন অ্যাপ্লিকেশনগুলিকে কম্পাইল করা যেতে পারে তা সীমিত করতে পারে।
অ্যান্ড্রয়েড 11 দিয়ে শুরু করে, কম্পাইলার থ্রেডগুলিকে একটি নির্দিষ্ট গ্রুপের CPU-তে সীমাবদ্ধ করার অনুমতি দেওয়ার জন্য তিনটি CPU অ্যাফিনিটি বিকল্প সরবরাহ করা হয়েছে:
- dalvik.vm.boot-dex2oat-cpu-set: CPU গুলি বুট করার সময় dex2oat থ্রেড চালায়
- dalvik.vm.image-dex2oat-cpu-set: বুট ইমেজ কম্পাইল করার সময় dex2oat চালিত CPU
- dalvik.vm.dex2oat-cpu-set: CPU গুলি বুট সময়ের পরে dex2oat থ্রেড চালায়
CPU গুলিকে CPU ids-এর একটি কমা-বিভক্ত তালিকা হিসাবে উল্লেখ করা উচিত। উদাহরণস্বরূপ CPUs 0-3 এ dex2oat চালানোর জন্য, সেট করুন:
dalvik.vm.dex2oat-cpu-set=0,1,2,3
সিপিইউ অ্যাফিনিটি বৈশিষ্ট্যগুলি সেট করার সময়, আমরা অপ্রয়োজনীয় মেমরি এবং আই/ও বিতর্ক এড়াতে নির্বাচিত নম্বর সিপিইউগুলির সাথে মেলে ডেক্স2ওট থ্রেডের সংখ্যার জন্য সংশ্লিষ্ট বৈশিষ্ট্যের সাথে মিল করার পরামর্শ দিই:
dalvik.vm.dex2oat-cpu-set=0,1,2,3 dalvik.vm.dex2oat-threads=4
অ্যান্ড্রয়েড 12 দিয়ে শুরু করে, নিম্নলিখিত বিকল্পগুলি যোগ করা হয়েছিল:
- dalvik.vm.ps-min-first-save-ms: অ্যাপ্লিকেশনটির একটি প্রোফাইল তৈরি করার জন্য রানটাইমের জন্য অপেক্ষা করার সময়, প্রথমবার অ্যাপ্লিকেশন চালু করার সময়
- dalvik.vm.ps-min-save-period-ms: একটি অ্যাপের প্রোফাইল আপডেট করার আগে অপেক্ষা করার ন্যূনতম সময়
- dalvik.vm.systemservercompilerfilter: কম্পাইলার ফিল্টার যা ডিভাইসটি সিস্টেম সার্ভার পুনরায় কম্পাইল করার সময় ব্যবহার করে
A/B নির্দিষ্ট কনফিগারেশন
রম কনফিগারেশন
Android 7.0 থেকে শুরু করে, ডিভাইসগুলি A/B সিস্টেম আপডেটগুলি সক্ষম করতে দুটি সিস্টেম পার্টিশন ব্যবহার করতে পারে৷ সিস্টেম পার্টিশনের আকার সংরক্ষণ করতে, অব্যবহৃত দ্বিতীয় সিস্টেম পার্টিশনে প্রি-অপটেড ফাইলগুলি ইনস্টল করা যেতে পারে। সেগুলি তারপর প্রথম বুটে ডেটা পার্টিশনে কপি করা হয়।
উদাহরণ ব্যবহার ( device-common.mk
এ):
PRODUCT_PACKAGES += \ cppreopts.sh PRODUCT_PROPERTY_OVERRIDES += \ ro.cp_system_other_odex=1
এবং ডিভাইসের BoardConfig.mk
:
BOARD_USES_SYSTEM_OTHER_ODEX := true
নোট করুন যে বুট ক্লাসপাথ কোড, সিস্টেম সার্ভার কোড এবং পণ্য-নির্দিষ্ট মূল অ্যাপ্লিকেশনগুলি সর্বদা সিস্টেম পার্টিশনে কম্পাইল করে। ডিফল্টরূপে, অন্যান্য সমস্ত অ্যাপ্লিকেশন অব্যবহৃত দ্বিতীয় সিস্টেম পার্টিশনে কম্পাইল করা হয়। এটি SYSTEM_OTHER_ODEX_FILTER
এর মাধ্যমে নিয়ন্ত্রণ করা যেতে পারে, যার একটি মান ডিফল্টরূপে রয়েছে:
SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
পটভূমি dexopt OTA
A/B সক্ষম ডিভাইসগুলির সাথে, নতুন সিস্টেম ইমেজে আপডেট করার জন্য অ্যাপ্লিকেশনগুলিকে পটভূমিতে কম্পাইল করা যেতে পারে। ঐচ্ছিকভাবে সিস্টেম ইমেজে সংকলন স্ক্রিপ্ট এবং বাইনারি অন্তর্ভুক্ত করতে পটভূমিতে অ্যাপ সংকলন দেখুন। এই সংকলনের জন্য ব্যবহৃত সংকলন ফিল্টার নিয়ন্ত্রিত হয়:
pm.dexopt.ab-ota=speed-profile
আমরা প্রোফাইল নির্দেশিত সংকলনের সুবিধা নিতে এবং স্টোরেজ সংরক্ষণ করতে speed-profile
ব্যবহার করার পরামর্শ দিই।