Java Developer | digipay
Integer Pool vs String Pool in Java
همه چی در مورد stringPool و IntegerPool (یعنی هرچی من بلد بودم :) ) :

در این مقاله فرض میکنیم که شما اطلاعات حدودی از Java Collections دارید.
این سلسله مقالات که برای تکمیل مقاله Java Collections - Everything You MUST Know نوشته شده برای بهبود و درک بهتر collectionها و مواردی که به طور روزمره دارید استفاده میکنید نوشته شده لطفا تمام این دسته بندی رو برای درک بهتر مطالعه کنید .
StringBuilder vs StringBuffer vs String
در جاوا، برای بهینه سازی مصرف حافظه و افزایش سرعت اجرای برنامه، از مکانیزمی به نام Pooling استفاده میشود. این مکانیزم به این صورت عمل میکند که اشیاء تکراری به جای ایجاد مجدد، به یک نسخه مشترک اشاره میکنند. در این بین، دو نوع Pool بسیار مهم به نامهای String Pool و Integer Pool وجود دارند.
String Pool
- تعریف: String Pool یک ناحیه خاص از حافظه Heap است که برای ذخیره رشتههای لیترالی استفاده میشود. هنگامی که یک رشته لیترال در کد شما ایجاد میشود، ابتدا در String Pool جستجو میشود. اگر رشتهای با همان مقدار وجود داشته باشد، به جای ایجاد یک رشته جدید، به همان رشته موجود اشاره میشود.
- هدف: صرفهجویی در حافظه: از ایجاد نسخههای تکراری از رشتهها جلوگیری میکند. افزایش سرعت: مقایسه رشتهها سریعتر انجام میشود زیرا نیازی به مقایسه کاراکتر به کاراکتر نیست.
- نحوه کار:هنگامی که یک رشته لیترال ایجاد میشود، ابتدا در String Pool جستجو میشود. اگر رشته وجود داشته باشد، ارجاعی به آن به متغیر اختصاص داده میشود. اگر رشته وجود نداشته باشد، در String Pool ایجاد شده و ارجاعی به آن به متغیر اختصاص داده میشود.
Integer Pool
- تعریف: Integer Pool نیز مشابه String Pool عمل میکند، اما به جای رشتهها، اعداد صحیح را ذخیره میکند. البته، برخلاف String Pool، Integer Pool محدود به یک بازه خاصی از اعداد است.
- هدف: صرفهجویی در حافظه: از ایجاد اشیاء Integer جدید برای اعداد صحیح متداول جلوگیری میکند. افزایش سرعت: مقایسه اعداد صحیح سریعتر انجام میشود.
- محدودیت:معمولاً اعداد صحیح بین -128 تا 127 در Integer Pool ذخیره میشوند. برای اعداد خارج از این بازه، یک شیء Integer جدید ایجاد میشود.

مثال:
String s1 = "سلام"
String s2 = "سلام"
// توی این حالت یدونه سلام جدید علاوه بر سلام قبلی ساخته میشود ، به شکل اول مقاله دقت کنید
String h = new String("سلام");
System.out.println(s1 == s2); // true
System.out.println(s1 == h); // false
Integer i1 = 100;
Integer i2 = 100;
System.out.println(i1 == i2); // true (اگر در محدوده Integer Pool باشد)
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4); // false (خارج از محدوده Integer Pool)نکات مهم
- String Pool
تغییرناپذیر است: رشتههای موجود در String Pool تغییرناپذیر هستند. هرگونه تغییری در یک رشته باعث ایجاد یک رشته جدید میشود.
- Integer Pool
ممکن است در پیادهسازیهای مختلف جاوا متفاوت باشد: محدوده اعداد ذخیره شده در Integer Pool ممکن است در پیادهسازیهای مختلف جاوا متفاوت باشد.
استفاده از valueOf(): برای ایجاد اشیاء Integer، بهتر است از متد valueOf() کلاس Integer استفاده کنید. این متد ابتدا در Integer Pool جستجو میکند و در صورت وجود، به همان شیء موجود اشاره میکند.
نتیجهگیری
در آخر بگیم که String Pool و Integer Pool دو مکانیزم مهم در جاوا هستند که به بهینهسازی مصرف حافظه و افزایش سرعت اجرای برنامه کمک میکنند. درک این مفاهیم برای برنامهنویسان جاوا بسیار مهم است تا بتوانند کدهای کارآمدتری بنویسند.
منتظر نگاه های زیباتون هستم .
موفق و پیروز باشید.
مطلبی دیگر از این انتشارات
Java Collections - Everything You MUST Know
مطلبی دیگر از این انتشارات
How to do logging in Spring Boot?
مطلبی دیگر از این انتشارات
Heap and Stack in Java