JVM কেন JITM কোডটি সংকলন করে না?


107

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

প্রশ্নটি হল, কেন এই সংকলিত কোডটি একই ফাংশন / শ্রেণির পরবর্তী ব্যবহারের সময় ডিস্কে ক্যাশেড নয়?

যেমনটি দাঁড়িয়েছে, যতবারই কোনও প্রোগ্রাম কার্যকর করা হয়, JIT সংকলক কোডটির প্রাক-সংকলিত সংস্করণটি ব্যবহার না করে নতুন করে কিক্স করে। বাইটকোডটি মূলত ব্যাখ্যামূলকভাবে করা হচ্ছে, তখন এই বৈশিষ্ট্যটি যুক্ত করা কি প্রোগ্রামের প্রাথমিক রান সময়কে একটি উল্লেখযোগ্য উত্সাহ যোগ করবে না?


4
এই সমস্যাটি নিয়ে আলোচনা করা একটি থ্রেড: javalobi.org/forums/thread.jspa?threadID=15812
মিকু

2
তবে একটি সুনির্দিষ্ট উত্তর আকর্ষণ করার জন্য একটি অসম্ভব প্রশ্ন।
bmargulies

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

1
প্রত্যেকের দুর্দান্ত উত্তরের জন্য ধন্যবাদ! সমস্ত উত্তর সমানভাবে বৈধ ছিল, তাই আমি
এইটির

আপনি যদি আমাকে জিজ্ঞাসা করেন এটি একটি ভাল প্রশ্ন :)
আলফ্রেড

উত্তর:


25

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

সুতরাং সংরক্ষিত অপ্টিমাইজেশানগুলি এখনও সর্বোত্তম ছিল কিনা তা প্রতিষ্ঠার জন্য আপনার একটি ব্যবস্থা দরকার, আপনি ঠিক সেই সময়ে উড়তে পুনরায় অনুকূল করতে পারেন।


6
... অথবা আপনি কেবল একটি বিকল্প হিসাবে দৃ .়তার প্রস্তাব দিতে পারেন, যেমন ওরাকলের জেভিএম-যেমন উন্নত প্রোগ্রামারদের তাদের কাজের অধীনে কখন এবং কোথায় তারা জানেন যে নিদর্শনগুলি পরিবর্তন হচ্ছে না , তাদের অ্যাপ্লিকেশনটির কার্যকারিতাটি অনুকূল করতে সক্ষম করে ower কেন না?!
অ্যালেক্স মার্টেলি

2
কারণ এটি সম্ভবত মূল্যবান নয়। যদি সান, আইবিএম বা বিআইএ উভয়ই তাদের পারফরম্যান্স জেভিএমগুলির জন্য এটি উপযুক্ত বিবেচনা করে না, তবে এটির জন্য একটি ভাল কারণ হতে পারে। হতে পারে তাদের আরটি অপ্টিমাইজেশান ওরাকল এর চেয়ে দ্রুততর, এ কারণেই ওরাকল এটিকে ক্যাশে করে।
স্কাফম্যান

9
আগের রানগুলিতে যা শিখেছে তা ব্যবহার করার জন্য কেন স্টোরেজ অপটিমেটেশনগুলিকে প্রাথমিক পয়েন্ট হিসাবে গ্রহণ করছেন না? সেখান থেকে জেআইটি যথারীতি কাজ করতে পারে পুনরায় optim শাট ডাউন এ, সেই কোডটি আবারও ধরে রাখা যেতে পারে এবং পরবর্তী রানে নতুন সূচনা পয়েন্ট হিসাবে ব্যবহার করা যেতে পারে।
পিস

1
@ পুস আমি একমাত্র কারণ সম্পর্কে ভাবতে পারি যে এএফএইচ আপনি অনুকূলিত কোড চালনা থেকে কোনও প্রোফাইলের পরিসংখ্যান পাবেন না। সুতরাং আপনার উন্নতি করার কোনও উপায় নেই ...
মার্টিনাস

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

25

ওরাকলের জেভিএম সত্যই তা করার জন্য নথিভুক্ত হয়েছে - ওরাকলকে উদ্ধৃত করে,

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

