জাস্ট-ইন-টাইম (জেআইটি) সংকলক কী করে?


528

একটি জেআইটি সংকলক বিশেষত একটি জেআইটি-র বিহীন সংকলকের বিপরীতে কী করে? কেউ কি সংক্ষিপ্ত বিবরণ দিতে এবং বোঝার জন্য সহজ বর্ণনা দিতে পারে?




2
আমি youtube.com/watch?v=yQ27DjKnxwo দরকারী হতে পেলাম ।
অ্যাডাম জেরনার

উত্তর:


518

প্রোগ্রামটি শুরুর পরে একটি জেআইটি সংকলক চলে এবং ফ্লাইয়ে কোডটি (সাধারণত বাইকোড বা কোনও ধরণের ভিএম নির্দেশাবলী) সংকলন করে (বা কেবলমাত্র সময় হিসাবে বলা হয়) সাধারণত দ্রুততর হয়, সাধারণত হোস্ট সিপিইউর নেটিভ নির্দেশনাবলী. একটি জেআইটির ডায়নামিক রানটাইম তথ্যে অ্যাক্সেস রয়েছে যেখানে একটি স্ট্যান্ডার্ড সংকলক ঘন ঘন ব্যবহৃত হয় এমন ইনলাইনিং ফাংশনগুলির মতো আরও ভাল অনুকূলকরণ করতে পারে না।

এটি একটি traditionalতিহ্যবাহী সংকলকের বিপরীতে যা প্রোগ্রামটি প্রথম চালুর আগে মেশিন ল্যাঙ্গুয়েজে সমস্ত কোড সংকলন করে ।

প্যারাফ্রেজ করতে, প্রচলিত সংকলকগণ প্রথমবার এটি চালানোর আগে একটি এক্স ফাইল হিসাবে পুরো প্রোগ্রামটি তৈরি করে। আরও নতুন স্টাইলের প্রোগ্রামগুলির জন্য একটি সিউডিয়ো সিউডোকোড (পি-কোড) দিয়ে তৈরি করা হয়। OS এ প্রোগ্রামটি কার্যকর করার পরেই (উদাহরণস্বরূপ, এর আইকনটিতে ডাবল ক্লিক করে) ইন্টেল-ভিত্তিক প্রসেসর বা যা কিছু বুঝতে পারে তা (জেআইটি) সংকলকটি মেশিন কোড (এম-কোড) তৈরি করবে এবং তৈরি করবে।


16
এবং ব্যাখ্যাযুক্ত কোডের বিপরীতে, যেটি দেরি না করে অবিলম্বে বাইটকোড বা ভিএম নির্দেশাবলী চালানো শুরু করে, তবে মেশিনের ভাষার তুলনায় ধীরে ধীরে নির্দেশাবলী চালাবে।
হারুন

3
একটি জেআইটি প্রায়শই ব্যাখ্যামূলক কোডটিকে মেশিন ল্যাঙ্গুয়েজে রূপান্তর করতে ব্যবহৃত হয় তবে হ্যাঁ, খাঁটি ব্যাখ্যা করা কোড (কোনও জেআইটিটিং ছাড়াই) ধীর গতিতে হয়। এমনকি জাআইটিটার ছাড়াই জাভা বাইটকোডটি আসলেই ধীর।
মার্ক সিডেপ

48
যদিও লক্ষ্যটি মেশিন কোড হতে হবে না। জেআরবির একটি জেআইটি সংকলক রয়েছে যা রুবি সোর্সকোডটি জাভা বাইটকোডে কয়েক বার অনুরোধের পরে সংকলন করবে। তারপরে, আরও কয়েকবার অনুরোধের পরে, জেভিএম জেআইটি সংকলক কিক্স করে বাইটোকডকে স্থানীয় কোডে সংকলন করে।
জার্গ ডব্লু মিট্টাগ

4
এটি লক্ষণীয় যে জার্গ দ্বারা নির্দেশিত হিসাবে, জেআইটি সরাসরি অবিলম্বে প্রার্থনা করা হয় না। প্রায়শই কোডটি ব্যাখ্যা করা হবে যতক্ষণ না এটি নির্ধারণ করা হয় যে এটি জেটিটিংয়ের উপযুক্ত হবে। যেহেতু JITting বিলম্ব পরিচয় করিয়ে দিতে পারেন, এটা দ্রুত হতে পারে না জে আই টি JIT কিছু কোড যদি এটা খুব কমই ব্যবহার করা হয় এবং এইভাবে একটি দ্রুত প্রতিক্রিয়া সামগ্রিক রানটাইম চেয়ে আরো গুরুত্বপূর্ণ।
অ্যাডাম জ্যাসকিউইচজ

