Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Java Stack vs. Heap: Panduan Praktis Alokasi Memori

Apa Itu Memori Stack?

Di Java, stack adalah wilayah memori berseberang yang menampung frame pemanggilan metode, variabel lokal, dan variabel referensi. Setiap kali metode dipanggil, frame baru ditumpuk ke stack. Memori stack diorganisir dengan pola Last-In, First-Out (LIFO), artinya panggilan terbaru adalah yang pertama dihapus saat metode kembali.

Apa Itu Memori Heap?

Heap adalah area tempat objek Java dibuat. Ini menampung semua instance kelas dan, secara opsional, variabel referensi yang menunjuk ke objek-objek tersebut. Berbeda dengan stack, heap tidak terikat pada siklus hidup satu pemanggilan metode, memungkinkan objek bertahan di luar cakupan tempat mereka dibuat.

Alokasi Memori di Java

Alokasi memori di Java merujuk pada proses menyediakan memori virtual untuk data program. Variabel tidak dialokasikan saat deklarasi; sebagai gantinya, referensi dibuat. Saat operator new digunakan, JVM mengalokasikan ruang pada heap untuk objek.

Java membagi memori menjadi empat bagian yang berbeda untuk pengelolaan yang efisien:

  1. Heap
  2. Stack
  3. Code (Bytecode)
  4. Static (Data Kelas)

Variabel Lokal vs. Variabel Instance

Variabel instance dideklarasikan dalam kelas tetapi di luar metode apa pun:

class Student { int num; // variabel instance public void showData() {} }

Variabel lokal dideklarasikan di dalam metode (atau sebagai parameter metode):

public void sum(int a) { int x = a + 3; // a dan x adalah variabel lokal }

Stack vs. Heap dalam Aksi

Mari kita melalui contoh untuk mengilustrasikan bagaimana stack dan heap berinteraksi selama pemanggilan metode.

Asumsikan metode main memanggil m1():

public void m1() { int x = 20; }

Frame untuk m1 ditumpuk ke stack. Variabel lokal x disimpan dalam frame ini.

Java Stack vs. Heap: Panduan Praktis Alokasi Memori

Saat m1 memanggil m2(int b), frame baru ditambahkan di atas frame m1:

public void m2(int b) { boolean c; }
Java Stack vs. Heap: Panduan Praktis Alokasi Memori

Demikian pula, m2 memanggil m3(), menciptakan frame lain:

Java Stack vs. Heap: Panduan Praktis Alokasi Memori

Di dalam m3, objek Account diinstantiasi pada heap, sementara referensinya ref tinggal pada stack:

class Account { int p; int q; } public void m3() { Account ref = new Account(); // kode tambahan }
Java Stack vs. Heap: Panduan Praktis Alokasi Memori

Variabel referensi ref dibuat dalam frame stack m3 dan menunjuk ke objek Account yang dialokasikan heap.

Java Stack vs. Heap: Panduan Praktis Alokasi Memori

Saat m3 selesai, frame stack-nya dihapus, meninggalkan objek Account tanpa referensi apa pun. Objek menjadi layak untuk garbage collection.

Java Stack vs. Heap: Panduan Praktis Alokasi Memori

Proses yang sama berulang untuk m2 dan m1, mengembalikan kontrol ke main.

Referensi Objek sebagai Variabel Instance

Pertimbangkan kelas A yang menyimpan referensi ke instance dari B:

public static void main(String[] args) { A parent = new A(); // kode tambahan } class A { B child = new B(); int e; } class B { int c; int d; }

Di sini, referensi child disimpan pada heap sebagai bagian dari objek A, menunjuk ke instance B itu sendiri.

Java Stack vs. Heap: Panduan Praktis Alokasi Memori

Poin Utama

java

  1. Variabel dan Literal Java: Panduan Lengkap
  2. Kelas dan Objek Java: Panduan Praktis
  3. Kelas dan Metode Abstrak Java: Panduan Lengkap
  4. Menguasai Kelas Bersarang dan Kelas Dalam Java: Jenis, Contoh, dan Praktik Terbaik
  5. Java throw vs throws: Menguasai Penanganan Pengecualian dengan Contoh Praktis
  6. Jenis Anotasi Java: Panduan Lengkap tentang Anotasi Terdefinisi, Kustom, dan Meta
  7. Mahir Java Autoboxing dan Unboxing: Contoh Praktis dan Best Practices
  8. Menguasai Penggantian String Java: replace(), replaceAll(), dan replaceFirst() Dijelaskan
  9. Pengoverridan Metode Java: Menyesuaikan Perilaku Superkelas
  10. Peningkatan Java 10: Alokasi Heap pada NV-DIMM dengan -XX:AllocateHeapAt