Comparison of Java and C++
জাভা এবং সি + + দুটি বিশিষ্ট অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা। অনেক ভাষার জনপ্রিয়তার পরিমাপ অনুসারে, দুটি ভাষা একবিংশ শতাব্দীর বেশিরভাগ সময় ধরে অবজেক্ট-ওরিয়েন্টেড এবং উচ্চ-কার্যকারিতা সফ্টওয়্যার বিকাশে আধিপত্য বিস্তার করেছে এবং প্রায়শই সরাসরি তুলনা এবং বৈপরীত্য করা হয়। জাভার বাক্যবিন্যাস সি/সি + +-এর উপর ভিত্তি করে তৈরি হয়েছিল। সি + + এবং জাভা প্রোগ্রামিং ভাষার মধ্যে পার্থক্যগুলি তাদের ঐতিহ্যের সাথে চিহ্নিত করা যেতে পারে, কারণ তাদের বিভিন্ন নকশা লক্ষ্য রয়েছে। সি + + সিস্টেম এবং অ্যাপ্লিকেশন প্রোগ্রামিংয়ের জন্য ডিজাইন করা হয়েছিল (অর্থাৎ। অবকাঠামো প্রোগ্রামিং), পদ্ধতিগত প্রোগ্রামিং ভাষা সি প্রসারিত করে, যা দক্ষ সম্পাদনের জন্য ডিজাইন করা হয়েছিল। সি-তে, সি + + অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং, এক্সসেপশন হ্যান্ডলিং, লাইফটাইম-ভিত্তিক রিসোর্স ম্যানেজমেন্ট (আর. এ. আই. আই), জেনেরিক প্রোগ্রামিং, টেমপ্লেট মেটাপ্রোগ্রামিং এবং সি + + স্ট্যান্ডার্ড লাইব্রেরির জন্য সমর্থন যোগ করেছে যার মধ্যে জেনেরিক ধারক এবং অ্যালগরিদম (স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি বা এস. টি. এল) এবং অন্যান্য অনেক সাধারণ উদ্দেশ্যে সুবিধা রয়েছে। জাভা একটি সাধারণ-উদ্দেশ্য, সমবর্তী, শ্রেণী-ভিত্তিক, অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা যা বাস্তবায়নের নির্ভরতা হ্রাস করার জন্য ডিজাইন করা হয়েছে। এটি নিরাপদ এবং অত্যন্ত বহনযোগ্য হওয়ার জন্য একটি জাভা ভার্চ্যুয়াল মেশিনের উপর নির্ভর করে। এটি একটি বিস্তৃত গ্রন্থাগারের সাথে একত্রিত করা হয়েছে যা অন্তর্নিহিত প্ল্যাটফর্মের বিমূর্ততা সরবরাহ করার জন্য ডিজাইন করা হয়েছে। জাভা একটি স্ট্যাটিক্যালি টাইপ করা অবজেক্ট-ওরিয়েন্টেড ভাষা যা সি + + এর অনুরূপ (কিন্তু অসঙ্গতিপূর্ণ) একটি বাক্য গঠন ব্যবহার করে। এর মধ্যে জাভাডক নামে একটি ডকুমেন্টেশন সিস্টেম রয়েছে। সি + + এবং জাভার বিকাশের বিভিন্ন লক্ষ্যের ফলে ভাষাগুলির মধ্যে বিভিন্ন নীতি এবং নকশা বিনিময় ঘটে। পার্থক্যগুলি নিম্নরূপঃ ভাষার বৈশিষ্ট্য সিনট্যাক্স জাভা সিনট্যাক্সের একটি প্রসঙ্গ-মুক্ত ব্যাকরণ রয়েছে যা একটি সাধারণ এলএএলআর পার্সার দ্বারা বিশ্লেষণ করা যেতে পারে। সি + + পার্স করা আরও জটিল। উদাহরণস্বরূপ, ফু <1> (3); তুলনার একটি ক্রম যদি ফু একটি পরিবর্তনশীল হয়, তবে যদি ফু একটি শ্রেণী টেমপ্লেটের নাম হয় তবে একটি বস্তু তৈরি করে। সি + + নামস্থান-স্তরের ধ্রুবক, পরিবর্তনশীল এবং ফাংশনগুলিকে অনুমতি দেয়। জাভাতে, এই ধরনের সত্তাগুলি অবশ্যই কোনও নির্দিষ্ট ধরনের হতে হবে এবং তাই একটি প্রকারের সংজ্ঞার মধ্যে সংজ্ঞায়িত করা আবশ্যক, হয় একটি শ্রেণী বা একটি ইন্টারফেস। সি + +-এ, বস্তুগুলি মান, যেখানে জাভাতে সেগুলি নয়। সি + + ডিফল্টরূপে মান শব্দার্থবিদ্যা ব্যবহার করে, যেখানে জাভা সর্বদা রেফারেন্স শব্দার্থবিদ্যা ব্যবহার করে। সি + +-এ রেফারেন্স শব্দার্থবিজ্ঞান বেছে নেওয়ার জন্য, একটি পয়েন্টার বা একটি রেফারেন্স ব্যবহার করা যেতে পারে। সি + +-এ, ক্লায়েন্ট কোডকে পরিবর্তন করা থেকে বিরত রাখার জন্য একটি পয়েন্টার বা কনস্ট অবজেক্টের রেফারেন্স ঘোষণা করা সম্ভব। ফাংশন এবং পদ্ধতিগুলি নিশ্চিত করতে পারে যে তারা "কনস্ট" কীওয়ার্ড ব্যবহার করে পয়েন্টার দ্বারা নির্দেশিত বস্তুটিকে পরিবর্তন করবে না। এটি স্থির-সঠিকতা প্রয়োগ করে। জাভাতে, চূড়ান্ত কীওয়ার্ডটি সি + +-এর কনস্ট কীওয়ার্ডের অনুরূপ, তবে এর ব্যবহার আরও সীমিত। বেশিরভাগ ক্ষেত্রে, স্থির-সঠিকতা অবশ্যই ক্লাসের ইন্টারফেসের শব্দার্থের উপর নির্ভর করতে হবে, অর্থাৎ, এটি দৃঢ়ভাবে প্রয়োগ করা হয় না, পাবলিক ডেটা সদস্যদের ব্যতীত যা চূড়ান্ত লেবেলযুক্ত। সি + + গোটো বিবৃতি সমর্থন করে, যা স্প্যাগেটি কোড প্রোগ্রামিংয়ের দিকে নিয়ে যেতে পারে। গোটো বিবৃতি ব্যতীত (যা বাস্তব কোডে খুব কমই দেখা যায় এবং অত্যন্ত নিরুৎসাহিত করা হয়), জাভা এবং সি + + উভয়েরই মূলত একই নিয়ন্ত্রণ প্রবাহ কাঠামো রয়েছে, যা কাঠামোগত নিয়ন্ত্রণ প্রবাহ প্রয়োগ করার জন্য ডিজাইন করা হয়েছে এবং কিছু গোটো-সদৃশ ফাংশন সরবরাহ করার জন্য বিরতি এবং অব্যাহত বিবৃতির উপর নির্ভর করে। কিছু মন্তব্যকারী উল্লেখ করেছেন যে এই লেবেলযুক্ত প্রবাহ নিয়ন্ত্রণ বিবৃতিগুলি কাঠামোগত প্রোগ্রামিংয়ের একক পয়েন্ট-অফ-এক্সিট বৈশিষ্ট্যকে ভেঙে দেয়। সি + + নিম্ন-স্তরের বৈশিষ্ট্য সরবরাহ করে যা জাভাতে বেশিরভাগ ক্ষেত্রেই নেই (একটি উল্লেখযোগ্য ব্যতিক্রম হল সরাসরি মেমরি অ্যাক্সেস এবং ম্যানিপুলেশনের জন্য sun.misc.Unsafe এপিআই)। সি + +-এ, পয়েন্টারগুলি নির্দিষ্ট মেমরি অবস্থানগুলি পরিচালনা করতে ব্যবহার করা যেতে পারে, যা নিম্ন-স্তরের অপারেটিং সিস্টেমের উপাদানগুলি লেখার জন্য প্রয়োজনীয় একটি কাজ। একইভাবে, অনেক সি + + সংকলক একটি ইনলাইন সংযোজনকারীকে সমর্থন করে। অ্যাসেম্বলি ল্যাঙ্গুয়েজ কোড একটি সি প্রোগ্রামে আমদানি করা যেতে পারে এবং তদ্বিপরীত। এটি সি ভাষাকে আরও দ্রুততর করে তোলে। জাভাতে, এই ধরনের কোড অবশ্যই বাহ্যিক গ্রন্থাগারে থাকতে হবে এবং শুধুমাত্র জাভা নেটিভ ইন্টারফেসের মাধ্যমে অ্যাক্সেস করা যেতে পারে, প্রতিটি কলের জন্য একটি উল্লেখযোগ্য ওভারহেড সহ। শব্দার্থবিদ্যা সি + + একটি ফাংশন/পদ্ধতির আর্গুমেন্টের জন্য ডিফল্ট মানগুলিকে অনুমতি দেয়। জাভা তা করে না। তবে, পদ্ধতি ওভারলোডিং জাভাতে অনুরূপ ফলাফল পেতে ব্যবহার করা যেতে পারে তবে অপ্রয়োজনীয় স্টাব কোড তৈরি করতে পারে। সি + +-এর জন্য কম্পাইল করার জন্য প্রয়োজনীয় ন্যূনতম কোড একটি ফাংশন, কারণ জাভা একটি ক্লাস। সি + + স্থানীয় প্রকারের মধ্যে অন্তর্নিহিত রূপান্তরের একটি পরিসরের অনুমতি দেয় (কিছু সংকীর্ণ রূপান্তর সহ), এবং ব্যবহারকারী-সংজ্ঞায়িত প্রকারের সাথে জড়িত অন্তর্নিহিত রূপান্তরগুলি সংজ্ঞায়িত করার অনুমতি দেয়। জাভাতে, শুধুমাত্র স্থানীয় প্রকারের মধ্যে বিস্তৃত রূপান্তরগুলি অন্তর্নিহিত; অন্যান্য রূপান্তরগুলির জন্য স্পষ্ট কাস্ট সিনট্যাক্স প্রয়োজন। এর ফলস্বরূপ, যদিও জাভা এবং সি + +-এ লুপের শর্তগুলি (যদি, যখন এবং প্রস্থানের শর্ত) উভয়ই একটি বুলিয়ান অভিব্যক্তি আশা করে, তবে কোড যেমন যদি (এ = 5) জাভাতে একটি সংকলন ত্রুটি সৃষ্টি করবে কারণ কোনও অন্তর্নিহিত সংকীর্ণ রূপান্তর নেই ইন্ট থেকে বুলিয়ানে, তবে সি + +-এ সংকলন করবে। কোডটি যদি টাইপো হয় এবং যদি (a = = 5) উদ্দেশ্যপ্রণোদিত হয় তবে এটি সহজ। যাইহোক, বর্তমান সি + + সংকলকগুলি সাধারণত একটি সতর্কবার্তা তৈরি করে যখন এই ধরনের একটি অ্যাসাইনমেন্ট একটি শর্তাধীন অভিব্যক্তির মধ্যে সঞ্চালিত হয়। একইভাবে, স্বতন্ত্র তুলনা বিবৃতি, যেমন। a = = 5;, কোনও পার্শ্বপ্রতিক্রিয়া ছাড়াই সাধারণত একটি সতর্কবার্তা দেওয়া হয়। ফাংশনগুলিতে প্যারামিটারগুলি পাস করার জন্য, সি + + পাস-বাই-রেফারেন্স এবং পাস-বাই-মান উভয়কেই সমর্থন করে। জাভাতে, আদিম পরামিতিগুলি সর্বদা মান দ্বারা পাস করা হয়। ক্লাসের ধরন, ইন্টারফেসের ধরন এবং অ্যারের ধরনগুলিকে সম্মিলিতভাবে জাভাতে রেফারেন্স টাইপ বলা হয় এবং সর্বদা মান দ্বারা পাস করা হয়। জাভা অন্তর্নির্মিত প্রকারগুলি ভাষার নির্দিষ্টকরণ দ্বারা সংজ্ঞায়িত একটি নির্দিষ্ট আকার এবং পরিসরের হয়। সি + +-এ, অন্তর্নির্মিত প্রকারের জন্য মানগুলির একটি ন্যূনতম পরিসীমা সংজ্ঞায়িত করা হয়, তবে সঠিক উপস্থাপনা (বিটের সংখ্যা) একটি প্রদত্ত প্ল্যাটফর্মে যে কোনও স্থানীয় প্রকার পছন্দ করা হয় তার সাথে ম্যাপ করা যেতে পারে। উদাহরণস্বরূপ, জাভা অক্ষরগুলি 16-বিট ইউনিকোড অক্ষর, এবং স্ট্রিংগুলি এই ধরনের অক্ষরের একটি ক্রম নিয়ে গঠিত। সি + + সংকীর্ণ এবং প্রশস্ত উভয় অক্ষরই প্রদান করে, তবে প্রত্যেকটির প্রকৃত আকার প্ল্যাটফর্ম নির্ভর, যেমন ব্যবহৃত অক্ষর সেট। যে কোনও ধরনের স্ট্রিং তৈরি করা যেতে পারে। এটি আরও বোঝায় যে সি + + সংকলকগুলি স্বয়ংক্রিয়ভাবে লক্ষ্য প্ল্যাটফর্মের জন্য সবচেয়ে দক্ষ উপস্থাপনা নির্বাচন করতে পারে (অর্থাৎ, একটি 64-বিট প্ল্যাটফর্মের জন্য 64-বিট পূর্ণসংখ্যা), যেখানে উপস্থাপনাটি জাভাতে স্থির করা হয়, যার অর্থ মানগুলি হয় কম-দক্ষ আকারে সংরক্ষণ করা যেতে পারে, অথবা অবশিষ্ট বিটগুলিকে প্যাড করতে হবে এবং হ্রাস-প্রস্থ আচরণ অনুকরণ করতে কোড যুক্ত করতে হবে। সি + +-এ ভাসমান বিন্দু মান এবং ক্রিয়াকলাপের বৃত্তাকার এবং নির্ভুলতা বাস্তবায়ন-সংজ্ঞায়িত (যদিও শুধুমাত্র খুব বহিরাগত বা পুরানো প্ল্যাটফর্মগুলি আই. ই. ই. ই 754 মান থেকে সরে যায়)। জাভা একটি ঐচ্ছিক কঠোর ফ্লোটিং-পয়েন্ট মডেল (স্ট্রিক্টএফপি) প্রদান করে যা প্ল্যাটফর্ম জুড়ে আরও সামঞ্জস্যপূর্ণ ফলাফলের নিশ্চয়তা দেয়, যদিও সম্ভবত ধীর রান-টাইম পারফরম্যান্সের মূল্যে। তবে, জাভা আই. ই. ই. ই 754 মান কঠোরভাবে মেনে চলে না। বেশিরভাগ সি + + সংকলক, ডিফল্টরূপে, আংশিকভাবে আই. ই. ই. ই 754 মেনে চলে (সাধারণত কঠোর বৃত্তাকার নিয়মগুলি বাদ দিয়ে এবং এন. এ. এন ফলাফলগুলিতে ব্যতিক্রম উত্থাপন করে), তবে কিছু অনুকূলকরণের অনুমতি দেওয়ার জন্য বিভিন্ন কঠোরতার সম্মতি বিকল্প সরবরাহ করে। যদি আমরা সেই বিকল্পগুলিকে ন্যূনতম সঙ্গতিপূর্ণ থেকে সর্বাধিক সঙ্গতিপূর্ণ হিসাবে দ্রুত, সামঞ্জস্যপূর্ণ (জাভার স্ট্রিক্টএফপি), কাছাকাছি-আই. ই. ই. ই এবং কঠোর-আই. ই. ই. ই হিসাবে লেবেল করি, তবে আমরা বলতে পারি যে বেশিরভাগ সি + + বাস্তবায়নগুলি দ্রুত বা কঠোর-আই. ই. ই. ই-তে স্যুইচ করার বিকল্পগুলির সাথে ডিফল্ট হয়ে প্রায়-আই. ই. ই. ই-তে চলে যায়, যখন জাভা সামঞ্জস্যপূর্ণ বিকল্পের সাথে দ্রুত করতে ডিফল্ট হয়। সি + +-এ, পয়েন্টারগুলি সরাসরি মেমরি অ্যাড্রেস মান হিসাবে পরিচালনা করা যেতে পারে। জাভা রেফারেন্সগুলি বস্তুর নির্দেশক। জাভা রেফারেন্সগুলি মেমরি ঠিকানাগুলিতে সরাসরি প্রবেশাধিকারের অনুমতি দেয় না বা মেমরি ঠিকানাগুলিকে পয়েন্টার পাটিগণিতের সাথে পরিচালনা করার অনুমতি দেয় না। সি + +-এ একজন পয়েন্টার থেকে পয়েন্টার, আইএনটিএস এবং ডাবলস-এর পয়েন্টার এবং নির্বিচারে মেমরি অবস্থানের পয়েন্টার তৈরি করতে পারে। জাভা রেফারেন্স শুধুমাত্র বস্তু অ্যাক্সেস করে, কখনও আদিম, অন্যান্য রেফারেন্স বা নির্বিচারে মেমরি অবস্থান নয়। জাভাতে, মেমোরি sun.misc.Unsafe API ব্যবহার করে নির্বিচারে মান দ্বারা পড়া এবং লেখা যেতে পারে, তবে এটি অবচিত এবং সুপারিশ করা হয় না। সি + +-এ, পয়েন্টারগুলি ফাংশন বা সদস্য ফাংশন (ফাংশন পয়েন্টার) নির্দেশ করতে পারে। জাভাতে সমতুল্য প্রক্রিয়াটি অবজেক্ট বা ইন্টারফেস রেফারেন্স ব্যবহার করে। স্ট্যাক-বরাদ্দকৃত বস্তুর মাধ্যমে, সি + + স্কোপড রিসোর্স ম্যানেজমেন্টকে সমর্থন করে, একটি কৌশল যা স্বয়ংক্রিয়ভাবে মেমরি এবং অন্যান্য সিস্টেম সংস্থানগুলি পরিচালনা করতে ব্যবহৃত হয় যা নির্ধারক বস্তু ধ্বংসকে সমর্থন করে। যদিও সি + +-এ স্কোপড রিসোর্স ম্যানেজমেন্টের নিশ্চয়তা দেওয়া যায় না (এমনকি সঠিক ধ্বংসকারী বস্তুগুলিও নতুন এবং অপসারিত রেখে বরাদ্দ করা যেতে পারে) এটি রিসোর্স ম্যানেজমেন্টের একটি কার্যকর উপায় প্রদান করে। চক্রাকার রেফারেন্সগুলি ভাঙার জন্য দুর্বল _ পিটিআর সহ ভাগ করা সংস্থানগুলি ভাগ করা _ পিটিআর ব্যবহার করে পরিচালনা করা যেতে পারে। জাভা আবর্জনা সংগ্রহ ব্যবহার করে স্বয়ংক্রিয় মেমরি ব্যবস্থাপনাকে সমর্থন করে যা চক্রাকার রেফারেন্সের উপস্থিতিতেও পৌঁছনো যায় না এমন বস্তুগুলিকে মুক্ত করতে পারে, তবে অন্যান্য সিস্টেম সংস্থানগুলি (ফাইল, স্ট্রিম, উইন্ডো, যোগাযোগ পোর্ট, থ্রেড ইত্যাদি)। অবশ্যই স্পষ্টভাবে প্রকাশ করতে হবে কারণ শেষ বস্তুর রেফারেন্স পরিত্যাগ করার পরপরই আবর্জনা সংগ্রহের নিশ্চয়তা দেওয়া হয় না। সি + + ব্যবহারকারী-সংজ্ঞায়িত অপারেটর ওভারলোডিং বৈশিষ্ট্যযুক্ত। অপারেটর ওভারলোডিং অপারেটরদের (গাণিতিক, তুলনা ইত্যাদি) সমর্থন করার জন্য ব্যবহারকারী-সংজ্ঞায়িত প্রকারের অনুমতি দেয়। এই অপারেটরদের জন্য ব্যবহারকারী-সংজ্ঞায়িত বাস্তবায়নের মাধ্যমে আদিম প্রকারের মতো। সাধারণত অপারেটরদের শব্দার্থ সংরক্ষণ করার পরামর্শ দেওয়া হয়। জাভা কোনও ধরনের অপারেটর ওভারলোডিং সমর্থন করে না (যদিও এর লাইব্রেরি স্ট্রিং কনক্যাটেনেশনের জন্য সংযোজন অপারেটর ব্যবহার করে)। জাভাতে প্রতিফলন এবং নির্বিচারে নতুন কোডের গতিশীল লোডিংয়ের জন্য স্ট্যান্ডার্ড অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস (এপিআই) সমর্থন রয়েছে। সি + + বাইনারিগুলির স্ট্যাটিক এবং ডাইনামিক লিঙ্কিং সমর্থন করে। জাভাতে জেনেরিক রয়েছে, যার মূল উদ্দেশ্য হল টাইপ-নিরাপদ ধারক সরবরাহ করা। সি + +-এ কম্পাইল-টাইম টেমপ্লেট রয়েছে, যা জেনেরিক প্রোগ্রামিং এবং মেটাপ্রোগ্রামিংয়ের জন্য আরও ব্যাপক সমর্থন প্রদান করে। জাভাতে অ্যানোটেশন রয়েছে, যা ক্লাসে নির্বিচারে কাস্টম মেটাডেটা যোগ করার এবং অ্যানোটেশন প্রসেসিং টুলের মাধ্যমে মেটাপ্রোগ্রামিংয়ের অনুমতি দেয়। জাভা এবং সি + + উভয়ই স্থানীয় প্রকার (যাকে মৌলিক বা অন্তর্নির্মিত প্রকারও বলা হয়) এবং ব্যবহারকারী-সংজ্ঞায়িত প্রকারের (যাকে যৌগিক প্রকারও বলা হয়) মধ্যে পার্থক্য করে। জাভাতে, স্থানীয় প্রকারের শুধুমাত্র শব্দার্থবিজ্ঞানের মান রয়েছে এবং যৌগিক প্রকারের শুধুমাত্র রেফারেন্স শব্দার্থবিজ্ঞান রয়েছে। সি + +-এ সমস্ত প্রকারের শব্দার্থের মান রয়েছে, তবে যে কোনও প্রকারের জন্য একটি রেফারেন্স তৈরি করা যেতে পারে, যা রেফারেন্স শব্দার্থের মাধ্যমে বস্তুটিকে পরিচালনা করার অনুমতি দেবে। সি + + নির্বিচারে শ্রেণীর একাধিক উত্তরাধিকারকে সমর্থন করে। জাভাতে একটি শ্রেণী শুধুমাত্র একটি শ্রেণী থেকে উদ্ভূত হতে পারে, তবে একটি শ্রেণী একাধিক ইন্টারফেস প্রয়োগ করতে পারে (অন্য কথায়, এটি প্রকারের একাধিক উত্তরাধিকারকে সমর্থন করে, তবে বাস্তবায়নের শুধুমাত্র একক উত্তরাধিকার)। জাভা স্পষ্টভাবে ইন্টারফেস এবং ক্লাসের মধ্যে পার্থক্য করে। সি + +-এ, একাধিক উত্তরাধিকার এবং বিশুদ্ধ ভার্চুয়াল ফাংশনগুলি কয়েকটি ছোট পার্থক্য সহ জাভা ইন্টারফেসের মতো প্রায় ফাংশনগুলি সংজ্ঞায়িত করা সম্ভব করে তোলে। জাভাতে মাল্টি-থ্রেডিংয়ের জন্য ভাষা এবং স্ট্যান্ডার্ড লাইব্রেরি সমর্থন রয়েছে। জাভাতে সিঙ্ক্রোনাইজড কীওয়ার্ড মাল্টি-থ্রেডেড অ্যাপ্লিকেশনগুলিকে সমর্থন করার জন্য মিউটেক্স লক প্রদান করে। জাভা আরও উন্নত মাল্টি-থ্রেডিং সিঙ্ক্রোনাইজিংয়ের জন্য গ্রন্থাগারও সরবরাহ করে। সি + + 11-এ সি + +-এ মাল্টি-থ্রেডিংয়ের জন্য একটি সংজ্ঞায়িত মেমরি মডেল রয়েছে এবং থ্রেড তৈরি করার জন্য এবং অনেক সিঙ্ক্রোনাইজিং প্রিমিটিভের জন্য লাইব্রেরি সমর্থন রয়েছে। এর জন্য অনেক তৃতীয় পক্ষের গ্রন্থাগারও রয়েছে। সি + + সদস্য ফাংশনগুলিকে ভার্চ্যুয়াল ফাংশন হিসাবে ঘোষণা করা যেতে পারে, যার অর্থ কল করার পদ্ধতিটি বস্তুর রান-টাইম প্রকার দ্বারা নির্ধারিত হয়। গতিশীল প্রেরণ)। ডিফল্টরূপে, সি + +-এর পদ্ধতিগুলি ভার্চ্যুয়াল নয় (অর্থাৎ, অপ্ট-ইন ভার্চ্যুয়াল)। জাভাতে, পদ্ধতিগুলি ডিফল্টরূপে ভার্চ্যুয়াল, তবে চূড়ান্ত কীওয়ার্ড (অর্থাৎ, অপ্ট-আউট ভার্চ্যুয়াল) ব্যবহার করে অ-ভার্চ্যুয়াল করা যেতে পারে। সি + + গণনাগুলি আদিম প্রকার এবং পূর্ণসংখ্যার প্রকারগুলিতে অন্তর্নিহিত রূপান্তরকে সমর্থন করে (তবে পূর্ণসংখ্যার প্রকার থেকে নয়)। জাভা গণনাগুলি পাবলিক স্ট্যাটিক enum {enumName1, enumName2} হতে পারে এবং ক্লাসের মতো ব্যবহৃত হয়। আরেকটি উপায় হল অন্য একটি শ্রেণী তৈরি করা যা java.lang.Enum <E> প্রসারিত করে এবং তাই কনস্ট্রাক্টর, ক্ষেত্র এবং পদ্ধতিগুলিকে অন্য যে কোনও শ্রেণী হিসাবে সংজ্ঞায়িত করতে পারে। সি + + 11 হিসাবে, সি + + দৃঢ়ভাবে টাইপ করা গণনাগুলিকে সমর্থন করে যা স্টোরেজ প্রকারের আরও প্রকার-সুরক্ষা এবং স্পষ্ট নির্দিষ্টকরণ প্রদান করে। ইউনারি অপারেটর '+ +' এবং '--': সি + +-এ অপারেন্ডটি একটি পরিবর্তনযোগ্য মান হবে। [বাদ দেওয়া হয়েছে] ফলাফল হল আপডেটেড অপারেন্ড; এটি একটি lvalue. ", কিন্তু জাভাতে উপরে উল্লিখিত বাইনারি সংখ্যাসূচক প্রচারের মধ্যে আনবক্সিং রূপান্তর এবং মান সেট রূপান্তর অন্তর্ভুক্ত থাকতে পারে। যদি প্রয়োজন হয়, ভ্যালু সেট রূপান্তর {এবং/অথবা [.] বক্সিং রূপান্তর} ভেরিয়েবলে সংরক্ষণ করার আগে যোগফলের উপর প্রয়োগ করা হয়। ", অর্থাৎ। জাভাতে, "পূর্ণসংখ্যা i = 2;", "+ + i;" সূচনা করার পরে নতুন বস্তু বরাদ্দ করে রেফারেন্স i পরিবর্তন করে, যখন C + +-এ বস্তুটি এখনও একই থাকে। রিসোর্স ম্যানেজমেন্ট জাভা স্বয়ংক্রিয় আবর্জনা সংগ্রহের প্রস্তাব দেয়, যা রিয়েল টাইম জাভা স্পেসিফিকেশনের মাধ্যমে নির্দিষ্ট পরিস্থিতিতে বাইপাস করা যেতে পারে। সি + +-এ মেমরি ম্যানেজমেন্ট সাধারণত কনস্ট্রাক্টর, ডেস্ট্রাক্টর এবং স্মার্ট পয়েন্টারের মাধ্যমে করা হয়। সি + + মান আবর্জনা সংগ্রহের অনুমতি দেয়, তবে এর প্রয়োজন হয় না। আবর্জনা সংগ্রহ খুব কমই ব্যবহার করা হয়। সি + + মেমরির নির্বিচারে ব্লক বরাদ্দ করতে পারে। জাভা শুধুমাত্র অবজেক্ট ইনস্ট্যান্টিয়েশনের মাধ্যমে মেমরি বরাদ্দ করে। জাভাতে বাইটের একটি অ্যারে হিসাবে নির্বিচারে মেমরি ব্লক বরাদ্দ করা যেতে পারে। জাভা এবং সি + + সম্পদ ব্যবস্থাপনার জন্য বিভিন্ন প্রবাদ ব্যবহার করে। জাভা মূলত আবর্জনা সংগ্রহের উপর নির্ভর করে, যা স্মৃতি পুনরুদ্ধার করতে পারে, যেখানে সি + + মূলত রিসোর্স অ্যাকুইজিশন ইজ ইনিশিয়ালাইজেশন (আরএআইআই) প্রবাদের উপর নির্ভর করে। এটি দুটি ভাষার মধ্যে বিভিন্ন পার্থক্যের মধ্যে প্রতিফলিত হয়ঃ সি + +-এ যৌগিক ধরনের বস্তুগুলিকে স্থানীয় স্ট্যাক-বাউন্ড ভেরিয়েবল হিসাবে বরাদ্দ করা সাধারণ বিষয় যা সুযোগের বাইরে গেলে ধ্বংস হয়ে যায়। জাভাতে যৌগের প্রকারগুলি সর্বদা স্তূপের উপর বরাদ্দ করা হয় এবং আবর্জনা সংগ্রাহক দ্বারা সংগ্রহ করা হয় (ভার্চুয়াল মেশিনগুলি ব্যতীত যা স্তুপ বরাদ্দকে স্ট্যাক বরাদ্দে রূপান্তর করতে এস্কেপ বিশ্লেষণ ব্যবহার করে)। সি + +-এ ধ্বংসকারী রয়েছে, অন্যদিকে জাভাতে চূড়ান্তকারী রয়েছে। উভয়ই একটি বস্তুর বিচ্ছিন্নকরণের আগে আহ্বান করা হয়, তবে তারা উল্লেখযোগ্যভাবে পৃথক হয়। একটি সি + + বস্তুর ধ্বংসকারীকে অবশ্যই অন্তর্নিহিতভাবে (স্ট্যাক-বাউন্ড ভেরিয়েবলের ক্ষেত্রে) বা স্পষ্টভাবে কোনও বস্তুকে বিচ্ছিন্ন করার জন্য আহ্বান করতে হবে। একটি প্রোগ্রামের যে বিন্দুতে একটি বস্তু বিচ্ছিন্ন করা হয় তার ঠিক আগে ধ্বংসকারী সিঙ্ক্রোনাসভাবে কার্যকর করে। সি + +-এ সিঙ্ক্রোনাস, সমন্বিত প্রাথমিককরণ এবং বিচ্ছিন্নকরণ এইভাবে আরএআইআই প্রবাদকে সন্তুষ্ট করে। সি + +-এ ডেস্ট্রাক্টরগুলি কোনও বস্তুর সাথে সম্পর্কিত সংস্থানগুলি ফিরে পাওয়ার স্বাভাবিক উপায় এবং এটি কনস্ট্রাক্টরদের একটি প্রয়োজনীয় প্রতিরূপ। জাভাতে, আবর্জনা সংগ্রাহক দ্বারা অবজেক্ট ডিয়াল্লকেশন পরোক্ষভাবে পরিচালিত হয়। একটি জাভা অবজেক্টের ফাইনালাইজারকে শেষবারের জন্য অ্যাক্সেস করার কিছু সময় পরে এবং এটি বিচ্ছিন্ন হওয়ার আগে অ্যাসিঙ্ক্রোনাসভাবে আহ্বান করা হয়। খুব কম বস্তুরই চূড়ান্তকরণের প্রয়োজন হয়। একটি চূড়ান্তকারী শুধুমাত্র এমন বস্তুর জন্য প্রয়োজন যা সাধারণত জেভিএম-এর বাহ্যিক সংস্থানগুলি ছেড়ে দেওয়ার আগে বস্তুর অবস্থার কিছু পরিষ্কার করার নিশ্চয়তা দিতে হবে। চূড়ান্তকারীগুলির সরাসরি ব্যবহারগুলি সাধারণত পরামর্শ দেওয়া হয় না, কারণ এগুলি অপ্রত্যাশিত, সাধারণত বিপজ্জনক এবং বেশিরভাগ সময় অপ্রয়োজনীয়। চূড়ান্তকারীকে সি + + ধ্বংসকারী হিসাবে না ভাবার বিষয়ে সতর্ক থাকতে হবে। বরং, ট্রাই-উইথ-রিসোর্স বা ট্রাই-ফাইনাল ব্লক ধ্বংসকারীর মতো আরও অনুরূপ উদ্দেশ্য অর্জন করে। ফাইনালাইজার বা ক্লিনারগুলির একটি সমস্যা হল যে এগুলি অবিলম্বে চালু হবে কিনা তার নিশ্চয়তা নেই। অতএব, সময়-সমালোচনামূলক কাজগুলির জন্য কখনই চূড়ান্তকারী ব্যবহার করা উচিত নয়। উপরন্তু, চূড়ান্তকারীগুলি গুরুতর কর্মক্ষমতা জরিমানার সাথে আসে এবং বস্তুগুলিকে বিচ্ছিন্ন করতে সময় নেয়, তাই জাভা 9-এ তাদের ব্যবহার নিরুৎসাহিত এবং অবহেলিত করা হয়। সি + +-এ আরএআইআই-এর সাথে, এক ধরনের সম্পদ সাধারণত একটি ছোট শ্রেণীর মধ্যে আবৃত থাকে যা নির্মাণের পরে সম্পদ বরাদ্দ করে এবং ধ্বংসের পরে সম্পদটি ছেড়ে দেয় এবং সেই পয়েন্টগুলির মধ্যে সম্পদের অ্যাক্সেস সরবরাহ করে। যে কোনও শ্রেণীতে শুধুমাত্র এই ধরনের আর. এ. আই. আই বস্তু থাকে তাদের কোনও ধ্বংসকারীকে সংজ্ঞায়িত করার প্রয়োজন হয় না কারণ আর. এ. আই. আই বস্তুর ধ্বংসকারীদের স্বয়ংক্রিয়ভাবে বলা হয় কারণ এই শ্রেণীর একটি বস্তু ধ্বংস হয়ে যায়। জাভাতে, ট্রাই/ক্যাচ/ফাইনাল কনস্ট্রক্ট ব্যবহার করে সম্পদের নিরাপদ সিঙ্ক্রোনাস বিচ্ছিন্নকরণ নির্ধারণমূলকভাবে সম্পাদন করা যেতে পারে। বিকল্পভাবে, ট্রাই-উইথ-রিসোর্সেস গঠন, যা জাভা 7-এ চালু করা হয়েছিল, ট্রাই-ফাইনাল নির্মাণের জন্য অগ্রাধিকার হিসাবে ব্যবহার করা উচিত। ট্রাই-উইথ-রিসোর্স গঠন আরও সংক্ষিপ্ত এবং পাঠযোগ্য। এটি আরও সহায়ক ডায়াগনস্টিক তথ্যও সরবরাহ করে, যেহেতু দমন করা ব্যতিক্রমগুলি বাতিল করা হয় না এবং স্ট্যাক ট্রেসে এই তথ্য সহ মুদ্রিত করা হবে যে সেগুলি দমন করা হয়েছিল। সি + +-এ, একটি ঝুলন্ত পয়েন্টার থাকা সম্ভব, যা ইতিমধ্যে বিচ্ছিন্ন করা হয়েছে এমন কোনও বস্তুর একটি বাসি রেফারেন্স। ঝুলন্ত পয়েন্টার ব্যবহার করার চেষ্টার ফলে সাধারণত প্রোগ্রাম ব্যর্থ হয়। জাভাতে, আবর্জনা সংগ্রাহক কোনও উল্লেখিত বস্তু ধ্বংস করবে না। সি + +-এ, প্রারম্ভিক নয় এমন আদিম বস্তু থাকা সম্ভব। জাভা ডিফল্ট সূচনা প্রয়োগ করে। সি + +-এ, একটি বরাদ্দকৃত বস্তু থাকা সম্ভব যার কোনও বৈধ রেফারেন্স নেই। এই ধরনের একটি পৌঁছনো যায় না এমন বস্তু ধ্বংস করা যায় না (বিচ্ছিন্ন), এবং এর ফলে মেমরি লিক হয়। এর বিপরীতে, জাভাতে কোনও বস্তু আবর্জনা সংগ্রাহক দ্বারা বিচ্ছিন্ন করা হবে না যতক্ষণ না এটি পৌঁছানো যায় না (ব্যবহারকারী প্রোগ্রাম দ্বারা)। (দুর্বল রেফারেন্সগুলি সমর্থিত, যা জাভা আবর্জনা সংগ্রাহকের সাথে কাজ করে যাতে পৌঁছানোর বিভিন্ন শক্তির অনুমতি দেওয়া যায়।) জাভাতে আবর্জনা সংগ্রহ অনেক মেমরি ফুটো রোধ করে, তবে কিছু পরিস্থিতিতে এখনও ফুটো হওয়ার সম্ভাবনা রয়েছে। স্বয়ংক্রিয় আবর্জনা সংগ্রাহক এই ভুল ধারণা দিতে পারে যে জাভাতে মেমরি ম্যানেজমেন্ট সম্পর্কে চিন্তা করার দরকার নেই। যদিও এই কথাটা একেবারেই সত্যি নয়। আলগাভাবে বলতে গেলে, এর কারণ হল একটি প্রোগ্রামে "মেমরি লিক" থাকতে পারে, যা আরও আনুষ্ঠানিকভাবে "অনিচ্ছাকৃত বস্তু ধরে রাখা" হিসাবে পরিচিত। মেমরি লিকের একটি উদাহরণ যা ঘটতে পারে তা এমন একটি প্রোগ্রামের জন্য যা কোনও যৌক্তিক ত্রুটি ছাড়াই লেখা হয়েছে, তবে এটি অপ্রচলিত রেফারেন্সগুলি সরিয়ে দেয়নি। এর ফলে আবর্জনা সংগ্রহকারী ক্রিয়াকলাপের বেশি ব্যবহার, উচ্চ মেমরি ফুটপ্রিন্ট হয়। চরম পরিস্থিতিতে, এই সমস্যাটি একটি আউটঅফমেমোরিএররের দিকে নিয়ে যেতে পারে, তবে এটি খুব কমই ঘটে। এর সমাধান হল অবজেক্ট রেফারেন্স বাতিল করা। মেমরি লিকের দ্বিতীয় সাধারণ কারণ হল ক্যাশের ব্যবহার যা আর প্রাসঙ্গিক হয়ে ওঠেনি। পুরানো ক্যাশে ব্যবহার করার কারণে মেমরি লিকের সমাধান হল একটি দুর্বল হ্যাশ ম্যাপ ব্যবহার করে ক্যাশে উপস্থাপন করা। গ্রন্থাগারগুলি সি + + সাধারণত প্ল্যাটফর্ম-নির্দিষ্ট গ্রন্থাগারগুলিতে উপলব্ধ অনেক বৈশিষ্ট্যগুলিতে ক্রস-প্ল্যাটফর্ম অ্যাক্সেস সরবরাহ করে। জাভা থেকে নেটিভ অপারেটিং সিস্টেম এবং হার্ডওয়্যার ফাংশনে সরাসরি প্রবেশাধিকারের জন্য জাভা নেটিভ ইন্টারফেস ব্যবহার করা প্রয়োজন। রানটাইম তার অনিয়ন্ত্রিত অভিব্যক্তির কারণে, নিম্ন স্তরের সি + + ভাষা বৈশিষ্ট্য (যেমন। অনিয়ন্ত্রিত অ্যারে অ্যাক্সেস, কাঁচা পয়েন্টার, টাইপ পানিং) কম্পাইল-টাইমে বা রান-টাইমে ওভারহেড ছাড়া নির্ভরযোগ্যভাবে চেক করা যায় না। সম্পর্কিত প্রোগ্রামিং ত্রুটিগুলি নিম্ন-স্তরের বাফার ওভারফ্লো এবং বিভাজন ত্রুটির কারণ হতে পারে। স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি এই ধরনের ত্রুটি এড়াতে সাহায্য করার জন্য উচ্চ-স্তরের আরএআইআই বিমূর্ততা (যেমন ভেক্টর, তালিকা এবং মানচিত্র) প্রদান করে। জাভাতে, নিম্ন স্তরের ত্রুটিগুলি ঘটতে পারে না বা জাভা ভার্চ্যুয়াল মেশিন (জেভিএম) দ্বারা সনাক্ত করা যায় এবং একটি ব্যতিক্রম আকারে অ্যাপ্লিকেশনকে রিপোর্ট করা হয়। জাভা ভাষার জন্য সীমার বাইরে অ্যারে অ্যাক্সেসের ক্ষেত্রে নির্দিষ্ট আচরণের প্রয়োজন হয়, যার জন্য সাধারণত অ্যারে অ্যাক্সেসের সীমা পরীক্ষা করা প্রয়োজন। এটি অস্থিতিশীলতার একটি সম্ভাব্য উৎসকে দূর করে কিন্তু সাধারণত মৃত্যুদন্ড কার্যকর করার গতি কমিয়ে দেয়। কিছু ক্ষেত্রে, বিশেষ করে জাভা 7 থেকে, সংকলক বিশ্লেষণ একটি সীমা পরীক্ষা অপ্রয়োজনীয় প্রমাণ করতে পারে এবং এটি নির্মূল করতে পারে। স্থানীয় অ্যারেগুলির সীমার বাইরে অ্যাক্সেসের জন্য সি + +-এর কোনও প্রয়োজনীয় আচরণ নেই, সুতরাং স্থানীয় অ্যারেগুলির জন্য কোনও সীমা পরীক্ষা করার প্রয়োজন নেই। সি + + স্ট্যান্ডার্ড লাইব্রেরি সংগ্রহ যেমন স্ট্যান্ডার্ডঃঃ ভেক্টর, তবে, ঐচ্ছিক সীমা পরীক্ষা প্রদান করে। সংক্ষেপে, জাভা অ্যারেগুলি "সাধারণত নিরাপদ; সামান্য সীমাবদ্ধ; প্রায়শই ওভারহেড থাকে" যখন সি + + নেটিভ অ্যারেগুলির "ঐচ্ছিক ওভারহেড থাকে; সামান্য অনিয়ন্ত্রিত; সম্ভবত অনিরাপদ"। টেমপ্লেট বনাম জেনেরিক সি + + এবং জাভা উভয়ই যথাক্রমে জেনেরিক প্রোগ্রামিং, টেমপ্লেট এবং জেনেরিকের সুবিধা প্রদান করে। যদিও এগুলি একই ধরনের সমস্যা সমাধানের জন্য তৈরি করা হয়েছিল এবং এগুলির বাক্য গঠন একই রকম, তবে এগুলি বেশ আলাদা। {। শ্রেণী = "উইকিটেবল"! সি + + টেমপ্লেট! জাভা জেনেরিক্স।-। ক্লাস, ফাংশন, উপনাম এবং ভেরিয়েবল টেমপ্লেট করা যেতে পারে। । শ্রেণী এবং পদ্ধতিগুলি সাধারণ করা যেতে পারে। ।-প্যারামিটারগুলি পরিবর্তনশীল, যে কোনও ধরনের, অবিচ্ছেদ্য মান, অক্ষর আক্ষরিক বা একটি শ্রেণী টেমপ্লেট হতে পারে। প্যারামিটারগুলি যে কোনও রেফারেন্স টাইপ হতে পারে, যার মধ্যে রয়েছে বক্সযুক্ত আদিম প্রকার (অর্থাৎ। পূর্ণসংখ্যা, বুলিয়ান।)। ।-। সংকলিত হলে প্রতিটি প্যারামিটার-সেটের জন্য ক্লাস বা ফাংশনের পৃথক তাত্ক্ষণিকতা তৈরি করা হবে। ক্লাস টেমপ্লেটগুলির জন্য, শুধুমাত্র যে সদস্য ফাংশনগুলি ব্যবহার করা হয় তা তাত্ক্ষণিক করা হবে। । শ্রেণী বা ফাংশনের একটি সংস্করণ সংকলিত হয়, যা সমস্ত ধরনের পরামিতিগুলির জন্য কাজ করে (টাইপ-ইরেজারের মাধ্যমে)। ।-। বিভিন্ন প্যারামিটার সহ ইনস্ট্যান্ট করা একটি ক্লাস টেমপ্লেটের অবজেক্টগুলির রান টাইমে বিভিন্ন প্রকার থাকবে (অর্থাৎ, স্বতন্ত্র টেমপ্লেট ইনস্ট্যান্টিয়েশনগুলি স্বতন্ত্র ক্লাস)। টাইপ প্যারামিটারগুলি কম্পাইল করার সময় মুছে ফেলা হয়; বিভিন্ন ধরনের প্যারামিটার সহ একটি ক্লাসের অবজেক্টগুলি রান টাইমে একই ধরনের হয়। এটি একটি ভিন্ন কনস্ট্রাক্টর সৃষ্টি করে। এই ধরনের মুছে ফেলার কারণে, জেনেরিক শ্রেণীর বিভিন্ন তাৎক্ষণিক ব্যবহার করে পদ্ধতিগুলি ওভারলোড করা সম্ভব নয়। ।-। ক্লাস বা ফাংশন টেমপ্লেটের বাস্তবায়ন অবশ্যই এটি ব্যবহার করার জন্য একটি অনুবাদ ইউনিটের মধ্যে দৃশ্যমান হতে হবে। এটি সাধারণত হেডার ফাইলগুলিতে বা হেডার ফাইলে অন্তর্ভুক্ত সংজ্ঞাগুলি বোঝায়। সি + + 11 হিসাবে, কিছু তাৎক্ষণিক সংকলন পৃথক করতে বাহ্যিক টেমপ্লেট ব্যবহার করা সম্ভব। । একটি সংকলিত শ্রেণী ফাইল থেকে শ্রেণী বা ফাংশনের স্বাক্ষর এটি ব্যবহার করার জন্য যথেষ্ট। টেমপ্লেটগুলি বিশেষায়িত হতে পারে-একটি নির্দিষ্ট টেমপ্লেট প্যারামিটারের জন্য একটি পৃথক বাস্তবায়ন প্রদান করা যেতে পারে। জেনেরিক বিশেষায়িত হতে পারে না। ।-। টেমপ্লেট প্যারামিটারগুলিতে ডিফল্ট আর্গুমেন্ট থাকতে পারে। প্রাক-সি + + 11, এটি শুধুমাত্র টেমপ্লেট ক্লাসের জন্য অনুমোদিত ছিল, ফাংশনগুলির জন্য নয়। । সাধারণ ধরনের পরামিতিগুলিতে ডিফল্ট আর্গুমেন্ট থাকতে পারে না। ।-। ওয়াইল্ডকার্ডগুলি অসমর্থিত। পরিবর্তে, রিটার্ন প্রকারগুলি প্রায়শই নেস্টেড টাইপেডেফ হিসাবে পাওয়া যায়। (এছাড়াও, সি + + 11 স্বয়ংক্রিয় কীওয়ার্ড যোগ করেছে, যা সংকলনের সময় নির্ধারণ করা যেতে পারে এমন যে কোনও ধরণের জন্য ওয়াইল্ডকার্ড হিসাবে কাজ করে।) । ওয়াইল্ডকার্ডগুলি টাইপ প্যারামিটার হিসাবে সমর্থিত। ।-। টাইপ প্যারামিটারগুলির সীমাবদ্ধতার জন্য কোনও সরাসরি সমর্থন নেই, তবে মেটাপ্রোগ্রামিং এটি প্রদান করে। উপরের এবং নীচের সীমার জন্য যথাক্রমে "প্রসারিত" এবং "সুপার" সহ টাইপ প্যারামিটারগুলির সীমাবদ্ধতাকে সমর্থন করে; টাইপ প্যারামিটারগুলির মধ্যে সম্পর্ক প্রয়োগের অনুমতি দেয়। ।-। পরামিতি প্রকারের সঙ্গে একটি বস্তুর তাৎক্ষণিককরণের অনুমতি দেয়। । প্যারামিটারের ধরন সহ একটি বস্তুর তাৎক্ষণিককরণকে অন্তর্ভুক্ত করে (প্রতিফলনের মাধ্যমে ব্যতীত)। ।-। স্ট্যাটিক পদ্ধতি এবং ভেরিয়েবলের জন্য ক্লাস টেমপ্লেটের টাইপ প্যারামিটার ব্যবহার করা যেতে পারে। । স্ট্যাটিক পদ্ধতি এবং ভেরিয়েবলের জন্য জেনেরিক শ্রেণীর টাইপ প্যারামিটার ব্যবহার করা যাবে না। ।-। বিভিন্ন ধরনের প্যারামিটারের ক্লাস এবং ফাংশনের মধ্যে স্ট্যাটিক ভেরিয়েবলগুলি ভাগ করা হয়নি। । বিভিন্ন ধরনের প্যারামিটারের ক্লাসের দৃষ্টান্তের মধ্যে ভাগ করা স্ট্যাটিক ভেরিয়েবল। ।-। ক্লাস এবং ফাংশন টেমপ্লেটগুলি তাদের ঘোষণায় টাইপ প্যারামিটারগুলির জন্য টাইপ সম্পর্ক প্রয়োগ করে না। একটি ভুল ধরনের পরামিতি ব্যবহারের ফলে সংকলন ব্যর্থ হয়, প্রায়শই ব্যবহারকারীর কোডের পরিবর্তে টেমপ্লেট কোডের মধ্যে একটি ত্রুটি বার্তা তৈরি করে যা এটি আহ্বান করে। টেমপ্লেটেড ক্লাস এবং ফাংশনগুলির সঠিক ব্যবহার সঠিক ডকুমেন্টেশনের উপর নির্ভর করে। মেটাপ্রোগ্রামিং অতিরিক্ত প্রচেষ্টার বিনিময়ে এই বৈশিষ্ট্যগুলি প্রদান করে। সি + + 11-এ এই সমস্যা সমাধানের একটি প্রস্তাব ছিল, তথাকথিত ধারণাগুলি, এটি পরবর্তী মানের জন্য পরিকল্পনা করা হয়েছে। জেনেরিক ক্লাস এবং ফাংশনগুলি তাদের ঘোষণায় টাইপ প্যারামিটারগুলির জন্য টাইপ সম্পর্ক প্রয়োগ করতে পারে। একটি ভুল টাইপ প্যারামিটারের ব্যবহারের ফলে যে কোডটি এটি ব্যবহার করে তার মধ্যে একটি টাইপ ত্রুটি দেখা দেয়। জেনেরিক কোডে প্যারামিট্রাইজড প্রকারের ক্রিয়াকলাপগুলি কেবল এমন উপায়ে অনুমোদিত যা ঘোষণার মাধ্যমে নিরাপদ হওয়ার নিশ্চয়তা দেওয়া যেতে পারে। এর ফলে নমনীয়তার মূল্যে আরও বেশি ধরনের নিরাপত্তা পাওয়া যায়। ।-। টেমপ্লেটগুলি টুরিং-সম্পূর্ণ (টেমপ্লেট মেটাপ্রোগ্রামিং দেখুন)। । জেনেরিকগুলিও টুরিং-কমপ্লিট।} বিবিধ জাভা এবং সি + + কোডকে একাধিক সোর্স ফাইলে বিভক্ত করার জন্য বিভিন্ন উপায় ব্যবহার করে। জাভা একটি প্যাকেজ সিস্টেম ব্যবহার করে যা সমস্ত প্রোগ্রাম সংজ্ঞার জন্য ফাইলের নাম এবং পথ নির্ধারণ করে। এর সংকলক এক্সিকিউটেবল ক্লাস ফাইলগুলি আমদানি করে। সি + + উৎস ফাইলগুলির মধ্যে ঘোষণা ভাগ করে নেওয়ার জন্য একটি হেডার ফাইল সোর্স কোড অন্তর্ভুক্তি ব্যবস্থা ব্যবহার করে। সংকলিত জাভা কোড ফাইলগুলি সাধারণত সি + +-এর কোড ফাইলগুলির চেয়ে ছোট হয় কারণ জাভা বাইটকোড সাধারণত নেটিভ মেশিন কোডের চেয়ে বেশি কম্প্যাক্ট হয় এবং জাভা প্রোগ্রামগুলি কখনই স্ট্যাটিকভাবে সংযুক্ত হয় না। সি + + সংকলনে একটি অতিরিক্ত পাঠ্য প্রাক প্রক্রিয়াকরণ পর্যায় রয়েছে, যেখানে জাভা তা করে না। এইভাবে কিছু ব্যবহারকারী শর্তাধীন সংকলনের আরও ভাল সমর্থনের জন্য তাদের নির্মাণ প্রক্রিয়াতে একটি প্রাক প্রক্রিয়াকরণ পর্যায় যুক্ত করে। জাভার বিভাগ এবং মডুলাস অপারেটরগুলি শূন্যে ছাঁটাই করার জন্য ভালভাবে সংজ্ঞায়িত করা হয়েছে। সি + + (প্রাক-সি + + 11) নির্দিষ্ট করে না যে এই অপারেটরগুলি শূন্যে ছাঁটাই করে বা "-অনন্তের মধ্যে ছাঁটাই করে"। জাভা এবং সি + + 11-এ-3/2 সর্বদা-1 হবে, তবে একটি সি + + 03 সংকলক প্ল্যাটফর্মের উপর নির্ভর করে-1 বা-2 ফেরত দিতে পারে। সি99 জাভা এবং সি + + 11-এর মতো একই পদ্ধতিতে বিভাজনকে সংজ্ঞায়িত করে। উভয় ভাষাই নিশ্চিত করে (যেখানে a এবং b পূর্ণসংখ্যার প্রকার) যে (a/b) * b + (a% b) = = a সমস্ত a এবং b-এর জন্য (b! = 0)। সি + + 03 সংস্করণটি কখনও কখনও দ্রুততর হবে, কারণ এটি প্রসেসরের যে কোনও কাটা মোড বেছে নেওয়ার অনুমতি দেওয়া হয়। পূর্ণসংখ্যার আকারগুলি জাভাতে সংজ্ঞায়িত করা হয় (পূর্ণসংখ্যা 32-বিট, দীর্ঘ 64-বিট), যেখানে সি + + এ পূর্ণসংখ্যা এবং পয়েন্টারের আকার কম্পাইলার এবং অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (এ. বি. আই) প্রদত্ত সীমাবদ্ধতার মধ্যে নির্ভরশীল। এইভাবে একটি জাভা প্রোগ্রামের প্ল্যাটফর্ম জুড়ে সামঞ্জস্যপূর্ণ আচরণ থাকবে, যেখানে একটি সি + + প্রোগ্রামের জন্য কিছু প্ল্যাটফর্মের জন্য মানিয়ে নেওয়ার প্রয়োজন হতে পারে, তবে স্থানীয় প্ল্যাটফর্মের জন্য আরও প্রাকৃতিক পূর্ণসংখ্যা আকারের সাথে দ্রুত চলতে পারে। সি + + এবং জাভার তুলনা করার একটি উদাহরণ উইকিপ্রতিষ্ঠানে রয়েছে। একটি সংকলিত জাভা প্রোগ্রাম চালানোর পাশাপাশি, জাভা অ্যাপ্লিকেশন চালিত কম্পিউটারগুলিকে সাধারণত জাভা ভার্চ্যুয়াল মেশিন (জেভিএম) চালাতে হবে, যখন সংকলিত সি + + প্রোগ্রামগুলি বাহ্যিক অ্যাপ্লিকেশন ছাড়াই চালানো যেতে পারে। জাভার প্রাথমিক সংস্করণগুলি সি + +-এর মতো স্থিতিশীলভাবে সংকলিত ভাষাগুলির তুলনায় উল্লেখযোগ্যভাবে এগিয়ে ছিল। এর কারণ হল এই দুটি ঘনিষ্ঠভাবে সম্পর্কিত ভাষার প্রোগ্রাম বিবৃতিগুলি সি + + এর সাথে কয়েকটি মেশিন নির্দেশাবলীতে সংকলন করতে পারে, যখন একটি জেভিএম দ্বারা ব্যাখ্যা করা হলে প্রতিটি বেশ কয়েকটি মেশিন নির্দেশাবলীর সাথে জড়িত বেশ কয়েকটি বাইট কোডে সংকলন করতে পারে। উদাহরণস্বরূপঃ যেহেতু পারফরম্যান্স অপ্টিমাইজেশন একটি অত্যন্ত জটিল সমস্যা, তাই সাধারণ অর্থে সি + + এবং জাভার মধ্যে পারফরম্যান্সের পার্থক্য পরিমাপ করা খুব কঠিন, এবং বেশিরভাগ মানদণ্ড অবিশ্বস্ত এবং পক্ষপাতদুষ্ট। ভাষাগুলির বিভিন্ন প্রকৃতির পরিপ্রেক্ষিতে, নির্দিষ্ট গুণগত পার্থক্যও আঁকা কঠিন। সংক্ষেপে, জাভাতে অপ্টিমাইজ করার ক্ষেত্রে সহজাত অদক্ষতা এবং কঠোর সীমাবদ্ধতা রয়েছে, যেহেতু এটি নমনীয় উচ্চ-স্তরের বিমূর্ততার উপর ব্যাপকভাবে নির্ভর করে, তবে, একটি শক্তিশালী জেআইটি সংকলকের ব্যবহার (আধুনিক জেভিএম বাস্তবায়নের মতো) কিছু সমস্যাকে প্রশমিত করতে পারে। যাই হোক না কেন, জাভার অদক্ষতা যদি খুব বেশি হয়, তবে সংকলিত সি বা সি + + কোডটি জে. এন. আই-এর মাধ্যমে জাভা থেকে কল করা যেতে পারে। জাভা ভাষার সহজাত কিছু অদক্ষতার মধ্যে রয়েছে, প্রধানতঃঃ সমস্ত বস্তু স্তূপের উপর বরাদ্দ করা হয়। যদিও 'বাম্প বরাদ্দ' ব্যবহার করে আধুনিক জেভিএমগুলিতে বরাদ্দ অত্যন্ত দ্রুত হয়, যা স্ট্যাক বরাদ্দের মতোই কাজ করে, তবুও আবর্জনা সংগ্রাহকের আহ্বানের কারণে কর্মক্ষমতা নেতিবাচকভাবে প্রভাবিত হতে পারে। আধুনিক জে. আই. টি কম্পাইলারগুলি ওরাকল জে. ডি. কে 6 থেকে স্ট্যাকের উপর কিছু বস্তু বরাদ্দ করার জন্য পালানোর বিশ্লেষণ বা পালানোর সনাক্তকরণের মাধ্যমে এই সমস্যাটিকে কিছুটা প্রশমিত করে। দক্ষ ডাটাবেস সিস্টেম এবং মেসেজিং লাইব্রেরির মতো কার্যকারিতা-সমালোচনামূলক প্রকল্পগুলিকে ম্যানুয়াল রিসোর্স পরিচালনার অ্যাক্সেস পেতে এবং স্ট্যাক বরাদ্দ করতে সক্ষম হতে sun.misc.Unsafe এর মতো অভ্যন্তরীণ অনানুষ্ঠানিক API ব্যবহার করতে হয়েছে; কার্যকরভাবে ছদ্ম-পয়েন্টারগুলি পরিচালনা করে। অনেক রান-টাইম কাস্টিংয়ের প্রয়োজন হয়, এমনকি স্ট্যান্ডার্ড কনটেইনার ব্যবহার করাও পারফরম্যান্স পেনাল্টি প্ররোচিত করে। যাইহোক, এই কাস্টগুলির বেশিরভাগই জে. আই. টি সংকলক দ্বারা স্থিতিশীলভাবে বাদ দেওয়া হয়। নিরাপত্তা গ্যারান্টি একটি রান-টাইম ব্যয়ে আসে। উদাহরণস্বরূপ, সংকলককে কোডে যথাযথ পরিসীমা পরীক্ষা করতে হয়। রেঞ্জ চেকের মাধ্যমে প্রতিটি অ্যারে অ্যাক্সেস রক্ষা করা কার্যকর নয়, তাই বেশিরভাগ জেআইটি সংকলক এগুলি স্থিতিশীলভাবে বা অভ্যন্তরীণ লুপ থেকে সরিয়ে ফেলার চেষ্টা করবে (যদিও সি + +-এর জন্য বেশিরভাগ নেটিভ সংকলকগুলি ঐচ্ছিকভাবে রেঞ্জ-চেকগুলি ব্যবহার করার সময় একই কাজ করবে)। নিম্ন-স্তরের বিবরণে প্রবেশাধিকারের অভাব বিকাশকারীকে প্রোগ্রামের উন্নতি করতে বাধা দেয় যেখানে সংকলক তা করতে অক্ষম। জাভাতে সমস্ত ব্যবহারকারী-সংজ্ঞায়িত প্রকারের জন্য রেফারেন্স-শব্দার্থের বাধ্যতামূলক ব্যবহার প্রচুর পরিমাণে অপ্রয়োজনীয় মেমরি ইনডাইরেকশন (বা জাম্প) প্রবর্তন করতে পারে (যদি না জে. আই. টি কম্পাইলার দ্বারা বাদ দেওয়া হয়) যার ফলে ঘন ঘন ক্যাশে মিস হতে পারে। ক্যাশ থ্র্যাশিং)। উপরন্তু, ক্যাশে-অপ্টিমাইজেশন, সাধারণত ক্যাশে-সচেতন বা ক্যাশে-অপ্রতিরোধ্য ডেটা স্ট্রাকচার এবং অ্যালগরিদমের মাধ্যমে, প্রায়শই কর্মক্ষমতার মাত্রার উন্নতির আদেশের পাশাপাশি সময়-জটিলতার অবনতি এড়াতে পারে যা অনেক ক্যাশে-হতাশাজনক অ্যালগরিদমের বৈশিষ্ট্য এবং তাই অপ্টিমাইজেশনের অন্যতম গুরুত্বপূর্ণ রূপ; জাভাতে বাধ্যতামূলক হিসাবে রেফারেন্স-শব্দার্থবিদ্যা, অনুশীলনে এই ধরনের অপ্টিমাইজেশানগুলি উপলব্ধি করা অসম্ভব করে তোলে (প্রোগ্রামার বা জেআইটি কম্পাইলার উভয়ের দ্বারা)। আবর্জনা সংগ্রহ, স্বয়ংক্রিয় মেমরি ব্যবস্থাপনার এই রূপটি মেমরি ওভারহেড প্রবর্তন করে। যাইহোক, জাভার নকশার বেশ কয়েকটি সুবিধা রয়েছে, কিছু উপলব্ধি করা হয়েছে, কিছু শুধুমাত্র তাত্ত্বিকঃ জাভা আবর্জনা সংগ্রহে মেমরি বরাদ্দের জন্য ম্যালোক/নিউ-এর স্বাভাবিক ব্যবহারের চেয়ে ভাল ক্যাশে সঙ্গতি থাকতে পারে। তা সত্ত্বেও, যুক্তি রয়েছে যে উভয় বরাদ্দকারীই সমানভাবে স্তূপটিকে টুকরো টুকরো করে দেয় এবং কোনওটিই ভাল ক্যাশে এলাকা প্রদর্শন করে না। যাইহোক, সি + +-এ, স্তূপের উপর একক বস্তুর বরাদ্দ বিরল, এবং সাধারণত একটি এস. টি. এল ধারক এবং/অথবা একটি ছোট বস্তু বরাদ্দের মাধ্যমে ব্লকে প্রচুর পরিমাণে একক বস্তু বরাদ্দ করা হয়। রান-টাইম সংকলন সম্ভাব্যভাবে সেই প্ল্যাটফর্ম সম্পর্কে তথ্য ব্যবহার করতে পারে যার উপর কোডটি কার্যকর করা হচ্ছে যাতে কোডটি আরও কার্যকরভাবে উন্নত করা যায়। তবে, বেশিরভাগ অত্যাধুনিক স্থানীয় (সি, সি + +, ইত্যাদি) কম্পাইলারগুলি প্রদত্ত সিস্টেমের সম্পূর্ণ গণনামূলক ক্ষমতা কাজে লাগানোর জন্য একাধিক কোড পাথ তৈরি করে। এছাড়াও, বিপরীত যুক্তি দেওয়া যেতে পারে যে নেটিভ কম্পাইলারগুলি মাল্টি-প্ল্যাটফর্ম জেভিএম ডিস্ট্রিবিউশনের তুলনায় আর্কিটেকচার-নির্দিষ্ট অপ্টিমাইজিং এবং নির্দেশ সেটগুলিকে আরও ভালভাবে কাজে লাগাতে পারে। রান-টাইম কম্পাইলিং একটি স্ট্যাটিক কম্পাইলারের জন্য যতটা সম্ভব তার চেয়ে বেশি আগ্রাসী ভার্চ্যুয়াল ফাংশন ইনলাইনিংয়ের অনুমতি দেয়, কারণ জেআইটি কম্পাইলারের কাছে ভার্চ্যুয়াল কলগুলির সমস্ত সম্ভাব্য লক্ষ্য সম্পর্কে আরও তথ্য থাকে, এমনকি তারা বিভিন্ন গতিশীলভাবে লোড করা মডিউলে থাকলেও। বর্তমানে উপলব্ধ জেভিএম বাস্তবায়নের বেশিরভাগ মনোমর্ফিক, বেশিরভাগ মনোমর্ফিক এবং ডাইমরফিক কলগুলিকে ইনলাইন করতে কোনও সমস্যা নেই এবং জাভা 7-এ যোগ করা সাম্প্রতিক গতিশীল বর্ধিতকরণগুলির জন্য ধন্যবাদ, মেগামর্ফিক কলগুলিকেও ইনলাইন করার জন্য গবেষণা চলছে। ইনলাইনিং লুপ ভেক্টরাইজেশন বা লুপ আনরোলিংয়ের মতো আরও অপ্টিমাইজেশনের অনুমতি দিতে পারে, যার ফলে সামগ্রিক কর্মক্ষমতা ব্যাপক বৃদ্ধি পায়। জাভাতে, থ্রেড সিঙ্ক্রোনাইজিং ভাষাটিতে নির্মিত হয়, তাই জেআইটি সংকলক সম্ভাব্যভাবে, এস্কেপ বিশ্লেষণের মাধ্যমে, এলাইড লকগুলি, সরল মাল্টি-থ্রেডেড কোডের কার্যকারিতা উল্লেখযোগ্যভাবে উন্নত করতে পারে। এছাড়াও, সি + +-এ কিছু কার্যকারিতা সমস্যা দেখা দেয়ঃ পয়েন্টারগুলিকে যে কোনও ঠিকানায় নির্দেশ করার অনুমতি দেওয়া পয়েন্টার আলিয়াজিংয়ের সম্ভাবনার কারণে অপ্টিমাইজ করা কঠিন করে তুলতে পারে। যেহেতু সি + +-এ একই শ্রেণীর টেমপ্লেটের বিভিন্ন তাত্ক্ষণিকতা থেকে উত্পন্ন কোডটি ভাগ করা হয় না (জাভাতে টাইপ-মুছে ফেলা জেনেরিক্সের মতো), তাই টেমপ্লেটগুলির অত্যধিক ব্যবহারের ফলে এক্সিকিউটেবল কোডের আকার (কোড ব্লোট) উল্লেখযোগ্যভাবে বৃদ্ধি পেতে পারে। যাইহোক, কারণ ফাংশন টেমপ্লেটগুলি আক্রমণাত্মকভাবে ইনলাইন করা থাকে, তারা কখনও কখনও কোডের আকার হ্রাস করতে পারে, তবে আরও গুরুত্বপূর্ণভাবে সংকলক দ্বারা আরও আক্রমণাত্মক স্ট্যাটিক বিশ্লেষণ এবং কোড অপ্টিমাইজিংয়ের অনুমতি দেয়, যা প্রায়শই তাদের অ-টেমপ্লেট কোডের চেয়ে আরও দক্ষ করে তোলে। এর বিপরীতে, জাভা জেনেরিকগুলি অপরিহার্যভাবে অ-জেনেরিক কোডের তুলনায় কম দক্ষ। কারণ একটি ঐতিহ্যবাহী সি + + সংকলকের মধ্যে, সি + +-এ কোড তৈরি এবং অপ্টিমাইজ করার পরে ডায়নামিক লিঙ্কিং করা হয়, বিভিন্ন ডায়নামিক মডিউল জুড়ে ফাংশন কলগুলি ইনলাইন করা যায় না। তবে এমএসভিসি এবং ক্ল্যাং + এলএলভিএম-এর মতো আধুনিক সি + + সংকলকগুলি লিঙ্ক-টাইম-কোড-জেনারেশন বিকল্পগুলি সরবরাহ করে যা মডিউলগুলিকে মধ্যবর্তী বিন্যাসে সংকলিত করার অনুমতি দেয় যা চূড়ান্ত লিঙ্ক পর্যায়ে ইনলাইন করার অনুমতি দেয়। সি + + ভাষা আইএসও/আইইসি 14882 দ্বারা সংজ্ঞায়িত করা হয়, যা একটি আইএসও মান, যা আইএসও/আইইসি জেটিসি1/এসসি22/ডব্লিউজি21 কমিটি দ্বারা প্রকাশিত হয়। সি + + 17-এর সর্বশেষ, মান-পরবর্তী খসড়াও পাওয়া যায়। সি + + ভাষা সি + + স্ট্যান্ডার্ড কমিটি নামে একটি উন্মুক্ত পরিচালনা কমিটির মাধ্যমে বিকশিত হয়। কমিটিটি সি + + বার্ন স্ট্রস্ট্রাপের স্রষ্টা, আহ্বায়ক হার্ব সাটার এবং অন্যান্য বিশিষ্ট ব্যক্তিদের নিয়ে গঠিত, যার মধ্যে শিল্প ও ব্যবহারকারী গোষ্ঠীর অনেক প্রতিনিধি (অর্থাৎ, অংশীদার) রয়েছেন। একটি উন্মুক্ত কমিটি হওয়ায়, যে কেউ স্ট্যান্ডার্ড এবং প্রযুক্তিগত নির্দিষ্টকরণের আসন্ন প্রকাশের জন্য যোগদান, অংশগ্রহণ এবং প্রস্তাবগুলিতে অবদান রাখতে পারেন। কমিটি এখন প্রতি কয়েক বছর অন্তর একটি নতুন মান প্রকাশ করার লক্ষ্য নিয়েছে, যদিও অতীতে কঠোর পর্যালোচনা প্রক্রিয়া এবং আলোচনার অর্থ নতুন মান (1998,2003 এবং 2011) প্রকাশের মধ্যে দীর্ঘ বিলম্ব হয়েছে। জাভা ভাষা জাভা ভাষা নির্দিষ্টকরণ দ্বারা সংজ্ঞায়িত করা হয়, একটি বই যা ওরাকল দ্বারা প্রকাশিত হয়। জাভা ভাষা ক্রমাগত জাভা কমিউনিটি প্রসেস নামে একটি প্রক্রিয়ার মাধ্যমে বিকশিত হয় এবং বিশ্বের প্রোগ্রামিং সম্প্রদায়ের প্রতিনিধিত্ব করে একদল মানুষ এবং সংস্থা-জাভা সম্প্রদায়ের সদস্যরা-যারা জনসাধারণের অনুরোধ-জাভা নির্দিষ্টকরণ অনুরোধ-পাঠানোর মাধ্যমে ভাষার উন্নতিতে সক্রিয়ভাবে নিযুক্ত থাকে, যা ভাষায় একীভূত হওয়ার আগে আনুষ্ঠানিক এবং জনসাধারণের পর্যালোচনাগুলি পাস করতে হবে। জাভার জন্য একটি দৃঢ় মানের অভাব এবং এর নির্দিষ্টকরণের কিছুটা বেশি অস্থির প্রকৃতি নতুন ভাষা এবং গ্রন্থাগার বৈশিষ্ট্যগুলির সংযোজনে আরও স্থিতিশীলতা এবং রক্ষণশীলতা চায় এমন অংশীদারদের দ্বারা সমালোচনার একটি ধ্রুবক উৎস হয়ে দাঁড়িয়েছে। বিপরীতে, সি + + কমিটিও ক্রমাগত সমালোচনা পায়, বিপরীত কারণে, অর্থাৎ, খুব কঠোর এবং রক্ষণশীল হওয়া এবং নতুন সংস্করণ প্রকাশ করতে খুব বেশি সময় নেওয়া। ট্রেডমার্ক "সি + +" কোনও সংস্থা বা সংস্থার ট্রেডমার্ক নয় এবং কোনও ব্যক্তির মালিকানাধীন নয়। "জাভা" হল ওরাকল কর্পোরেশনের একটি ট্রেডমার্ক। উদ্ধৃতি উদ্ধৃতি বাহ্যিক লিঙ্ক সি + + এবং জাভা অবজেক্ট ওরিয়েন্টেড মেমরি ম্যানেজমেন্টের মধ্যে পার্থক্যঃ জাভা বনাম সি + + অধ্যায় 2: জাভা সি থেকে কীভাবে আলাদা হয়, ডেভিড ফ্লানাগান জাভা বনাম সি + + রিসোর্স ম্যানেজমেন্ট তুলনা-জাভা বনাম সি পারফরম্যান্সের উদাহরণ সহ বিস্তৃত কাগজ।