আপনি দুটি ভিন্ন প্রশ্ন জিজ্ঞাসা করছেন বলে মনে হচ্ছে:
- জাভা কি আসলেই ধীর, আর যদি তাই হয় কেন?
- অনেক বিকল্পের চেয়ে দ্রুততর হওয়া সত্ত্বেও কেন জাভাটিকে ধীর বলে মনে করা হচ্ছে?
এর মধ্যে প্রথমটি কমবেশি একটি "দড়িটি কত দিন" ধরণের প্রশ্ন। এটি আপনার "ধীর" সংজ্ঞায় নেমে আসে। খাঁটি দোভাষীর তুলনায় জাভা অত্যন্ত দ্রুত। অন্যান্য ভাষাগুলির সাথে তুলনা করা (যা সাধারণত) কোনও ধরণের বাইটোকডের সাথে সংকলিত হয়, তারপরে গতিশীলভাবে মেশিন কোডে সংকলিত হয় (যেমন সি # বা .NET- এ অন্য যে কোনও কিছু) জাভা মোটামুটি পার্শ্বে থাকে। সাধারণত খাঁটি মেশিন কোডে সংকলিত ভাষাগুলির সাথে তুলনা করা হয় এবং তাদের অপটিমাইজারগুলি উন্নত করা (যেমন সি, সি ++, ফোর্টরান, অ্যাডা) ছাড়া কিছুতেই কাজ করা লোকের দল (প্রায়শই বড়) রয়েছে জাভা কয়েকটি জিনিস নিয়ে বেশ ভাল করেছে তবে সামগ্রিকভাবে অন্তত কিছুটা ধীর হতে থাকে।
এর বেশিরভাগই মূলত বাস্তবায়নের সাথে সম্পর্কিত - মূলত, এটি কোনও গতিশীল / জেআইটি সংকলক চলার সময় কোনও ব্যবহারকারী অপেক্ষা করছিল তা অবতীর্ণ হয়, সুতরাং আপনার যদি এমন একটি প্রোগ্রাম না থাকে যা শুরু করার জন্য বেশ কিছুক্ষণ চলবে, এটি সংকলকটি হার্ড অপটিমাইজেশনে প্রচুর সময় ব্যয় করে তা প্রমাণ করা শক্ত। অতএব, বেশিরভাগ জাভা (এবং সি # ইত্যাদি) সংকলকরা সত্যই কঠিন অপ্টিমাইজেশনে প্রচুর প্রচেষ্টা করেন না। অনেক ক্ষেত্রে, কোথায় প্রয়োগ করা হচ্ছে তার তুলনায় কী কী অপ্টিমাইজেশন হয় তা কম less অনেক অপ্টিমাইজেশান সমস্যাগুলি এনপি সম্পূর্ণ হয়, তাই তারা যে সময় নেয় তা সমস্যার আকারের সাথে আক্রান্ত হওয়ার সাথে সাথে দ্রুত বাড়তে থাকে। কারণের মধ্যে সময় রাখার একটি উপায় হ'ল এক সময় কেবলমাত্র একক ফাংশনের মতো কিছুতে অপ্টিমাইজেশন প্রয়োগ করা। যখন এটি কেবল বিকাশকারী সংকলকের জন্য অপেক্ষা করে, আপনি অনেক বেশি সময় নিতে পারবেন এবং প্রোগ্রামের বৃহত্তর অংশগুলিতে একই অপটিমাইজেশনটি প্রয়োগ করতে পারেন। তেমনি কিছু অপ্টিমাইজেশনের কোডটি বেশ লোমশ (এবং তাই এটি বেশ বড় হতে পারে)। আবার যেহেতু ব্যবহারকারী অপেক্ষা করছে যে কোডটি লোড হয় (এবং জেভিএম প্রারম্ভকালীন সময় প্রায়শই সামগ্রিক সময়ের জন্য একটি গুরুত্বপূর্ণ উপাদান), বাস্তবায়নের ক্ষেত্রে এক জায়গায় সংরক্ষণের সময় ভারসাম্য বজায় রাখতে হয় অন্য জায়গায় হেরে যাওয়া - এবং কতটা সামান্য কোড দেওয়া হয়েছে লোমশ অপ্টিমাইজেশান থেকে উপকারিতা, জেভিএম ছোট রাখা সাধারণত বেশি উপকারী।
দ্বিতীয় সমস্যাটি হ'ল জাভা সহ, আপনি প্রায়শই কম বেশি "কম পরিমাণে সমস্ত আকারের ফিট করে" ধরণের সমাধান পান। উদাহরণস্বরূপ, অনেক জাভা বিকাশকারীদের জন্য সুইং মূলত একমাত্র উইন্ডোং লাইব্রেরি উপলভ্য। সি ++ এর মতো কিছুতে আক্ষরিক অর্থে কয়েক ডজন উইন্ডোং লাইব্রেরি, অ্যাপ্লিকেশন ফ্রেমওয়ার্ক ইত্যাদি রয়েছে যার প্রতিটি নিজস্ব ব্যবহারের স্বাচ্ছন্দ্যে বনাম দ্রুত সম্পাদন, ধারাবাহিক চেহারা এবং অনুভূত বনাম স্থানীয় নেভিগেশন চেহারা এবং অনুভূতি ইত্যাদির মধ্যে সমঝোতার একটি সেট রয়েছে। একমাত্র আসল স্টিকিং পয়েন্ট হ'ল কিছু (যেমন Qt) বেশ ব্যয়বহুল (কমপক্ষে বাণিজ্যিক ব্যবহারের জন্য) হতে পারে।
তৃতীয়টি C ++ (এবং আরও বেশি সি) তে লিখিত প্রচুর কোড কেবল পুরানো এবং আরও পরিপক্ক। এর বেশিরভাগ অংশেই দশক আগে রচিত রুটিনগুলির একটি মূল অংশ রয়েছে, যখন কোডটি অনুকূলকরণের জন্য অতিরিক্ত সময় ব্যয় করা স্বাভাবিক, প্রত্যাশিত আচরণ ছিল। কোডে এটির প্রায়শই একটি আসল উপকার হয় যা ছোট এবং দ্রুত। কোডটি ছোট এবং দ্রুত হওয়ার জন্য সি ++ (বা সি) ক্রেডিট লাভ করে তবে এটি বিকাশকারী এবং কোডটি লেখার সময়কালের সীমাবদ্ধতার চেয়ে অনেক বেশি পণ্য। কিছুটা হলেও, এটি একটি স্ব-পরিপূর্ণ ভবিষ্যদ্বাণীকে বাড়ে - লোকেরা যখন গতির প্রতি যত্নশীল হয়, তারা প্রায়শই সি ++ নির্বাচন করে কারণ এর খ্যাতি রয়েছে। তারা অপ্টিমাইজেশনে অতিরিক্ত সময় এবং প্রচেষ্টা রাখে এবং দ্রুত সি ++ কোডের একটি নতুন প্রজন্ম লেখা হয়।
সংক্ষিপ্তসার হিসাবে, জাভার সাধারণ বাস্তবায়ন সর্বাধিক অপ্টিমাইজেশনটিকে সর্বোত্তমভাবে সমস্যাযুক্ত করে তোলে। সবচেয়ে খারাপ, যেখানে জাভা দৃশ্যমান , উইন্ডোং টুলকিট এবং জেভিএম প্রারম্ভকালীন সময়ের মতো বিষয়গুলি প্রায়শই যেভাবেই ভাষা প্রয়োগের গতির চেয়ে বড় ভূমিকা পালন করে। অনেক ক্ষেত্রে, সি এবং সি ++ কেবল অনুকূলিতকরণের জন্য আরও কঠোর পরিশ্রম করার ফলস্বরূপ তার সত্যিকারের কৃতিত্বও পান।
দ্বিতীয় প্রশ্ন হিসাবে, আমি মনে করি এটি মূলত কর্মক্ষেত্রে মানব প্রকৃতির বিষয়। কয়েক জন উদ্যোগী জাভা অন্ধভাবে দ্রুত হওয়া সম্পর্কে স্ফীত দাবিগুলি করে। কেউ এটিকে চেষ্টা করে দেখেন যে কোনও তুচ্ছ প্রোগ্রাম এমনকি শুরু হতে কয়েক সেকেন্ড সময় নেয় এবং এটি চালিত হলে ধীর এবং আনাড়ি বোধ করে। কিছু খুব সম্ভবত জিনিসগুলি বিশ্লেষণ করে বিরক্ত করতে পারে যে এটির প্রচুর পরিমাণটি হল জেভিএমের শুরু করার সময় এবং সত্য যে তারা যখন প্রথম জিনিসগুলি চেষ্টা করে তখন কোডটির কোনওটিই এখনও সংকলিত হয়নি - কিছু কোড ব্যাখ্যা করা হচ্ছে, এবং কিছু অপেক্ষা করার সময় সংকলিত হচ্ছে। সবচেয়ে খারাপ, এমনকি এটি যখন দ্রুত সঞ্চালিত হয় তখনও চেহারা এবং অনুভূতিটি বেশিরভাগ ব্যবহারকারীর কাছে সাধারণত বিদেশী এবং আনাড়ি বলে মনে হয়, সুতরাং যদিও উদ্দেশ্যমূলক পরিমাপগুলি দ্রুত প্রতিক্রিয়া বার দেখায়, তবুও এটি আনাড়ি বলে মনে হয়।
এগুলি একসাথে যুক্ত করা মোটামুটি সহজ এবং প্রাকৃতিক প্রতিক্রিয়ার দিকে নিয়ে যায়: যে জাভা ধীর, কুৎসিত এবং আনাড়ি। হাইপটি বলেছিলেন যে এটি সত্যিই দ্রুত, একটি (আরও নির্ভুল) "পরিবর্তে কিছুটা ধীরগতির পরিবর্তে, এবং এটি বেশিরভাগ নির্দিষ্ট পরিস্থিতিতে" খুব বেশি ধীরে ধীরে ধীরে ধীরে ওভারট্যাক্ট করার এবং এটিকে ভয়াবহরূপে ভাবার প্রবণতা রয়েছে " কোনও বিকাশকারী ভাষায় প্রথম কয়েকটি প্রোগ্রাম লেখার ক্ষেত্রে এটি সাধারণত সবচেয়ে খারাপ হয়। বেশিরভাগ ভাষায় একটি "হ্যালো ওয়ার্ল্ড" প্রোগ্রামের প্রয়োগ তাত্ক্ষণিকভাবে উপস্থিত হয়, তবে জাভিতে জেভিএম শুরু হওয়ার সাথে সাথে একটি সহজেই উপলব্ধিযোগ্য বিরতি দেখা যায়। এমনকি খাঁটি দোভাষী যে টাইট লুপগুলিতে আরও ধীরে ধীরে চলতে থাকে এবং এ জাতীয় কোডের জন্য এখনও প্রায়শই দ্রুত উপস্থিত হবে, কেবল কারণ এটি লোড হয়ে যায় এবং কিছুটা শীঘ্রই কার্যকর করা শুরু করে।