একটি জেআইটি সংকলক বিশেষত একটি জেআইটি-র বিহীন সংকলকের বিপরীতে কী করে? কেউ কি সংক্ষিপ্ত বিবরণ দিতে এবং বোঝার জন্য সহজ বর্ণনা দিতে পারে?
একটি জেআইটি সংকলক বিশেষত একটি জেআইটি-র বিহীন সংকলকের বিপরীতে কী করে? কেউ কি সংক্ষিপ্ত বিবরণ দিতে এবং বোঝার জন্য সহজ বর্ণনা দিতে পারে?
উত্তর:
প্রোগ্রামটি শুরুর পরে একটি জেআইটি সংকলক চলে এবং ফ্লাইয়ে কোডটি (সাধারণত বাইকোড বা কোনও ধরণের ভিএম নির্দেশাবলী) সংকলন করে (বা কেবলমাত্র সময় হিসাবে বলা হয়) সাধারণত দ্রুততর হয়, সাধারণত হোস্ট সিপিইউর নেটিভ নির্দেশনাবলী. একটি জেআইটির ডায়নামিক রানটাইম তথ্যে অ্যাক্সেস রয়েছে যেখানে একটি স্ট্যান্ডার্ড সংকলক ঘন ঘন ব্যবহৃত হয় এমন ইনলাইনিং ফাংশনগুলির মতো আরও ভাল অনুকূলকরণ করতে পারে না।
এটি একটি traditionalতিহ্যবাহী সংকলকের বিপরীতে যা প্রোগ্রামটি প্রথম চালুর আগে মেশিন ল্যাঙ্গুয়েজে সমস্ত কোড সংকলন করে ।
প্যারাফ্রেজ করতে, প্রচলিত সংকলকগণ প্রথমবার এটি চালানোর আগে একটি এক্স ফাইল হিসাবে পুরো প্রোগ্রামটি তৈরি করে। আরও নতুন স্টাইলের প্রোগ্রামগুলির জন্য একটি সিউডিয়ো সিউডোকোড (পি-কোড) দিয়ে তৈরি করা হয়। OS এ প্রোগ্রামটি কার্যকর করার পরেই (উদাহরণস্বরূপ, এর আইকনটিতে ডাবল ক্লিক করে) ইন্টেল-ভিত্তিক প্রসেসর বা যা কিছু বুঝতে পারে তা (জেআইটি) সংকলকটি মেশিন কোড (এম-কোড) তৈরি করবে এবং তৈরি করবে।
শুরুতে, একটি সংকলক উচ্চ-স্তরের ভাষা (এসেম্বলারের চেয়ে উচ্চ স্তরের হিসাবে সংজ্ঞায়িত) অবজেক্ট কোডে (মেশিনের নির্দেশাবলী) রূপান্তরিত করার জন্য দায়বদ্ধ ছিল, যা পরে সংযুক্ত (কোনও লিঙ্কারের দ্বারা) একটি নির্বাহযোগ্য হিসাবে রূপান্তরিত হবে।
ভাষার বিবর্তনের এক পর্যায়ে, সংকলকগণ উচ্চ-স্তরের ভাষাটি সিউডো কোডে সংকলন করে, যা তখন আপনার প্রোগ্রামটি চালানোর জন্য (দোভাষী দ্বারা) ব্যাখ্যা করা হবে would এটি অবজেক্ট কোড এবং এক্সিকিউটেবলকে মুছে ফেলেছে এবং একাধিক অপারেটিং সিস্টেম এবং হার্ডওয়্যার প্ল্যাটফর্মগুলিতে এই ভাষাগুলি বহনযোগ্য হতে দেয়। পাস্কাল (যা পি-কোডে সংকলিত) প্রথমগুলির মধ্যে একটি; জাভা এবং সি # আরও সাম্প্রতিক উদাহরণ। অবশেষে পি-কোড শব্দটি প্রতিস্থাপন করা হয়েছিল বাইটকোডের সাথে, কারণ বেশিরভাগ সিউডো-অপারেশন একটি বাইট দীর্ঘ।
একটি জাস্ট-ইন-টাইম (জেআইটি) সংকলক রান-টাইম ইন্টারপ্রেটারের বৈশিষ্ট্য, যে কোনও পদ্ধতিতে প্রত্যেকবার বাইটকোডকে ব্যাখ্যা করার পরিবর্তে চলমান মেশিনের মেশিন কোড নির্দেশাবলীতে বাইটকোড সংকলন করবে এবং তারপরে এটিকে অনুরোধ করবে পরিবর্তে অবজেক্ট কোড। আদর্শভাবে চলমান অবজেক্ট কোডটির দক্ষতা প্রোগ্রামটি প্রতিবার সঞ্চালনের সময় পুনরায় সংশোধন করার অদক্ষতাকে অতিক্রম করবে।
জেআইটি-ঠিক সময়ে শব্দটি যখন প্রয়োজন হয় তখন এটি প্রয়োজন হয় (চাহিদা অনুসারে)
উত্স কোডটি সম্পূর্ণরূপে মেশিন কোডে রূপান্তরিত হয়
উত্স কোডটি কাঠামোর মতো সমাবেশ ভাষায় রূপান্তরিত করা হবে [প্রাক্তন আইএল (মধ্যবর্তী ভাষা) সি #, জাভা জন্য বাইটকোড]।
মধ্যবর্তী কোডটি কেবল তখনই মেশিনের ভাষায় রূপান্তরিত হয় যখন অ্যাপ্লিকেশনটির প্রয়োজনীয় কোডগুলি কেবল মেশিন কোডে রূপান্তরিত হয়।
জেআইটি-তে সমস্ত কোড মেশিন কোডে রূপান্তরিত হয় না প্রথমে প্রয়োজনীয় কোডের একটি অংশ মেশিন কোডে রূপান্তরিত হবে তবে যদি কোনও পদ্ধতি বা কার্যকারিতা যাকে মেশিনে না রাখা হয় তবে তা মেশিন কোডে রূপান্তরিত হবে ... এটি হ্রাস করে সিপিইউতে বোঝা।
রান সময় যেমন মেশিন কোড তৈরি করা হবে .... জেআইটি সংকলক মেশিনের সিপিইউ আর্কিটেকচার চলমান জন্য অনুকূলিত মেশিন কোড উত্পাদন করবে।
অন্যরা যেমন উল্লেখ করেছে
জেআইটি মানে জাস্ট-ইন-টাইম যার অর্থ কোডটি যখন প্রয়োজন হয় তখন সংকলিত হয়, রানটাইমের আগে নয়।
কেবল উপরের আলোচনায় একটি পয়েন্ট যুক্ত করতে জেভিএম কোনও কার্য সম্পাদন করার সময় কতক্ষণ তা গণনা বজায় রাখে। যদি এই গণনাটি একটি পূর্বনির্ধারিত সীমা ছাড়িয়ে যায় তবে JIT কোডটি মেশিন ভাষায় কম্পাইল করে যা প্রসেসরের মাধ্যমে সরাসরি সম্পাদন করা যেতে পারে (যে সাধারণ ক্ষেত্রে যেমন জাভ্যাক কোডটি বাইটকোড এবং তার পরে জাভাতে সংকলন করে - তার অনুবাদক এই বাইটোকোড লাইনটিকে লাইনে রূপান্তরিত করে মেশিন কোড এবং কার্যকর করে)।
এছাড়াও পরের বার এই ফাংশনটি গণনা করা হয় একই সংকলিত কোডটি আবার সাধারণ সম্পাদনের বিপরীতে যেখানে কোডটি আবার লাইন দিয়ে ব্যাখ্যা করা হয় তার বিপরীতে কার্যকর করা হয়। এটি দ্রুত কার্যকর করে তোলে।
জেআইটি সংকলক কেবল প্রথম সম্পাদনের সময় বাইট-কোডকে সমতুল্য স্থানীয় কোডের সাথে সংকলন করে। প্রতিটি ধারাবাহিক সম্পাদনের পরে, জেভিএম কেবলমাত্র পারফরম্যান্সের অনুকূলকরণের জন্য ইতিমধ্যে সংকলিত নেটিভ কোড ব্যবহার করে।
জেআইটি সংকলক ব্যতীত, জেভিএম ইন্টারপ্রেটার বাইট-কোড লাইন-বাই-লাইন অনুবাদ করে যাতে এটি প্রদর্শিত হয় যেন কোনও স্থানীয় অ্যাপ্লিকেশন কার্যকর করা হচ্ছে।
জেআইটি মানে জাস্ট-ইন-টাইম যার অর্থ কোডটি যখন প্রয়োজন হয় তখন সংকলিত হয়, রানটাইমের আগে নয়।
এটি উপকারী কারণ সংকলকটি আপনার নির্দিষ্ট মেশিনের জন্য অনুকূলিত কোড তৈরি করতে পারে। আপনার গড় সি সংকলকের মতো একটি স্ট্যাটিক সংকলক বিকাশকারীর মেশিনে এক্সিকিউটেবল কোডের সমস্ত কোডই সংকলন করে। সুতরাং সংকলকটি কিছু অনুমানের উপর ভিত্তি করে অপটিমাইজেশন সম্পাদন করবে। এটি আরও ধীরে ধীরে সংকলন করতে পারে এবং আরও আশাবাদী করতে পারে কারণ এটি ব্যবহারকারীর জন্য প্রোগ্রামটি কার্যকর করতে ধীর করছে না।
জাভা সংকলক দ্বারা বাইট কোড (যা আর্কিটেকচার নিরপেক্ষ) তৈরি করার পরে, কার্যকরভাবে জাভিএম (জাভাতে) পরিচালনা করবে। বাইট কোডটি JVM এ লোডার দ্বারা লোড করা হবে এবং তারপরে প্রতিটি বাইট নির্দেশের ব্যাখ্যা করা হবে।
আমাদের যখন কোনও পদ্ধতিতে একাধিকবার কল করতে হবে তখন আমাদের একই কোডটি বহুবার ব্যাখ্যা করা দরকার এবং এটি প্রয়োজনের চেয়ে বেশি সময় নিতে পারে। সুতরাং আমাদের কাছে জেআইটি (কেবলমাত্র সময়ের মধ্যে) সংকলক রয়েছে। বাইটটি যখন JVM (তার চলার সময়) এ লোড করা হবে তখন পুরো কোডটি ব্যাখ্যা করার পরিবর্তে সংকলিত হবে, যাতে সময় সাশ্রয় হয়।
জেআইটি সংকলকগুলি কেবল রান সময়কালে কাজ করে, তাই আমাদের কোনও বাইনারি আউটপুট নেই।
জাস্ট ইন টাইম কম্পাইলার (জেআইটি):
এটি জাভা বাইটকোডগুলি নির্দিষ্ট নির্দিষ্ট সিপিইউর মেশিনের নির্দেশনায় সংকলন করে।
উদাহরণস্বরূপ, যদি আমাদের জাভা কোডে লুপ স্টেটমেন্ট থাকে:
while(i<10){
// ...
a=a+i;
// ...
}
উপরের লুপ কোডটি 10 বার চালিত হয় যদি i এর মান হয় 0।
একই নির্দেশটি 10 বার কার্যকর করতে চলেছে বলে বারবার 10 বারের জন্য বাইটকোড সংকলন করা প্রয়োজন নয়। সেক্ষেত্রে সেই কোডটি কেবল একবার সংকলন করা প্রয়োজন এবং প্রয়োজনীয় সংখ্যক সময়ের জন্য মানটি পরিবর্তন করা যেতে পারে। সুতরাং, জাস্ট ইন টাইম (জেআইটি) সংকলক এই জাতীয় বিবৃতি এবং পদ্ধতিগুলি (যেমন আগে বলা হয়েছে) নজর রাখে এবং আরও ভাল পারফরম্যান্সের জন্য মেশিন কোডে এই জাতীয় বাইট কোডের টুকরা সংকলন করে।
আর একটি অনুরূপ উদাহরণ, স্ট্রিং / বাক্যগুলির তালিকায় "নিয়মিত এক্সপ্রেশন" ব্যবহার করে কোনও প্যাটার্ন অনুসন্ধান করা।
জেআইটি সংকলক মেশিন কোডে সমস্ত কোড সংকলন করে না। এটি রান কোড সময়ে একটি অনুরূপ প্যাটার্ন আছে যে কোড সংকলন।
আরও পড়ার জন্য জেআইটি বুঝে এই ওরাকল ডকুমেন্টেশনটি দেখুন।
আপনার কাছে এমন কোড রয়েছে যা কিছু আইএল (অন্তর্বর্তী ভাষা) সংকলিত হয়। আপনি যখন আপনার প্রোগ্রামটি চালান, কম্পিউটার এই কোডটি বুঝতে পারে না। এটি কেবল দেশীয় কোড বোঝে। সুতরাং JIT সংকলক উড়ে যাওয়ার সময় আপনার আইএলটিকে দেশীয় কোডে সংকলন করে। এটি পদ্ধতি স্তরে এটি করে।
আমি জানি এটি একটি পুরানো থ্রেড, তবে রানটাইম অপ্টিমাইজেশন হল জেআইটি সংকলনের আরেকটি গুরুত্বপূর্ণ অংশ যা এখানে আলোচিত বলে মনে হয় না। মূলত, জেআইটি সংকলক কার্যনির্বাহীকরণের উন্নতির উপায় নির্ধারণ করার জন্য প্রোগ্রামটি পর্যবেক্ষণ করতে পারে। তারপরে, এটি ফ্লাইতে - রানটাইমের সময় এই পরিবর্তনগুলি করতে পারে make গুগল জেআইটি অপ্টিমাইজেশন (জাভাওয়াল্ড এটি সম্পর্কে একটি দুর্দান্ত নিবন্ধ আছে। )
জাস্ট ইন টাইম সংকলক (জেআইটি) এমন একটি সফটওয়্যার যা একটি এক্সিকিউটেবল ইনপুট গ্রহণ করে এবং কার্যকর করার জন্য উপযুক্ত মেশিন কোডটি দেয়। উদাহরণ স্বরূপ:
Intermediate representation JIT Native machine code for the current CPU architecture
Java bytecode ---> machine code
Javascript (run with V8) ---> machine code
এর পরিণতি হ'ল একটি নির্দিষ্ট সিপিইউ আর্কিটেকচারের জন্য উপযুক্ত জেআইটি সংকলক অবশ্যই ইনস্টল করা উচিত।
যদিও সাধারণভাবে ব্যতিক্রম হতে পারে যখন আমরা উত্স কোডটি মেশিন কোডে রূপান্তর করতে চাই আমরা ব্যবহার করতে পারি:
জিট হ'ল টাইম ইন কমপাইলার জিট হ'ল একটি প্রোগ্রাম যা জাভা বাইট কোডকে নির্দেশে রূপান্তরিত করে যা সরাসরি প্রসেসরে প্রেরণ করা যায়।
নির্দিষ্ট সিস্টেম প্ল্যাটফর্মে জাভা ঠিক সময়ে সংকলক (সত্যই দ্বিতীয় সংকলক) ব্যবহার করে নির্দিষ্ট সিস্টেম কোডে বাইটকোড মেনে চলা হয়, একবার জিট কম্পাইলার দ্বারা কোডটি পুনরায় সংকলন করা হয়ে গেলে এটি সাধারণত কম্পিউটারে আরও দ্রুত চালিত হয়।
জাস্ট-ইন-টাইম সংকলকটি ভার্চুয়াল মেশিনের সাথে আসে এবং এটি বিকল্পভাবে ব্যবহৃত হয়। এটি বাইটোকোড প্ল্যাটফর্ম-নির্দিষ্ট নির্বাহযোগ্য কোডে সংকলন করে যা তাৎক্ষণিকভাবে কার্যকর করা হয়।
জাস্ট-ইন-টাইম (জেআইটি) সংকলন, (ডায়নামিক অনুবাদ বা রান-টাইম সংকলন), কম্পিউটার কোড সম্পাদন করার একটি উপায় যা কোনও প্রোগ্রামের সম্পাদনের সময় সংকলন জড়িত - রান সময়ে - মৃত্যুদন্ড কার্যকর করার আগে নয় ।
আইটি সংকলনটি মেশিন কোডে অনুবাদ করার জন্য দুটি traditionalতিহ্যগত পদ্ধতির সংমিশ্রণ - সামনের সময়ের সংকলন (এওটি) , এবং ব্যাখ্যা - এবং উভয়ের কিছু সুবিধা এবং ত্রুটিগুলি একত্রিত করে। জেআইটি সংকলন ব্যাখ্যার নমনীয়তার সাথে সংকলিত কোডের গতি একত্রিত করে ।
আসুন জেভিএম-এ ব্যবহৃত জেআইটি বিবেচনা করি,
উদাহরণস্বরূপ, হটস্পট জেভিএম জেআইটি সংকলকগুলি গতিশীল অনুকূলকরণ তৈরি করে। অন্য কথায়, জাভা অ্যাপ্লিকেশন চলাকালীন তারা অপ্টিমাইজেশন সিদ্ধান্ত নেয় এবং অন্তর্নিহিত সিস্টেম আর্কিটেকচারের জন্য লক্ষ্যযুক্ত উচ্চ-সম্পাদনকারী নেটিভ মেশিনের নির্দেশাবলী উত্পন্ন করে ।
সংকলনের জন্য যখন কোনও পদ্ধতি বেছে নেওয়া হয়, জেভিএম তার বাইকোডটিকে জাস্ট-ইন-টাইম সংকলক (জেআইটি) এ ফিড করে। জেআইটি-র পদ্ধতিটি সঠিকভাবে সংকলন করার আগে বাইটকোডের শব্দার্থবিজ্ঞান এবং বাক্য গঠন বুঝতে হবে। জেআইটি সংকলকটি পদ্ধতিটি বিশ্লেষণে সহায়তা করতে, এর বাইটোকোডটি প্রথমে ট্রেস ট্রি নামে পরিচিত একটি অভ্যন্তরীণ উপস্থাপনায় সংস্কার করা হয়, যা বাইটোকোডের চেয়ে মেশিন কোডের সাথে আরও সান্নিধ্যপূর্ণ। বিশ্লেষণ এবং অপ্টিমাইজেশানগুলি পরে পদ্ধতির গাছগুলিতে সঞ্চালিত হয়। শেষে, গাছগুলি স্থানীয় কোডে অনুবাদ করা হয়।
ট্রেস ট্রি একটি ডেটা স্ট্রাকচার যা প্রোগ্রামিং কোডের রানটাইম সংকলনে ব্যবহৃত হয়। ট্রেস ট্রি একটি ধরণের 'ঠিক সময়ে সংকলক' ব্যবহার করা হয় যা হটস্পটগুলির সময় সঞ্চালিত কোডের সন্ধান করে এবং এটি সংকলন করে। পড়ুন এই ।
তথ্যসূত্র:
একটি নন-জেআইটি সংকলক উত্স কোড নেয় এবং সংকলনের সময় এটিকে মেশিন নির্দিষ্ট বাইট কোডে রূপান্তরিত করে। একটি জেআইটি সংকলক মেশিন অগ্নোস্টিক বাইট কোড নেয় যা সংকলন সময়ে উত্পন্ন হয়েছিল এবং রান সময়ে এটি মেশিন নির্দিষ্ট বাইট কোডে রূপান্তরিত করে। জাভা যে জেআইটি সংকলকটি ব্যবহার করে তা হ'ল একক বাইনারি কোনও সংশোধন ছাড়াই প্রচুর প্ল্যাটফর্মে চালানোর অনুমতি দেয়।
20% বাইট কোড ব্যবহৃত হয় 80% সময়। জেআইটি সংকলক এই পরিসংখ্যানগুলি পেয়ে যায় এবং ইনলাইন পদ্ধতি যুক্ত করে, অব্যবহৃত লকগুলি অপসারণ এবং এই মেশিনে নির্দিষ্ট বাইকোড তৈরি করে এই 20% বাইট কোডটি দ্রুত চালানোর জন্য অনুকূল করে। আমি এই নিবন্ধটি থেকে উদ্ধৃতি দিচ্ছি, আমি দেখতে পেয়েছি এটি সুবিধাজনক। http://java.dzone.com/articles/just-time-compiler-jit-hotspot
জেআইটি হ'ল জেভিএম বাস্তবায়নের কয়েকটিতে এক্সিকিউশন ইঞ্জিনকে বোঝায়, একটি যা দ্রুততর তবে আরও মেমরির প্রয়োজন, এটি একটি ইন-টাইম সংকলক। এই স্কিমে, কোনও পদ্ধতির বাইকোডগুলি প্রথমবারের মতো পদ্ধতিটি চালু করার সময় স্থানীয় মেশিন কোডে সংকলিত হয়। পদ্ধতির জন্য নেটিভ মেশিন কোডটি তখন ক্যাশে করা হয়, সুতরাং পরের বার একই পদ্ধতিটি চালিত হওয়ার পরে এটি পুনরায় ব্যবহার করা যেতে পারে।
পারফরম্যান্স কারণে জেভিএম আসলে রানটাইমের সময় সংকলন পদক্ষেপগুলি সম্পাদন করে। এর অর্থ জাভাতে একটি পরিষ্কার সংকলন-সম্পাদন পৃথককরণ নেই। এটি প্রথমে জাভা উত্স কোড থেকে বাইকোডে তথাকথিত স্ট্যাটিক সংকলন করে। তারপরে এই বাইটোকডটি কার্যকর করার জন্য জেভিএম-এ দেওয়া হয়। তবে বাইটকোড কার্যকর করা ধীর তাই জেভিএম পরিমাপ করে যে কতবার বাইকোড চালানো হয় এবং যখন এটি খুব ঘন ঘন চালিত কোডের একটি "হটস্পট" সনাক্ত করে এটি "হটস্পট" কোডের (হটস্পট প্রোফাইলার) মাইচেনকোড থেকে গতিশীল সংকলন সম্পাদন করে। সুতরাং কার্যকরভাবে আজ জাভা প্রোগ্রামগুলি মেশিনে কোড প্রয়োগ দ্বারা চালিত হয়।