জোশুয়া ব্লচের কার্যকর জাভাতে , আইটেম 5: "অপ্রয়োজনীয় জিনিস তৈরি করা থেকে বিরত থাকুন", তিনি নিম্নলিখিত কোড উদাহরণ পোস্ট করেছেন:
public static void main(String[] args) {
Long sum = 0L; // uses Long, not long
for (long i = 0; i <= Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum);
}
এবং এটি চালাতে 43 সেকেন্ড সময় নেয়। আদিম অঞ্চলে লম্বা সময় নিলে তা 6.8 সেকেন্ডে নেমে আসে ... যদি এটি কোনও ইঙ্গিত থাকে তবে কেন আমরা আদিম ব্যবহার করি।
দেশীয় মান সমতার অভাবও একটি উদ্বেগের বিষয় ( .equals()
তুলনায় মোটামুটি ভার্জোজ ==
)
বিসিকলপের জন্য:
class Biziclop {
public static void main(String[] args) {
System.out.println(new Integer(5) == new Integer(5));
System.out.println(new Integer(500) == new Integer(500));
System.out.println(Integer.valueOf(5) == Integer.valueOf(5));
System.out.println(Integer.valueOf(500) == Integer.valueOf(500));
}
}
ফলাফল স্বরূপ:
false
false
true
false
সম্পাদনা কেন (3) true
এবং (4) ফিরে আসে false
?
কারণ এগুলি দুটি ভিন্ন বস্তু। 256 পূর্ণসংখ্যার শূন্যের নিকটতম [-128; 127] কে জেভিএম দ্বারা ক্যাশে করা হয়, সুতরাং তারা তাদের জন্য একই জিনিসটি ফেরত দেয়। এই ব্যাপ্তির বাইরে, যদিও এগুলি ক্যাশে করা হয় না, তাই একটি নতুন অবজেক্ট তৈরি হয়। জিনিসগুলিকে আরও জটিল করার জন্য, জেএলএস কমপক্ষে 256 ফ্লাইটওয়েট ক্যাশে করার দাবি করেছে। জেভিএম বাস্তবায়নকারীরা যদি তারা চান তবে আরও যোগ করতে পারে, যার অর্থ এটি এমন একটি সিস্টেমে চলতে পারে যেখানে নিকটতম 1024 ক্যাশে করা হয়েছে এবং সমস্তগুলি সত্য ফিরে আসে ... # অগওয়ার্ড