Manajemen Memori di Java

Apa itu Memori Tumpukan?

Stack di java adalah bagian 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 Memori Tumpukan?

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

Alokasi Memori di Java

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

Java Alokasi Memori dibagi menjadi beberapa bagian berikut:

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

Pembagian memori ini diperlukan untuk pengelolaannya yang efektif.

  • kode bagian berisi Anda bytecode.
  • Tumpukan bagian memori berisi metode, variabel lokal, dan variabel referensi.
  • tumpukan bagian berisi benda (mungkin juga berisi variabel referensi).
  • Statis bagian berisi Data/metode statis.

Perbedaan antara Variabel Lokal dan Instance

Variabel instance dinyatakan di dalam kelas tetapi tidak di dalam metode

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

Variabel lokal dideklarasikan dalam a metode termasuk metode argumen.

public void sum(int a){

int x = int a +  3;

// a , x are local variables;

}

Perbedaan antara Tumpukan dan Tumpukan

Klik di sini jika video tidak dapat diakses

Mari kita ambil contoh untuk lebih memahaminya. Anggap metode utama Anda memanggil metode m1

public void m1{
int x=20
}

Di tumpukan java, bingkai akan dibuat dari metode m1.

Java Tumpukan dan Tumpukan

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

Java Tumpukan dan Tumpukan

Metode m1 memanggil metode m2. Di tumpukan java, bingkai baru dibuat untuk m2 di atas bingkai m1.

Java Tumpukan dan Tumpukan

Java Tumpukan dan Tumpukan

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

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

Java Tumpukan dan Tumpukan

Metode yang sama m2 memanggil metode m3. Sekali lagi, bingkai m3 dibuat di bagian atas tumpukan (lihat gambar di bawah).

Java Tumpukan dan Tumpukan

Java Tumpukan dan Tumpukan

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

Account {
             Int p;
             Int q;
       }

Berikut adalah kode untuk metode m3

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

Pernyataan new Account() akan membuat objek akun di heap.

Java Tumpukan dan Tumpukan

Variabel referensi “ref” akan dibuat di tumpukan java.

Java Tumpukan dan Tumpukan

Operator penugasan “=" akan membuat variabel referensi menunjuk ke objek di Heap.

Java Tumpukan dan Tumpukan

Setelah metode selesai dieksekusi, aliran kontrol akan kembali ke metode pemanggil. Dalam kasus ini, metode m2.

Java Tumpukan dan Tumpukan

Tumpukan dari metode m3 akan dihapus.

Java Tumpukan dan Tumpukan

Karena variabel referensi tidak lagi menunjuk ke objek di tumpukan, maka memenuhi syarat untuk pengumpulan sampah.

Java Tumpukan dan Tumpukan

Setelah metode m2 selesai dieksekusi, metode tersebut akan dikeluarkan dari tumpukan, dan semua variabelnya akan dihapus dan tidak dapat digunakan lagi.

Demikian pula untuk metode m1.

Pada akhirnya, aliran kontrol 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 hal ini, variabel referensi “anak” akan dibuat di heap, yang selanjutnya akan menunjuk ke objeknya, seperti diagram di bawah ini.

Java Tumpukan dan Tumpukan

Apa yang dimaksud dengan Pengumpulan Sampah Java?

Pengumpulan Sampah di Java adalah proses dimana program melakukan manajemen memori secara otomatis. Pengumpul Sampah (GC) menemukan objek yang tidak terpakai dan menghapusnya untuk mendapatkan kembali memori. Di dalam Java, alokasi memori dinamis objek dicapai menggunakan operator baru yang menggunakan sejumlah memori dan memori tetap dialokasikan hingga ada referensi untuk penggunaan objek tersebut.

Jika tidak ada referensi ke suatu objek, maka objek tersebut dianggap tidak diperlukan lagi, dan memori yang ditempati oleh objek tersebut dapat diperoleh kembali. Tidak ada kebutuhan eksplisit untuk menghancurkan suatu objek sebagai Java menangani de-alokasi secara otomatis.

Teknik yang mencapai hal ini dikenal sebagai Koleksi sampah. Program yang tidak melakukan de-alokasi memori pada akhirnya dapat crash ketika tidak ada lagi memori yang tersisa di sistem untuk dialokasikan. Program-program ini dikatakan sudah ada kebocoran memori. Pengumpulan sampah di Java terjadi secara otomatis selama masa program, menghilangkan kebutuhan untuk membatalkan alokasi memori dan dengan demikian menghindari kebocoran memori.

Dalam bahasa C, merupakan tanggung jawab pemrogram untuk membatalkan alokasi memori yang dialokasikan secara dinamis menggunakan fungsi free(). Di sinilah Java petunjuk manajemen memori.

Catatan: Semua objek dibuat di Heap Section dari memori. Informasi lebih lanjut akan dibahas dalam tutorial berikutnya.

Contoh: Mempelajari Mekanisme Pengumpul Sampah di Java

Langkah 1) Salin kode berikut ke editor.

class Student{
int a;
int b;
  public void setData(int c,int d){
    a=c;
    b=d;
  }
  public void showData(){
    System.out.println("Value of a = "+a);
    System.out.println("Value of b = "+b);
  }
  public static void main(String args[]){
    Student s1 = new Student();
    Student s2 = new Student();
    s1.setData(1,2);
    s2.setData(3,4);
    s1.showData();
    s2.showData();
    //Student s3;
    //s3=s2;
    //s3.showData();
    //s2=null;
    //s3.showData();
    //s3=null;
    //s3.showData();
  }
}

Langkah 2) Simpan, Kompilasi dan Jalankan kodenya. Seperti yang ditunjukkan dalam diagram, dua objek dan dua variabel referensi dibuat.


Mekanisme Pengumpul Sampah

Langkah 3) Batalkan komentar pada baris #20,21,22. Simpan, kompilasi & jalankan kode.

Langkah 4) Seperti yang ditunjukkan pada diagram di bawah, dua variabel referensi menunjuk ke objek yang sama.

Mekanisme Pengumpul Sampah

Langkah 5) Batalkan komentar pada baris # 23 & 24. Kompilasi, Simpan & Jalankan kode

Langkah 6) Seperti yang ditunjukkan pada diagram di bawah, s2 menjadi nol, tetapi s3 masih mengarah ke objek dan tidak memenuhi syarat untuk pengumpulan sampah Java.

Mekanisme Pengumpul Sampah

Langkah 7) Batalkan komentar pada baris #25 & 26. Simpan, Kompilasi & Jalankan Kode

Langkah 8) Pada titik ini tidak ada referensi yang menunjuk ke objek tersebut dan memenuhi syarat untuk pengumpulan sampah. Itu akan dihapus dari memori, dan tidak ada cara untuk mengambilnya kembali.

Pelajari Pengumpul Sampah

Cara menghapus objek di Java?

1) Jika Anda ingin objek Anda memenuhi syarat untuk Pengumpulan Sampah, tetapkan variabel referensinya ke nol.

2) Tipe primitif bukanlah objek. Mereka tidak dapat ditetapkan sebagai nol.

Cara menghapus objek di Java

Ringkasan:

  • Ketika suatu metode dipanggil, sebuah bingkai dibuat di bagian atas tumpukan.
  • Setelah suatu metode menyelesaikan eksekusi, aliran kontrol kembali ke metode pemanggil dan bingkai tumpukan yang sesuai akan dihapus.
  • Variabel lokal dibuat di tumpukan
  • Variabel instan dibuat di heap & merupakan bagian dari objek miliknya.
  • Variabel referensi dibuat di tumpukan.