Java Stack and Heap: Tutorial Alokasi Memori Java

Apa itu Stack Memory?

Stack di java adalah bagian dari memori yang berisi metode, variabel lokal, dan variabel referensi. Memori tumpukan selalu direferensikan dalam urutan Terakhir-Masuk-Pertama-Keluar. Variabel lokal dibuat di tumpukan.

Apa itu Heap Memory?

Heap adalah bagian memori yang berisi Objek dan mungkin juga berisi variabel referensi. Variabel instance dibuat di heap

Alokasi Memori di Java

Alokasi Memori di Java adalah proses di mana bagian memori virtual disisihkan dalam program untuk menyimpan variabel dan contoh struktur dan kelas. Namun, memori tidak dialokasikan ke objek pada deklarasi tetapi hanya referensi yang dibuat. Untuk alokasi memori objek, metode new () digunakan, sehingga objek selalu mengalokasikan memori di heap.

Alokasi Memori Java dibagi menjadi beberapa bagian berikut:

  1. Tumpukan
  2. Tumpukan
  3. Kode
  4. Statis

Pembagian memori ini diperlukan untuk pengelolaannya yang efektif.

  • Bagian kode berisi bytecode Anda .
  • Bagian Stack memori berisi metode, variabel lokal, dan variabel referensi.
  • Bagian Heap berisi Objek (mungkin juga berisi variabel referensi).
  • Bagian Statis berisi data / metode Statis .

Perbedaan antara Variabel Lokal dan Instans

Variabel instance dideklarasikan di dalam kelas tetapi tidak di dalam metode

class Student{int num; // num is instance variablepublic void showData{}

Variabel lokal dideklarasikan di dalam metode termasuk argumen metode .

public void sum(int a){int x = int a + 3;// a , x are local variables;}

Perbedaan antara Stack dan Heap


Klik di sini jika video tidak dapat diakses

Mari kita ambil contoh untuk memahami ini lebih baik.

Pertimbangkan bahwa metode utama Anda memanggil metode m1

public void m1{int x=20}

Di stack java, bingkai akan dibuat dari metode m1.

Variabel X di m1 juga akan dibuat dalam bingkai untuk m1 di tumpukan. (Lihat gambar di bawah).

Metode m1 memanggil metode m2. Dalam stack java, frame baru dibuat untuk m2 di atas frame m1.

Variabel b dan c juga akan dibuat dalam bingkai m2 secara bertumpuk.

public void m2(int b){boolean c;}

Metode yang sama m2 adalah metode pemanggilan m3. Sekali lagi bingkai m3 dibuat di atas tumpukan (lihat gambar di bawah).

Sekarang katakanlah metode m3 kita membuat objek untuk kelas "Akun," yang memiliki dua variabel contoh int p dan int q.

Account {Int p;Int q;}

Berikut adalah kode untuk metode m3

public void m3(){Account ref = new Account();// more code}

Pernyataan akun baru () akan membuat objek akun di heap.

Variabel referensi "ref" akan dibuat dalam tumpukan java.

Operator assignment akan membuat variabel referensi untuk diarahkan ke objek di Heap.

Setelah metode menyelesaikan eksekusinya. Aliran kendali akan kembali ke metode pemanggilan. Yang dalam hal ini adalah metode m2.

Tumpukan dari metode m3 akan dibuang.

Karena variabel referensi tidak lagi mengarah ke objek di heap, itu akan memenuhi syarat untuk pengumpulan sampah.

Setelah metode m2 menyelesaikan pelaksanaannya. Ini akan dikeluarkan dari tumpukan, dan semua variabelnya akan dihapus dan tidak lagi tersedia untuk digunakan.

Begitu juga untuk metode m1.

Akhirnya, aliran kendali akan kembali ke titik awal program. Yang biasanya, adalah metode "utama".

Bagaimana jika Object memiliki referensi sebagai variabel instannya?

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

Dalam kasus ini, variabel referensi "anak" akan dibuat dalam heap, yang pada gilirannya akan menunjuk ke objeknya, seperti diagram yang ditunjukkan di bawah ini.

Ringkasan:

  • Saat metode dipanggil, bingkai dibuat di atas tumpukan.
  • Setelah metode menyelesaikan eksekusi, aliran kontrol kembali ke metode pemanggilan dan stack frame yang sesuai akan dihapus.
  • Variabel lokal dibuat di tumpukan
  • Variabel instance dibuat di heap & merupakan bagian dari objek miliknya.
  • Variabel referensi dibuat di tumpukan.

Artikel yang menarik...