আমি জানি না কেন সমস্ত পরিশীলিত ভিএম বাস্তবায়ন একই ধরণের বিকল্পগুলি দেয় না।


8
যেহেতু অন্যান্য পরিশীলিত
জেভিএমগুলিতে

কি দারুন! এর অর্থ সংকলনগুলি মাঝে মাঝে ক্যাশে থাকে। এটা ভাল খবর!
সন্দীপ জিন্দাল

আইবিএম এর জে 9 এটি করার জন্য নথিভুক্তও রয়েছে।
ব্যবহারকারী314104

9
নোট করুন যে এই ওরাকল জেভিএম ওরাকল ডাটাবেসের মধ্যে একটি, সান কেনার সময় ডাউনলোড অরাকলকে পাওয়া যায় নি not
থোরবজর্ন রাভন অ্যান্ডারসন

14

বিদ্যমান উত্তরের সাথে আপডেট হয়েছে - জাভা 8 এর সমাধানের জন্য উত্সর্গীকৃত একটি জেইপি রয়েছে:

=> জীপ 145: ক্যাশে সংকলিত কোডনতুন লিঙ্ক

খুব উচ্চ স্তরে, এর উল্লিখিত লক্ষ্য হ'ল :

বৃহত জাভা অ্যাপ্লিকেশনগুলির প্রারম্ভকালীন সময়ের উন্নতির জন্য পূর্ববর্তী রানগুলি থেকে সংকলিত নেটিভ কোডটি সংরক্ষণ এবং পুনরায় ব্যবহার করুন।

আশাকরি এটা সাহায্য করবে.



5

এক্সেলসিয়র জেটি-র সংস্করণ ২.০ সংস্করণ থেকে একটি ক্যাচিং জেআইটি সংকলক রয়েছে, এটি ২০০১ সালে ফিরে প্রকাশিত হয়েছিল। তদুপরি, এর এওটি সংকলক সমস্ত অপ্টিমাইজেশান ব্যবহার করে ক্যাশেটিকে একটি একক ডিএলএল / ভাগ করা অবজেক্টে পুনরায় সংকলন করতে পারে।


3
হ্যাঁ, তবে প্রশ্নটি ছিল ক্যানোনিকাল জেভিএম, অর্থাৎ সূর্যের জেভিএম সম্পর্কে। আমি ভাল করেই জানি যে জাভার জন্য বেশ কয়েকটি এওটি সংকলক পাশাপাশি অন্যান্য ক্যাশিং জেভিএম রয়েছে।
চিন্ময় কাঞ্চি

0

আমি জেভিএম বাস্তবায়নের সাথে জড়িত না হয়ে প্রকৃত কারণগুলি জানি না, তবে আমি কিছু প্রশংসনীয় বিষয়গুলি ভাবতে পারি:

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

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

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


1
এই জাতীয় জিনিসগুলির জন্য ক্লাসফাইলে একটি স্পট রয়েছে, প্রকৃতপক্ষে এটিই মূল অভিপ্রায় ছিল (জেআইটি'র কোডটি ক্লাসফাইলে একটি গুণ হিসাবে সংরক্ষণ করুন) store
তোফুবিয়ার

@ তোফুবিয়ার: নিশ্চিতকরণের জন্য ধন্যবাদ আমি সন্দেহ করেছিলাম যে এটি হতে পারে (এটিই আমি করতাম), তবে নিশ্চিত ছিল না। এটি একটি সম্ভাব্য কারণ হিসাবে সরাতে সম্পাদিত।
যাক্কো

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

1
সুস্পষ্ট বাইটকোড-থেকে-নেটিভ সংকলক সম্পর্কে সর্বশেষ অনুচ্ছেদটি বর্তমানে এনজিইএন ( এমএসডিএন.মাইক্রোসফট.ইন.সু / লিবারি / tt9t5wcf ( VS.71 ) .aspx ) এর সাথে আপনার নেট .NET- এ রয়েছে
আর মার্টিনহো ফার্নান্দেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.