বর্তমান জেভিএমের দুটি ধরণের সুইচ বাইট কোড রয়েছে: লুকআপসুইচ এবং টেবিলসুইচ।
একটি স্যুইচ স্টেটমেন্টের প্রতিটি ক্ষেত্রে একটি পূর্ণসংখ্যা অফসেট থাকে, যদি এই অফসেটগুলি সামঞ্জস্যপূর্ণ হয় (বা বেশিরভাগ বড় ফাঁক ছাড়াই বেশিরভাগ স্থানে থাকে) (কেস 0: কেস 1: কেস 2, ইত্যাদি), তবে টেবিলসুইচ ব্যবহার করা হবে।
যদি অফসেটগুলি বড় ফাঁক দিয়ে ছড়িয়ে পড়ে (কেস 0: কেস 400: কেস 93748 :, ইত্যাদি), তবে লুকআপসুইচ ব্যবহৃত হয়।
সংক্ষেপে, পার্থক্যটি হ'ল টেবিলসুইচটি স্থির সময়ে করা হয় কারণ সম্ভাব্য মানের সীমার মধ্যে থাকা প্রতিটি মান একটি নির্দিষ্ট বাইট-কোড অফসেট দেওয়া হয় given সুতরাং, আপনি যখন স্টেটমেন্টটিকে 3 এর অফসেট দেবেন, তখন সঠিক শাখাটি খুঁজে পেতে 3 এর আগে লাফিয়ে উঠতে জানে।
সঠিক কোড শাখার সন্ধান করতে লুকআপ সুইচ একটি বাইনারি অনুসন্ধান ব্যবহার করে। এটি ও (লগ এন) সময়ে চলে যা এখনও ভাল তবে সেরা নয়।
এ সম্পর্কিত আরও তথ্যের জন্য, এখানে দেখুন: জেভিএমের লুকআপসুইচ এবং টেবিল সুইচ এর মধ্যে পার্থক্য?
এখন পর্যন্ত কোনটি দ্রুততম, এই পদ্ধতির ব্যবহার করুন: আপনার যদি 3 বা ততোধিক ঘটনা ঘটে থাকে যার মান ক্রমাগত বা প্রায় একটানা, সর্বদা একটি স্যুইচ ব্যবহার করুন।
আপনার যদি 2 টি মামলা থাকে তবে একটি বিবৃতি ব্যবহার করুন।
অন্য যে কোনও পরিস্থিতির জন্য, স্যুইচটি সম্ভবত দ্রুততর হয় তবে এটির গ্যারান্টি নেই, যেহেতু লুকআপসুইচ-এ বাইনারি-অনুসন্ধান কোনও খারাপ দৃশ্যের শিকার হতে পারে।
এছাড়াও, মনে রাখবেন যে জেভিএম জেআইটি অপ্টিমাইজেশানগুলি চালাবে যদি বিবৃতিগুলি কোডের মধ্যে হটেস্ট শাখাটিকে প্রথমে রাখার চেষ্টা করবে। একে বলা হয় "ব্রাঞ্চ প্রেডিকশন"। এটি সম্পর্কে আরও তথ্যের জন্য, এখানে দেখুন: https://dzone.com/articles/branch-prediction-in-java
আপনার অভিজ্ঞতা বিভিন্ন হতে পারে। আমি জানি না যে জেভিএম লুকআপসুইচটিতে অনুরূপ অপটিমাইজেশন চালায় না, তবে আমি জেআইটি অপ্টিমাইজেশানগুলিতে বিশ্বাস রাখতে শিখেছি এবং সংকলককে আউটস্মার্ট করার চেষ্টা করব না।