ক। জাভার গতি আজ সি ++ এর সাথে কীভাবে তুলনা করে?
পরিমাপ করা কঠিন। এটি লক্ষণীয় যে কোনও বাস্তবায়নের গতির একটি বড় অংশ, এটি মেমরি বরাদ্দকারী, জাভা এবং সি ++ এর মধ্যে খুব আলাদা অ্যালগরিদম। সংগ্রাহকের অ-বিচ্ছিন্নতাবাদী প্রকৃতি সি ++ এর ডিটারমিনিস্টিক মেমরি পরিচালনার তুলনায় অর্থবহ পারফরম্যান্স ডেটা অর্জন করা অত্যন্ত কঠিন করে তোলে, কারণ সংগ্রাহক কোন রাজ্যে আছেন তা আপনি কখনই নিশ্চিত করতে পারবেন না means এর অর্থ এটি একটি বেঞ্চমার্ক লিখতে খুব কঠিন এটি অর্থপূর্ণভাবে তাদের তুলনা করতে পারে। কিছু মেমরি বরাদ্দকরণের নিদর্শনগুলি একটি জিসি দিয়ে অনেক দ্রুত সঞ্চালিত হয়, কিছু দেশীয় বরাদ্দকারী দিয়ে খুব দ্রুত চালিত হয়।
তবে আমি যা বলব তা হ'ল জাভা জিসিকে প্রতিটি পরিস্থিতিতে দ্রুত চালাতে হবে । নেটিভ বরাদ্দকারী, তবে এটি আরও উপযুক্ত যেটির জন্য সেটআপ করা যেতে পারে। একটি সমমানের তুলনায় সি # কেন (আমার মেশিনে 0.45 এমএস) এক্সিকিউট করতে পারে সে সম্পর্কে আমি সম্প্রতি এসও তে একটি প্রশ্ন ফিল্ড করেছি whyDictionary
std::unordered_map
যা (আমার মেশিনে 10 মিমি) চালিত হয়েছিল। যাইহোক, আরও উপযুক্তগুলির জন্য কেবল বরাদ্দকারী এবং হ্যাশার অদলবদল করে, আমি মৃত্যুদন্ড কার্যকর করার সময়টি আমার মেশিনে 0.34ms এ কেটে ফেলেছি - মূল রানটাইমটির ত্রিশতম। আপনি কখনই জাভা দিয়ে এই জাতীয় কাস্টম অপ্টিমাইজেশান সম্পাদন করার আশা করতে পারেন নি। এটি যেখানে প্রকৃত পার্থক্য আনতে পারে তার একটি দুর্দান্ত উদাহরণ থ্রেডিং। টিবিবির মতো নেটিভ থ্রেড লাইব্রেরিগুলি থ্রেড-ক্যাচিং বরাদ্দ সরবরাহ করে যা প্রচুর থ্রেডে অনেক বরাদ্দ নিয়ে কাজ করার সময় প্রচলিত alloc
এখন, অনেকে জেআইটির উন্নতি এবং কীভাবে জেআইটির আরও তথ্য রয়েছে সে সম্পর্কে কথা বলবেন। অবশ্যই, এটি সত্য। তবে এটি এখনও সি -++ সংকলকটি কীভাবে টানতে পারে তার কাছাকাছি অবস্থানের কাছাকাছিও নয় - কারণ চূড়ান্ত প্রোগ্রামের রান-টাইমের দৃষ্টিকোণ থেকে সংকলকটি তুলনামূলকভাবে অসীম সময় এবং স্থান চালাতে পারে। প্রতিটি প্রোগ্রাম এবং প্রতিটি বাইট যা জেআইটি আপনার প্রোগ্রামটিকে সর্বোত্তম করার জন্য কীভাবে ব্যয় করে তা এমন একটি চক্র যা আপনার প্রোগ্রামটি কার্যকর করতে ব্যয় করে না এবং এটি নিজের স্মৃতির প্রয়োজনের জন্য ব্যবহার করতে পারে না।
এছাড়াও, সবসময় এমন সময় আসবে যেখানে সংকলক এবং জেআইটি অপ্টিমাইজেশান নির্দিষ্ট অপ্টিমাইজেশানগুলি প্রমাণ করতে পারে না especially বিশেষত অব্যাহতি বিশ্লেষণের মতো জিনিসগুলির ক্ষেত্রে। সি ++ সালে তৎকালীন যেমন মান স্ট্যাক হয় যাহাই হউক না কেন , কম্পাইলার তা আদায় করতে দরকার নেই। এ ছাড়াও সাধারণ জিনিস রয়েছে, যেমন স্বচ্ছ স্মৃতি। আপনি যদি C ++ এ অ্যারে বরাদ্দ করেন তবে আপনি একটি একক, সংলগ্ন অ্যারে বরাদ্দ করেন। আপনি যদি জাভাতে কোনও অ্যারের বরাদ্দ করেন তবে এটি মোটেও সুস্পষ্ট নয়, কারণ অ্যারেটি কেবলমাত্র পয়েন্টারগুলিতে পূর্ণ যা কোনও জায়গায় নির্দেশ করতে পারে। এটি কেবল ডাবল ইন্ডিয়ারেশনের জন্য একটি মেমরি এবং সময় ওভারহেড নয়, পাশাপাশি ক্যাশে ওভারহেডগুলি। এই জাতীয় জিনিসটি যেখানে জাভা ভাষার শব্দার্থবিজ্ঞানগুলি কেবল এটির সমতুল্য সি ++ কোডের চেয়ে ধীর হতে হবে তা প্রয়োগ করে।
শেষ পর্যন্ত, আমার ব্যক্তিগত অভিজ্ঞতাটি হ'ল জাভা গড়ে সি ++ এর প্রায় অর্ধেক গতি হতে পারে। তবে, মূলত বিভিন্ন অ্যালগরিদমের সাথে জড়িত থাকার কারণে, চূড়ান্তভাবে বিস্তৃত বেনমার্ক স্যুট ছাড়াই কোনও পারফরম্যান্সের বিবৃতি ব্যাক আপ করার বাস্তব উপায় নেই।
B ইংরেজী বর্ণমালার দ্বিতীয় অক্ষর. জাভা ব্যবহার করে কি আধুনিক এএএ শিরোনাম তৈরি করা সম্ভব হবে?
আমি ধরে নিয়েছি যে আপনি এখানে "গেম" বলতে চাইছেন এবং এখানে কোনও সুযোগ নেই। প্রথমত, আপনাকে প্রায় সমস্ত বিদ্যমান লাইব্রেরি এবং অবকাঠামোগত লক্ষ্য সি ++ হিসাবে নিজেকে স্ক্র্যাচ থেকে লিখতে হবে। যদিও প্রতি সেটিকে এটি অসম্ভব করে তুলছে না, এটি অবশ্যই অনর্থক পক্ষে দৃly়ভাবে অবদান রাখতে পারে। দ্বিতীয়ত, এমনকি সি ++ ইঞ্জিনগুলি বিদ্যমান কনসোলগুলির ক্ষুদ্র মেমরির সীমাবদ্ধতায় খুব কমই ফিট করতে পারে- যদি জেভিএম এমনকি সেই কনসোলগুলির জন্য উপস্থিত থাকে- এবং পিসি গেমাররা তাদের স্মৃতির জন্য আরও কিছুটা আশা করে। পারফরম্যান্ট এএএ গেমস তৈরি করা সি ++ তে যথেষ্ট শক্ত, আমি জাভাতে এটি কীভাবে অর্জন করা যায় তা দেখছি না। সঙ্কলিত ভাষায় উল্লেখযোগ্য সময় ব্যয় করে কেউ কখনও এএএ গেমটি লিখেনি। এর চেয়ে বড় বিষয় এটি কেবল চূড়ান্ত ত্রুটি-প্রবণ হবে। উদাহরণস্বরূপ, জিপিইউ রিসোর্সগুলি- এবং জাভাতে, আপনি যখন ডিল করেন তখন নির্ধারিত ধ্বংসগুলি প্রয়োজনীয় '
গ। কোন কোন ক্ষেত্রে জাভা সি ++ এর চেয়ে ধীরে ধীরে ধীরে ধীরে? (যেমন সংখ্যা-ক্রাঞ্চিং, গ্রাফিক্স বা কেবল চারদিকে)
আমি অবশ্যই চারিদিকে যেতে চাই। সমস্ত জাভা অবজেক্টের প্রয়োগ-রেফারেন্স প্রকৃতির অর্থ জাভাতে সি ++ এর চেয়ে অনেক বেশি ইন্ডিয়ারেশন এবং রেফারেন্স রয়েছে an উদাহরণটি আমি অ্যারে দিয়ে আগে দিয়েছিলাম, তবে সমস্ত সদস্যের অবজেক্টগুলিতেও প্রযোজ্য, উদাহরণস্বরূপ। যেখানে সি ++ সংকলক স্থির সময়ে কোনও সদস্যের পরিবর্তনশীল সন্ধান করতে পারে, একটি জাভা রান-টাইমে অন্য পয়েন্টারটি অনুসরণ করতে হবে। আপনি যত বেশি অ্যাক্সেস করবেন, ধীরে ধীরে এটি পেতে চলেছে, এবং এটি সম্পর্কে জেআইটি কিছুই করতে পারে না।
যেখানে সি ++ প্রায়শই তাত্ক্ষণিকভাবে মেমরির একটি অংশটি বিনামূল্যে এবং পুনরায় ব্যবহার করতে পারে, জাভাতে আপনাকে সংগ্রহের জন্য অপেক্ষা করতে হবে এবং আমি আশা করি যে টুকরোটি ক্যাশে ছাড়েনি, এবং অন্তর্নিহিতভাবে আরও মেমরির প্রয়োজন হ'ল মানে নিম্ন ক্যাশে এবং পেজিং কর্মক্ষমতা। তারপরে বক্সিং এবং আনবক্সিংয়ের মতো জিনিসগুলির জন্য শব্দার্থবিজ্ঞানের দিকে নজর দিন। জাভাতে, আপনি যদি কোনও ইনট রেফারেন্স করতে চান, আপনাকে এটি গতিশীলভাবে বরাদ্দ করতে হবে। এটি সি ++ শব্দার্থবিজ্ঞানের তুলনায় অন্তর্নিহিত বর্জ্য।
তাহলে আপনার জেনেরিক সমস্যা আছে have জাভাতে, আপনি কেবল রানটাইম উত্তরাধিকারের মাধ্যমে জেনেরিক অবজেক্টগুলিতে পরিচালনা করতে পারেন। সি ++ তে টেমপ্লেটগুলির আক্ষরিক অর্থে শূন্য ওভারহেড রয়েছে - জাভা কিছু মিলছে না। এর অর্থ জাভাতে সমস্ত জেনেরিক কোড সি ++ এর জেনেরিক সমতুল্যের চেয়ে সহজাতভাবে ধীর হয়।
এবং তারপরে আপনি অনির্ধারিত আচরণে চলে আসুন। প্রত্যেকেরই এটি ঘৃণা করে যখন তাদের প্রোগ্রামটি ইউবি প্রদর্শন করে, এবং প্রত্যেকেই ইচ্ছা করে যে এটির অস্তিত্ব নেই। যাইহোক, ইউবি মৌলিকভাবে জাভাতে কখনও অস্তিত্ব থাকতে পারে না এমন অপ্টিমাইজেশন সক্ষম করে। ইউবির উপর ভিত্তি করে অনুকূলিতকরণগুলি বর্ণনা করে এই পোস্টটি একবার দেখুন । আচরণকে সংজ্ঞায়িত না করা মানে এই যে বাস্তবায়নগুলি আরও অনুকূলিতকরণ করতে পারে এবং সি ++ এ অপরিবর্তিত তবে জাভাতে সংজ্ঞায়িত শর্তগুলির জন্য যাচাই করার জন্য প্রয়োজনীয় কোডটি হ্রাস করতে পারে।
মূলত, জাভা এর শব্দার্থবিজ্ঞান নির্দেশ করে যে এটি সি ++ এর চেয়ে ধীর ভাষা।
জাভা এখন একটি সংকলিত ভাষা বা ব্যাখ্যা করা ভাষা হিসাবে বিবেচনা করা হয়?
এটি প্রকৃতপক্ষে groups গোষ্ঠীর কোনওটির সাথেই খাপ খায় না। আমি বলব যে পরিচালিতটি সত্যই এটির নিজস্ব একটি পৃথক বিভাগ, যদিও আমি এটি বলতে চাই এটি একটি সংকলিত ভাষার চেয়ে স্পষ্টতই একটি অনুবাদিত ভাষার মতো। আরও গুরুত্বপূর্ণ বিষয় হল, সেখানে কেবল দুটি প্রধান পরিচালিত সিস্টেম, জেভিএম এবং সিএলআর রয়েছে এবং আপনি যখন "পরিচালিত" বলবেন তখন এটি যথেষ্ট স্পষ্ট।
প্রথম থেকেই জাভাতে কিছু প্রধান ত্রুটিগুলি সমাধান করা হয়েছে?
স্বয়ংক্রিয় বক্সিং এবং আনবক্সিংই আমি জানি। জেনেরিকগুলি কিছু সমস্যা সমাধান করে তবে অনেকের থেকে দূরে।
জাভা এর কয়েকটি বড় ত্রুটিগুলি কী কী যা এখনও সমাধান করা যায়নি?
তাদের জেনেরিকগুলি খুব, খুব দুর্বল। সি # এর জেনেরিকগুলি যথেষ্ট শক্তিশালী - যদিও অবশ্যই, উভয়ই বেশ কয়েকটি টেমপ্লেট নয়। নির্বিচারবাদী ধ্বংস আরেকটি বড় অভাব। ল্যাম্বদা / বন্ধের যে কোনও রূপই একটি বড় সমস্যা- আপনি জাভাতে কোনও কার্যকরী এপিআই ভুলে যেতে পারেন। এবং অবশ্যই অবশ্যই সেই ক্ষেত্রগুলির জন্য সবসময়ই পারফরম্যান্সের সমস্যা রয়েছে।