String Pool বা String Intern Pool হল একটি বিশেষ ধরনের ক্যাশ (cache) যা Java-তে String অবজেক্টগুলি পুনঃব্যবহার করার জন্য ব্যবহৃত হয়। এটি মূলত Java Virtual Machine (JVM) এর একটি অংশ, যেখানে String অবজেক্টগুলি ক্যাশে সংরক্ষণ করা হয়, যাতে একাধিক বার একই মানের স্ট্রিং তৈরি করতে না হয় এবং মেমরি ব্যবস্থাপনা উন্নত হয়।
String Pool এর কাজের পদ্ধতি:
Java তে String ক্লাসের অবজেক্টগুলো একটি বিশেষ পুলে সংরক্ষিত থাকে, যেখানে একই মানের স্ট্রিং একবারেই রাখা হয়। অর্থাৎ, যদি আপনি একই মানের দুটি স্ট্রিং তৈরি করেন, তাহলে শুধুমাত্র একটি অবজেক্ট মেমরিতে থাকবে এবং একাধিক রেফারেন্স সেই একই অবজেক্টের দিকে ইঙ্গিত করবে। এটি মেমরি ব্যবস্থাপনাকে আরও দক্ষ এবং দ্রুত করে তোলে।
String Pool এর বৈশিষ্ট্য:
- String Interning: যখন আপনি একটি স্ট্রিং লিখেন, যেমন
"Hello", তখন Java ঐ স্ট্রিংটি String Pool এ সংরক্ষণ করে যদি এটি আগে থেকেই সেখানে না থাকে। পরবর্তীতে যদি আপনি আবার"Hello"স্ট্রিংটি ব্যবহার করেন, তাহলে নতুন একটি অবজেক্ট তৈরি না করে পুলে থাকা সেই একই অবজেক্টটি ব্যবহার করা হয়। - String Literal: String Pool শুধুমাত্র স্ট্রিং লিটারেল (যেমন
"Hello") এর জন্য কাজ করে। স্ট্রিংকে নতুন করে তৈরি করলে (যেমনnew String("Hello")), এটি String Pool এ যাবে না, বরং এটি একটি নতুন অবজেক্ট তৈরি করবে।
String Pool এর উদাহরণ:
public class StringPoolExample {
public static void main(String[] args) {
String s1 = "Hello"; // স্ট্রিং লিটারেল
String s2 = "Hello"; // একই স্ট্রিং লিটারেল
// String Pool এ একটি অবজেক্ট থাকবে
System.out.println(s1 == s2); // Output: true (কারণ তারা একই অবজেক্ট)
String s3 = new String("Hello"); // new স্ট্রিং অবজেক্ট
System.out.println(s1 == s3); // Output: false (কারণ এটি আলাদা অবজেক্ট)
}
}
আউটপুট:
true
false
এখানে, s1 এবং s2 একই অবজেক্টের দিকে নির্দেশ করছে, কারণ তারা String Pool থেকে নেওয়া হয়েছে। তবে, s3 হল নতুন একটি অবজেক্ট যা String Pool এর বাইরে তৈরি হয়েছে, তাই s1 == s3 ফলস্বরূপ false হবে।
String Pool এর সুবিধা:
- মেমরি সাশ্রয়ী: String Pool একই মানের স্ট্রিং বারবার তৈরি না করে, একটি অবজেক্টই পুনরায় ব্যবহার করতে সহায়তা করে, যা মেমরি সাশ্রয়ী।
- পারফরম্যান্স বৃদ্ধি: পুনরাবৃত্তি স্ট্রিং তৈরি না করে, একই অবজেক্ট ব্যবহার করা পারফরম্যান্স উন্নত করে, কারণ নতুন অবজেক্ট তৈরি করার সময়ের পরিবর্তে পুরোনো অবজেক্ট ব্যবহার করা হয়।
- ইক্যুইটি চেক:
==অপারেটর দিয়ে স্ট্রিংয়ের সমতা পরীক্ষা করতে, আপনি দেখতে পাবেন যে একই স্ট্রিং মানের দুটি স্ট্রিং একই অবজেক্টের দিকে নির্দেশ করছে। এটি স্ট্রিং কম্পেয়ার করার একটি সহজ উপায়।
String Pool এর সীমাবদ্ধতা:
- String Pool শুধুমাত্র লিটারেল স্ট্রিংয়ের জন্য কাজ করে:
new String("example")এই রকম স্ট্রিংগুলো String Pool এ যোগ হয় না, কারণ এটি নতুন অবজেক্ট তৈরি করে। তাইnew String("example") == "example"ফলস্বরূপfalseহবে। - Memory Management: স্ট্রিং পুলে অনেক স্ট্রিং থাকতে পারে এবং এই পুলে মেমরি ব্যবস্থাপনা কিছুটা জটিল হতে পারে, কারণ এটি JVM এর মধ্যে আলাদা স্থান ব্যবহার করে।
Java তে String Pool হল একটি গুরুত্বপূর্ণ কৌশল যা স্ট্রিং লিটারেল পুনঃব্যবহার করতে ব্যবহৃত হয়, ফলে মেমরি সাশ্রয়ী এবং পারফরম্যান্স উন্নত হয়। এটি শুধুমাত্র স্ট্রিং লিটারেল স্ট্রিংয়ের জন্য কাজ করে, এবং নতুন স্ট্রিং অবজেক্ট তৈরি করার ক্ষেত্রে এটি কাজ করে না।
Read more