tgoop.com/javapro_ir/4404
Last Update:
🔹 درک تفاوت Heap و Stack در حافظه جاوا
در زبان جاوا، مدیریت حافظه توسط Java Virtual Machine (JVM) انجام میشود. دو بخش اصلی حافظه که بیشترین اهمیت را در درک رفتار برنامهها دارند عبارتاند از: Heap و Stack. شناخت این دو ناحیه برای بهینهسازی عملکرد و جلوگیری از خطاهای حافظه ضروری است.
حافظه Stack
حافظه Stack برای ذخیرهسازی دادههای موقتی و محلی استفاده میشود:
هر بار که یک متد فراخوانی میشود، یک Stack Frame ایجاد میشود که شامل متغیرهای محلی، آدرس بازگشت و دادههای موقتی است.
دادهها در Stack به صورت LIFO (آخر وارد، اول خارج) مدیریت میشوند.
پس از اتمام اجرای متد، Stack Frame آن به طور خودکار آزاد میشود.
📌 ویژگیها:
سرعت بسیار بالا به دلیل تخصیص و آزادسازی خودکار.
حجم محدود (در صورت پر شدن → StackOverflowError).
حافظه Heap
حافظه Heap برای ذخیرهسازی اشیاء (Objects) استفاده میشود:
تمام اشیاء ایجاد شده با new در Heap قرار میگیرند.
دسترسی به این اشیاء از طریق رفرنسها انجام میشود که خود رفرنس معمولاً در Stack ذخیره میشود.
مدیریت آزادسازی حافظه در Heap بر عهده Garbage Collector است.
📌 ویژگیها:
مناسب برای دادههایی که طول عمرشان بیشتر از یک فراخوانی متد است.
سرعت کمتر نسبت به Stack به دلیل مدیریت پیچیدهتر حافظه.
مثال عملی
public class MemoryExample {
public static void main(String[] args) {
int localVariable = 5; // ذخیره در Stack
Person person = new Person("Ali"); // رفرنس در Stack، شیء در Heap
methodExample();
}
static void methodExample() {
String name = "Sara"; // رشته Immutable، در String Pool (بخشی از Heap)
int number = 42; // در Stack
}
}
class Person {
String name;
Person(String name) {
this.name = name;
}
}
در این مثال:
localVariable و person (به عنوان رفرنس) در Stack ذخیره میشوند.
شیء Person("Ali") در Heap ایجاد میشود.
رشته "Sara" در String Pool ذخیره میشود که بخشی از Heap است.
خطاهای رایج مرتبط با این دو حافظه
1. StackOverflowError:
زمانی که عمق بازگشتی متدها بیش از حد مجاز شود، مانند:
public void recursive() {
recursive();
}
2. OutOfMemoryError: Java heap space:
زمانی که اشیاء زیادی ایجاد شوند و حافظه Heap پر شود.
📌 جمعبندی
Stack: برای دادههای محلی و اجرای متدها، سریع ولی محدود.
Heap: برای اشیاء و دادههای طولانیمدت، انعطافپذیر ولی کندتر.
درک درست این دو فضا به بهینهسازی حافظه و جلوگیری از خطا کمک میکند.
#کاربرـحرفهـای
🆔 @javapro_ir
🆔 @group_javapro
BY برنامه نویسی جاوا | Java
Share with your friend now:
tgoop.com/javapro_ir/4404