3
@ এরিক রেপ্পেন: যদি কোনও নতুন মেশিন বেরিয়ে আসে তবে প্রচলিত সংকলক ব্যবহার করে সেই নতুন মেশিনের জন্য একটি প্রোগ্রাম সংকলন ও অনুকূলিতকরণের ফলস্বরূপ কোনও জেআইটির চেয়ে দ্রুত ফল পাওয়া যাবে। অন্যদিকে, নতুন এই মেশিনটির জন্য অনুকূলিত একটি জেআইটি নতুন মেশিন আবিষ্কারের আগে প্রকাশিত কোডের কার্য সম্পাদনকে অনুকূল করতে সক্ষম হবে ।
সুপারক্যাট

255

শুরুতে, একটি সংকলক উচ্চ-স্তরের ভাষা (এসেম্বলারের চেয়ে উচ্চ স্তরের হিসাবে সংজ্ঞায়িত) অবজেক্ট কোডে (মেশিনের নির্দেশাবলী) রূপান্তরিত করার জন্য দায়বদ্ধ ছিল, যা পরে সংযুক্ত (কোনও লিঙ্কারের দ্বারা) একটি নির্বাহযোগ্য হিসাবে রূপান্তরিত হবে।

ভাষার বিবর্তনের এক পর্যায়ে, সংকলকগণ উচ্চ-স্তরের ভাষাটি সিউডো কোডে সংকলন করে, যা তখন আপনার প্রোগ্রামটি চালানোর জন্য (দোভাষী দ্বারা) ব্যাখ্যা করা হবে would এটি অবজেক্ট কোড এবং এক্সিকিউটেবলকে মুছে ফেলেছে এবং একাধিক অপারেটিং সিস্টেম এবং হার্ডওয়্যার প্ল্যাটফর্মগুলিতে এই ভাষাগুলি বহনযোগ্য হতে দেয়। পাস্কাল (যা পি-কোডে সংকলিত) প্রথমগুলির মধ্যে একটি; জাভা এবং সি # আরও সাম্প্রতিক উদাহরণ। অবশেষে পি-কোড শব্দটি প্রতিস্থাপন করা হয়েছিল বাইটকোডের সাথে, কারণ বেশিরভাগ সিউডো-অপারেশন একটি বাইট দীর্ঘ।

একটি জাস্ট-ইন-টাইম (জেআইটি) সংকলক রান-টাইম ইন্টারপ্রেটারের বৈশিষ্ট্য, যে কোনও পদ্ধতিতে প্রত্যেকবার বাইটকোডকে ব্যাখ্যা করার পরিবর্তে চলমান মেশিনের মেশিন কোড নির্দেশাবলীতে বাইটকোড সংকলন করবে এবং তারপরে এটিকে অনুরোধ করবে পরিবর্তে অবজেক্ট কোড। আদর্শভাবে চলমান অবজেক্ট কোডটির দক্ষতা প্রোগ্রামটি প্রতিবার সঞ্চালনের সময় পুনরায় সংশোধন করার অদক্ষতাকে অতিক্রম করবে।


5
তবে এই শব্দগুচ্ছটি "জাস্ট-ইন-টাইম (জেআইটি) সংকলক রান-টাইম ইন্টারপ্রেটারের একটি বৈশিষ্ট্য" বিভ্রান্তির কারণ; উদাহরণস্বরূপ - স্ট্যাকওভারফ্লো.com
স্টিফেন সি

11
প্রকৃতপক্ষে, জেআইটি একটি অ্যাড-অন ছিল এবং আপনি এখনও এটি জাভাতে -Xint প্যারামিটার ব্যবহার করে অক্ষম করতে পারেন, সুতরাং এটি কেবল একটি বৈশিষ্ট্য।
ক্রেগ ট্রেডার

3
আমি পুরোপুরি একমত হই না জেআইটি বিবর্তন নয় - এটি ক্লাসিক সংকলকগুলির বিকল্প।
i486

1
হার্ড ওয়্যারিং মেকানিকাল সুইচগুলি থেকে আপনার স্মার্ট ফোনে "ওকে গুগল" বলে অনুসন্ধানের মানদণ্ড নির্দিষ্টকরণ পর্যন্ত বিবর্তনীয় পথে এক ধাপ জেআইটি। জাভা 7/8 এর অংশ হিসাবে বর্তমান জেআইটি উপলব্ধ জাভা 2 এর অংশ হিসাবে যা পাওয়া যায় তার বাইরে লাফিয়ে সীমাবদ্ধ - এটিও বিবর্তন।
ক্রেগ ট্রেডার

