JAVAPRO_IR Telegram 4404
🔹 درک تفاوت 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
6👍6👾2🎉1💯1



tgoop.com/javapro_ir/4404
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

Hui said the time period and nature of some offences “overlapped” and thus their prison terms could be served concurrently. The judge ordered Ng to be jailed for a total of six years and six months. “Hey degen, are you stressed? Just let it all out,” he wrote, along with a link to join the group. Healing through screaming therapy You can invite up to 200 people from your contacts to join your channel as the next step. Select the users you want to add and click “Invite.” You can skip this step altogether. Step-by-step tutorial on desktop:
from us


Telegram برنامه نویسی جاوا | Java
FROM American