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: |

In the “Bear Market Screaming Therapy Group” on Telegram, members are only allowed to post voice notes of themselves screaming. Anything else will result in an instant ban from the group, which currently has about 75 members. Add up to 50 administrators As of Thursday, the SUCK Channel had 34,146 subscribers, with only one message dated August 28, 2020. It was an announcement stating that police had removed all posts on the channel because its content “contravenes the laws of Hong Kong.” fire bomb molotov November 18 Dylan Hollingsworth yau ma tei As five out of seven counts were serious, Hui sentenced Ng to six years and six months in jail.
from us


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