1
@ আই 66 Sun - সান / ওরাকল জাভাটির জন্য কোনও ক্লাসিকাল ("সময়ের আগে") সংকলক পাঠিয়েছেন যা নেটিভ কোড উত্পন্ন করে। এটি যুক্তিযুক্ত একটি বিষয় যে জেআইটি একটি বিকল্প ... তারা যখন মনে করেন যে এটি বিকল্প হিসাবে এর আগে কখনও প্রেরণ করা হয়নি। (আমি জিসিজে এওটি সংকলককে ছাড় দিচ্ছি কারণ এটি সান / ওরাকল এর সাথে করার মতো কিছুই ছিল না এবং এটি একটি সম্পূর্ণ সমাধানও ছিল না। এটি এখন অবশ্যই অ-কার্যকর হবে))
স্টিফেন সি

69

জেআইটি-ঠিক সময়ে শব্দটি যখন প্রয়োজন হয় তখন এটি প্রয়োজন হয় (চাহিদা অনুসারে)

সাধারণ দৃশ্য:

উত্স কোডটি সম্পূর্ণরূপে মেশিন কোডে রূপান্তরিত হয়

জেআইটি দৃশ্য:

উত্স কোডটি কাঠামোর মতো সমাবেশ ভাষায় রূপান্তরিত করা হবে [প্রাক্তন আইএল (মধ্যবর্তী ভাষা) সি #, জাভা জন্য বাইটকোড]।

মধ্যবর্তী কোডটি কেবল তখনই মেশিনের ভাষায় রূপান্তরিত হয় যখন অ্যাপ্লিকেশনটির প্রয়োজনীয় কোডগুলি কেবল মেশিন কোডে রূপান্তরিত হয়।

জেআইটি বনাম নন-জেআইটি তুলনা:

  • জেআইটি-তে সমস্ত কোড মেশিন কোডে রূপান্তরিত হয় না প্রথমে প্রয়োজনীয় কোডের একটি অংশ মেশিন কোডে রূপান্তরিত হবে তবে যদি কোনও পদ্ধতি বা কার্যকারিতা যাকে মেশিনে না রাখা হয় তবে তা মেশিন কোডে রূপান্তরিত হবে ... এটি হ্রাস করে সিপিইউতে বোঝা।

  • রান সময় যেমন মেশিন কোড তৈরি করা হবে .... জেআইটি সংকলক মেশিনের সিপিইউ আর্কিটেকচার চলমান জন্য অনুকূলিত মেশিন কোড উত্পাদন করবে।

জেআইটির উদাহরণ:

  1. জাভাতে জেআইটি জেভিএমে রয়েছে (জাভা ভার্চুয়াল মেশিন)
  2. সি # তে এটি সিএলআর (প্রচলিত ভাষা রানটাইম)
  3. অ্যান্ড্রয়েডে এটি ডিভিএম (ডালভিক ভার্চুয়াল মেশিন), বা নতুন সংস্করণে এআরটি (অ্যান্ড্রয়েড রানটাইম) এ রয়েছে।

7
জেআইটি বাস্তব জেনেরিক ধরণের সমর্থনের সাথে ফ্রেমওয়ার্কগুলিতে কিছু বিশেষ সুবিধা দেয়; জেনেরিক পদ্ধতিটি সংজ্ঞায়িত করা সম্ভব যা একটি সীমাহীন প্রকারের উত্পাদন করতে সক্ষম হবে, যার প্রতিটিটির জন্য আলাদা আলাদা মেশিন কোডের প্রয়োজন হবে, তবে কেবল জেআইটি প্রকৃতপক্ষে উত্পাদিত প্রকারের কোড জেনারেট করে। বিপরীতে, সি ++ এ এটি প্রয়োজনীয় যে সংকলকটি কোনও প্রোগ্রামের জন্য সমস্ত ধরণের কোড জেনারেট করে।
সুপারক্যাট

6
জেভিএম এটি চালানোর সময় প্রথমবারের মতো জাইটি কোড দেয় না। প্রথম কয়েক বার, এটি বাইটকোডকে ব্যাখ্যা করে। তারপরে, যদি সেই কোডটি প্রায়শই যথেষ্টভাবে চালিত হয় তবে এটি এটি জেটিটিংয়ের বিরক্ত করার সিদ্ধান্ত নিতে পারে।
নিনজালজ

1
আপনি বলছেন জাভাতে জেআইটি হ'ল জেভিএম। তবে আমরা ইতিমধ্যে জেভিএমকে সংকলিত কোড সরবরাহ করেছি, তাই না? তারপরে এটি আবার কম্পাইল করে আপনি বোঝাচ্ছেন?
Koray Tugay

@ কোরেটুগে - আমরা বাইকোডগুলি জেভিএমকে সরবরাহ করি এবং জেভিএম এর অংশটিকে মেশিন কোডে ডিমান্ডে রূপান্তর করবে so সুতরাং সম্পদগুলি সংরক্ষণ করা হবে।
দুরাই আমুথান.এইচ

1
জাভাতে জেআইটি জেভিএম নয়। এটি এর একটি অংশ মাত্র।
13:57

25

অন্যরা যেমন উল্লেখ করেছে

জেআইটি মানে জাস্ট-ইন-টাইম যার অর্থ কোডটি যখন প্রয়োজন হয় তখন সংকলিত হয়, রানটাইমের আগে নয়।

কেবল উপরের আলোচনায় একটি পয়েন্ট যুক্ত করতে জেভিএম কোনও কার্য সম্পাদন করার সময় কতক্ষণ তা গণনা বজায় রাখে। যদি এই গণনাটি একটি পূর্বনির্ধারিত সীমা ছাড়িয়ে যায় তবে JIT কোডটি মেশিন ভাষায় কম্পাইল করে যা প্রসেসরের মাধ্যমে সরাসরি সম্পাদন করা যেতে পারে (যে সাধারণ ক্ষেত্রে যেমন জাভ্যাক কোডটি বাইটকোড এবং তার পরে জাভাতে সংকলন করে - তার অনুবাদক এই বাইটোকোড লাইনটিকে লাইনে রূপান্তরিত করে মেশিন কোড এবং কার্যকর করে)।

এছাড়াও পরের বার এই ফাংশনটি গণনা করা হয় একই সংকলিত কোডটি আবার সাধারণ সম্পাদনের বিপরীতে যেখানে কোডটি আবার লাইন দিয়ে ব্যাখ্যা করা হয় তার বিপরীতে কার্যকর করা হয়। এটি দ্রুত কার্যকর করে তোলে।


14

জেআইটি সংকলক কেবল প্রথম সম্পাদনের সময় বাইট-কোডকে সমতুল্য স্থানীয় কোডের সাথে সংকলন করে। প্রতিটি ধারাবাহিক সম্পাদনের পরে, জেভিএম কেবলমাত্র পারফরম্যান্সের অনুকূলকরণের জন্য ইতিমধ্যে সংকলিত নেটিভ কোড ব্যবহার করে।

এখানে চিত্র বর্ণনা লিখুন

জেআইটি সংকলক ব্যতীত, জেভিএম ইন্টারপ্রেটার বাইট-কোড লাইন-বাই-লাইন অনুবাদ করে যাতে এটি প্রদর্শিত হয় যেন কোনও স্থানীয় অ্যাপ্লিকেশন কার্যকর করা হচ্ছে।

এখানে চিত্র বর্ণনা লিখুন

সূত্র


1
আমার জেআইটির ব্যাখ্যাটি হ'ল এটি স্মৃতিচারণের মতো কাজ করে, যেখানে প্রায়শই ব্যবহৃত ফাংশনগুলি 'সঞ্চিত' থাকে এবং জাভা বাইটকোড থেকে নেটিভ আইএসএ নির্ভর নির্ভর কোড পর্যন্ত সংকলনের ব্যয়কে ছাড়িয়ে যায়। যদি এটি সঠিক হয় তবে জাভা শুরু থেকেই নেটিভ কোডটিতে সম্পূর্ণ সংকলন করে না কেন? এটি কোনও ধরণের রান-টাইম সংকলন হ্রাস করতে পারে এবং মেশিনে জাভা 'দেশীয়' করবে?
মাইকেল চোই

12

জেআইটি মানে জাস্ট-ইন-টাইম যার অর্থ কোডটি যখন প্রয়োজন হয় তখন সংকলিত হয়, রানটাইমের আগে নয়।

এটি উপকারী কারণ সংকলকটি আপনার নির্দিষ্ট মেশিনের জন্য অনুকূলিত কোড তৈরি করতে পারে। আপনার গড় সি সংকলকের মতো একটি স্ট্যাটিক সংকলক বিকাশকারীর মেশিনে এক্সিকিউটেবল কোডের সমস্ত কোডই সংকলন করে। সুতরাং সংকলকটি কিছু অনুমানের উপর ভিত্তি করে অপটিমাইজেশন সম্পাদন করবে। এটি আরও ধীরে ধীরে সংকলন করতে পারে এবং আরও আশাবাদী করতে পারে কারণ এটি ব্যবহারকারীর জন্য প্রোগ্রামটি কার্যকর করতে ধীর করছে না।


ব্যবহারকারীর কম্পিউটারে কোথাও সংকলিত কোডগুলি কেন সংরক্ষণ করা হয় না তাই পরবর্তী সময় অ্যাপ্লিকেশনটি জেআইটি চালানো হলে সেগুলি আবার পুনরায় সংকলন করতে হবে না?
omefarukdogan

ভাল পর্যবেক্ষণ। এটি করা সম্ভব, তবে অ্যাপটি প্ল্যাটফর্ম এবং ব্যবহারের উপর নির্ভর করে এটি আসলে উপকারী কিনা। জেআইটি অপ্টিমাইজেশন অফলাইনের সমতুল্য নয় বা সময়ের অপ্টিমাইজেশনের আগে তাই সুবিধাটি কেবল 'জেটিটিং নয়' হতে পারে যা খুব বেশি সাহায্য করতে পারে বা নাও পারে।
ব্রায়ান লাইটল

9

জাভা সংকলক দ্বারা বাইট কোড (যা আর্কিটেকচার নিরপেক্ষ) তৈরি করার পরে, কার্যকরভাবে জাভিএম (জাভাতে) পরিচালনা করবে। বাইট কোডটি JVM এ লোডার দ্বারা লোড করা হবে এবং তারপরে প্রতিটি বাইট নির্দেশের ব্যাখ্যা করা হবে।

আমাদের যখন কোনও পদ্ধতিতে একাধিকবার কল করতে হবে তখন আমাদের একই কোডটি বহুবার ব্যাখ্যা করা দরকার এবং এটি প্রয়োজনের চেয়ে বেশি সময় নিতে পারে। সুতরাং আমাদের কাছে জেআইটি (কেবলমাত্র সময়ের মধ্যে) সংকলক রয়েছে। বাইটটি যখন JVM (তার চলার সময়) এ লোড করা হবে তখন পুরো কোডটি ব্যাখ্যা করার পরিবর্তে সংকলিত হবে, যাতে সময় সাশ্রয় হয়।

জেআইটি সংকলকগুলি কেবল রান সময়কালে কাজ করে, তাই আমাদের কোনও বাইনারি আউটপুট নেই।


2
সংকলনটি সম্পর্কে কীভাবে যেতে হবে সে সম্পর্কে খুব কম তথ্য (পড়ুন: গাইড) থাকায় জেভিএম-এ লোড করার সময় পুরো কোডটি সংকলিত হয় না। মনে রাখবেন যে পারফরম্যান্সই চূড়ান্ত লক্ষ্য। জেআইটি বরং নির্বাচনী: মনিটরিং এবং অপ্টিমাইজেশনের জন্য সর্বাধিক জনপ্রিয় পদ্ধতি নির্বাচন করা। এবং পৃথক পদ্ধতির জন্য অপ্টিমাইজেশনের সর্বাধিক স্তরের না হওয়া পর্যন্ত এটি করা চালিয়ে যায়।
ইয়া বোয়কাই

7

জাস্ট ইন টাইম কম্পাইলার (জেআইটি):
এটি জাভা বাইটকোডগুলি নির্দিষ্ট নির্দিষ্ট সিপিইউর মেশিনের নির্দেশনায় সংকলন করে।

উদাহরণস্বরূপ, যদি আমাদের জাভা কোডে লুপ স্টেটমেন্ট থাকে:

while(i<10){
    // ...
    a=a+i;
    // ...
 }

উপরের লুপ কোডটি 10 ​​বার চালিত হয় যদি i এর মান হয় 0।

একই নির্দেশটি 10 ​​বার কার্যকর করতে চলেছে বলে বারবার 10 বারের জন্য বাইটকোড সংকলন করা প্রয়োজন নয়। সেক্ষেত্রে সেই কোডটি কেবল একবার সংকলন করা প্রয়োজন এবং প্রয়োজনীয় সংখ্যক সময়ের জন্য মানটি পরিবর্তন করা যেতে পারে। সুতরাং, জাস্ট ইন টাইম (জেআইটি) সংকলক এই জাতীয় বিবৃতি এবং পদ্ধতিগুলি (যেমন আগে বলা হয়েছে) নজর রাখে এবং আরও ভাল পারফরম্যান্সের জন্য মেশিন কোডে এই জাতীয় বাইট কোডের টুকরা সংকলন করে।

আর একটি অনুরূপ উদাহরণ, স্ট্রিং / বাক্যগুলির তালিকায় "নিয়মিত এক্সপ্রেশন" ব্যবহার করে কোনও প্যাটার্ন অনুসন্ধান করা।

জেআইটি সংকলক মেশিন কোডে সমস্ত কোড সংকলন করে না। এটি রান কোড সময়ে একটি অনুরূপ প্যাটার্ন আছে যে কোড সংকলন।

আরও পড়ার জন্য জেআইটি বুঝে এই ওরাকল ডকুমেন্টেশনটি দেখুন।


"একই নির্দেশনাটি 10 ​​বার কার্যকর করতে চলেছে বলে বারবার 10 বার বার বাইকোড সংকলন করা প্রয়োজন নয়" - নিয়মিত সংকলক সম্পর্কে কী বলা যায়? এটি এই টুকরাটি কয়েকবার সংকলন করে?
TT_

4

আপনার কাছে এমন কোড রয়েছে যা কিছু আইএল (অন্তর্বর্তী ভাষা) সংকলিত হয়। আপনি যখন আপনার প্রোগ্রামটি চালান, কম্পিউটার এই কোডটি বুঝতে পারে না। এটি কেবল দেশীয় কোড বোঝে। সুতরাং JIT সংকলক উড়ে যাওয়ার সময় আপনার আইএলটিকে দেশীয় কোডে সংকলন করে। এটি পদ্ধতি স্তরে এটি করে।


2
"পদ্ধতি স্তর" বলতে কী বোঝ?
Koray Tugay

4

আমি জানি এটি একটি পুরানো থ্রেড, তবে রানটাইম অপ্টিমাইজেশন হল জেআইটি সংকলনের আরেকটি গুরুত্বপূর্ণ অংশ যা এখানে আলোচিত বলে মনে হয় না। মূলত, জেআইটি সংকলক কার্যনির্বাহীকরণের উন্নতির উপায় নির্ধারণ করার জন্য প্রোগ্রামটি পর্যবেক্ষণ করতে পারে। তারপরে, এটি ফ্লাইতে - রানটাইমের সময় এই পরিবর্তনগুলি করতে পারে make গুগল জেআইটি অপ্টিমাইজেশন (জাভাওয়াল্ড এটি সম্পর্কে একটি দুর্দান্ত নিবন্ধ আছে। )


3

জাস্ট ইন টাইম সংকলক (জেআইটি) এমন একটি সফটওয়্যার যা একটি এক্সিকিউটেবল ইনপুট গ্রহণ করে এবং কার্যকর করার জন্য উপযুক্ত মেশিন কোডটি দেয়। উদাহরণ স্বরূপ:

Intermediate representation    JIT    Native machine code for the current CPU architecture

     Java bytecode            --->        machine code
     Javascript (run with V8) --->        machine code

এর পরিণতি হ'ল একটি নির্দিষ্ট সিপিইউ আর্কিটেকচারের জন্য উপযুক্ত জেআইটি সংকলক অবশ্যই ইনস্টল করা উচিত।

পার্থক্য সংকলক, দোভাষী এবং জেআইটি

যদিও সাধারণভাবে ব্যতিক্রম হতে পারে যখন আমরা উত্স কোডটি মেশিন কোডে রূপান্তর করতে চাই আমরা ব্যবহার করতে পারি:

  1. সংকলক : উত্স কোড নেয় এবং একটি সম্পাদনযোগ্যকে ফেরত দেয়
  2. দোভাষী : নির্দেশের মাধ্যমে প্রোগ্রাম নির্দেশটি কার্যকর করে। এটি উত্স কোডের একটি এক্সিকিউটেবল সেগমেন্ট নেয় এবং সেগমেন্টটি মেশিনের নির্দেশিকায় রূপান্তরিত করে। সমস্ত উত্স কোডটি মেশিনের নির্দেশিকায় রূপান্তরিত এবং সম্পাদন না করা পর্যন্ত এই প্রক্রিয়াটি পুনরাবৃত্তি হয়।
  3. জেআইটি : একটি জেআইটির অনেকগুলি বিভিন্ন বাস্তবায়ন সম্ভব, তবে একটি জেআইটি সাধারণত একটি কমপ্লায়ার এবং দোভাষীর সংমিশ্রণ হয়। জেআইটি প্রথমে মধ্যস্থতাকারী ডেটা ঘুরিয়ে দেয় (যেমন জাভা বাইটকোড) যা এটি ব্যাখ্যার মাধ্যমে যন্ত্রের ভাষায় প্রাপ্ত হয়। একটি জেআইটি প্রায়শই বুঝতে পারে যখন কোডের একটি নির্দিষ্ট অংশটি প্রায়শই সম্পাদিত হয় এবং দ্রুত অংশীকরণের জন্য এই অংশটি সংকলন করে।

2

জিট হ'ল টাইম ইন কমপাইলার জিট হ'ল একটি প্রোগ্রাম যা জাভা বাইট কোডকে নির্দেশে রূপান্তরিত করে যা সরাসরি প্রসেসরে প্রেরণ করা যায়।

নির্দিষ্ট সিস্টেম প্ল্যাটফর্মে জাভা ঠিক সময়ে সংকলক (সত্যই দ্বিতীয় সংকলক) ব্যবহার করে নির্দিষ্ট সিস্টেম কোডে বাইটকোড মেনে চলা হয়, একবার জিট কম্পাইলার দ্বারা কোডটি পুনরায় সংকলন করা হয়ে গেলে এটি সাধারণত কম্পিউটারে আরও দ্রুত চালিত হয়।

জাস্ট-ইন-টাইম সংকলকটি ভার্চুয়াল মেশিনের সাথে আসে এবং এটি বিকল্পভাবে ব্যবহৃত হয়। এটি বাইটোকোড প্ল্যাটফর্ম-নির্দিষ্ট নির্বাহযোগ্য কোডে সংকলন করে যা তাৎক্ষণিকভাবে কার্যকর করা হয়।


2

জাস্ট-ইন-টাইম (জেআইটি) সংকলন, (ডায়নামিক অনুবাদ বা রান-টাইম সংকলন), কম্পিউটার কোড সম্পাদন করার একটি উপায় যা কোনও প্রোগ্রামের সম্পাদনের সময় সংকলন জড়িত - রান সময়ে - মৃত্যুদন্ড কার্যকর করার আগে নয়

আইটি সংকলনটি মেশিন কোডে অনুবাদ করার জন্য দুটি traditionalতিহ্যগত পদ্ধতির সংমিশ্রণ - সামনের সময়ের সংকলন (এওটি) , এবং ব্যাখ্যা - এবং উভয়ের কিছু সুবিধা এবং ত্রুটিগুলি একত্রিত করে। জেআইটি সংকলন ব্যাখ্যার নমনীয়তার সাথে সংকলিত কোডের গতি একত্রিত করে

আসুন জেভিএম-এ ব্যবহৃত জেআইটি বিবেচনা করি,

উদাহরণস্বরূপ, হটস্পট জেভিএম জেআইটি সংকলকগুলি গতিশীল অনুকূলকরণ তৈরি করে। অন্য কথায়, জাভা অ্যাপ্লিকেশন চলাকালীন তারা অপ্টিমাইজেশন সিদ্ধান্ত নেয় এবং অন্তর্নিহিত সিস্টেম আর্কিটেকচারের জন্য লক্ষ্যযুক্ত উচ্চ-সম্পাদনকারী নেটিভ মেশিনের নির্দেশাবলী উত্পন্ন করে

সংকলনের জন্য যখন কোনও পদ্ধতি বেছে নেওয়া হয়, জেভিএম তার বাইকোডটিকে জাস্ট-ইন-টাইম সংকলক (জেআইটি) এ ফিড করে। জেআইটি-র পদ্ধতিটি সঠিকভাবে সংকলন করার আগে বাইটকোডের শব্দার্থবিজ্ঞান এবং বাক্য গঠন বুঝতে হবে। জেআইটি সংকলকটি পদ্ধতিটি বিশ্লেষণে সহায়তা করতে, এর বাইটোকোডটি প্রথমে ট্রেস ট্রি নামে পরিচিত একটি অভ্যন্তরীণ উপস্থাপনায় সংস্কার করা হয়, যা বাইটোকোডের চেয়ে মেশিন কোডের সাথে আরও সান্নিধ্যপূর্ণ। বিশ্লেষণ এবং অপ্টিমাইজেশানগুলি পরে পদ্ধতির গাছগুলিতে সঞ্চালিত হয়। শেষে, গাছগুলি স্থানীয় কোডে অনুবাদ করা হয়।

ট্রেস ট্রি একটি ডেটা স্ট্রাকচার যা প্রোগ্রামিং কোডের রানটাইম সংকলনে ব্যবহৃত হয়। ট্রেস ট্রি একটি ধরণের 'ঠিক সময়ে সংকলক' ব্যবহার করা হয় যা হটস্পটগুলির সময় সঞ্চালিত কোডের সন্ধান করে এবং এটি সংকলন করে। পড়ুন এই

তথ্যসূত্র:


1

একটি নন-জেআইটি সংকলক উত্স কোড নেয় এবং সংকলনের সময় এটিকে মেশিন নির্দিষ্ট বাইট কোডে রূপান্তরিত করে। একটি জেআইটি সংকলক মেশিন অগ্নোস্টিক বাইট কোড নেয় যা সংকলন সময়ে উত্পন্ন হয়েছিল এবং রান সময়ে এটি মেশিন নির্দিষ্ট বাইট কোডে রূপান্তরিত করে। জাভা যে জেআইটি সংকলকটি ব্যবহার করে তা হ'ল একক বাইনারি কোনও সংশোধন ছাড়াই প্রচুর প্ল্যাটফর্মে চালানোর অনুমতি দেয়।


0

20% বাইট কোড ব্যবহৃত হয় 80% সময়। জেআইটি সংকলক এই পরিসংখ্যানগুলি পেয়ে যায় এবং ইনলাইন পদ্ধতি যুক্ত করে, অব্যবহৃত লকগুলি অপসারণ এবং এই মেশিনে নির্দিষ্ট বাইকোড তৈরি করে এই 20% বাইট কোডটি দ্রুত চালানোর জন্য অনুকূল করে। আমি এই নিবন্ধটি থেকে উদ্ধৃতি দিচ্ছি, আমি দেখতে পেয়েছি এটি সুবিধাজনক। http://java.dzone.com/articles/just-time-compiler-jit-hotspot


কেন এটি চিহ্নিত করা হয়েছে তা নিশ্চিত নয় -১। আমি মনে করি যে এখানে বিন্দুটি হ'ল রানটাইম পরিসংখ্যানটি অনুকূলিত করতে সহায়তা করতে ব্যবহৃত হয়।
ইজ

হ্যাঁ, তবে উত্তরটি এর মতো বলে না। আক্ষরিক অর্থে, জেআইটি হটেস্ট 20% কোডটি অনুকূলিত করে না।
মাব্রাহাম

0

জেআইটি হ'ল জেভিএম বাস্তবায়নের কয়েকটিতে এক্সিকিউশন ইঞ্জিনকে বোঝায়, একটি যা দ্রুততর তবে আরও মেমরির প্রয়োজন, এটি একটি ইন-টাইম সংকলক। এই স্কিমে, কোনও পদ্ধতির বাইকোডগুলি প্রথমবারের মতো পদ্ধতিটি চালু করার সময় স্থানীয় মেশিন কোডে সংকলিত হয়। পদ্ধতির জন্য নেটিভ মেশিন কোডটি তখন ক্যাশে করা হয়, সুতরাং পরের বার একই পদ্ধতিটি চালিত হওয়ার পরে এটি পুনরায় ব্যবহার করা যেতে পারে।


2
আপনি যদি নতুন / আরও ভাল কিছু সরবরাহ না করেন তবে আমি এই জাতীয় প্রশ্নের উত্তর এড়াতে চাই। আপনি যদি কোনও প্রতিক্রিয়া পেয়ে থাকেন তবে এটি সম্ভবত একটি ডাউনভোট বা সমালোচনা: আপনার উত্তরটি অনর্থক। "জেআইটি" কোনও জাভা ভার্চুয়াল মেশিনের মধ্যে সীমাবদ্ধ নয় , "দ্রুত তবে আরও মেমরি ব্যবহার করে" সম্ভবত প্রভাব ফেলবে তবে জেআইটি ধারণার অন্তর্নিহিত নয়, এবং পদ্ধতিগুলি প্রায়শই প্রথম অনুরোধে সংকলিত হয় না, বেশ কয়েকটি পরে যখন এটি স্পষ্ট হয়ে যায় যে জেআইটি'র জন্য ব্যয় করা সামগ্রিকভাবে উপকারী।
জ্যাপল

0

পারফরম্যান্স কারণে জেভিএম আসলে রানটাইমের সময় সংকলন পদক্ষেপগুলি সম্পাদন করে। এর অর্থ জাভাতে একটি পরিষ্কার সংকলন-সম্পাদন পৃথককরণ নেই। এটি প্রথমে জাভা উত্স কোড থেকে বাইকোডে তথাকথিত স্ট্যাটিক সংকলন করে। তারপরে এই বাইটোকডটি কার্যকর করার জন্য জেভিএম-এ দেওয়া হয়। তবে বাইটকোড কার্যকর করা ধীর তাই জেভিএম পরিমাপ করে যে কতবার বাইকোড চালানো হয় এবং যখন এটি খুব ঘন ঘন চালিত কোডের একটি "হটস্পট" সনাক্ত করে এটি "হটস্পট" কোডের (হটস্পট প্রোফাইলার) মাইচেনকোড থেকে গতিশীল সংকলন সম্পাদন করে। সুতরাং কার্যকরভাবে আজ জাভা প্রোগ্রামগুলি মেশিনে কোড প্রয়োগ দ্বারা চালিত হয়।


0

জেআইটি সংকলক হিসাবে পরিচিত জাস্ট ইন টাইম সংকলক জাভাতে পারফরম্যান্স উন্নতির জন্য ব্যবহৃত হয়। এটি ডিফল্টরূপে সক্ষম হয়। এটি পূর্বে কার্যকর করার সময় সংকলন করা হয়। জাভা জেভিএম এ অন্তর্ভুক্ত করে জেআইটি সংকলকটির ব্যবহারকে জনপ্রিয় করেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.