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

Java Stack and Heap:Tutorial Alokasi Memori Java

Apa itu Memori Tumpukan?

Stack di java adalah bagian dari memori yang berisi metode, variabel lokal, dan variabel referensi. Memori tumpukan selalu direferensikan dalam urutan Last-In-First-Out. Variabel lokal dibuat di tumpukan.

Apa itu Memori Heap?

Heap adalah bagian dari memori yang berisi Objek dan mungkin juga berisi variabel referensi. Variabel instan 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 saat deklarasi tetapi hanya referensi yang dibuat. Untuk alokasi memori objek, digunakan metode new(), 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 manajemen yang efektif.

Perbedaan antara Variabel Lokal dan Instance

Variabel instans dideklarasikan di dalam kelas tetapi tidak di dalam metode

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

Variabel lokal dideklarasikan di dalam sebuah 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 memahami hal ini dengan lebih baik.

Pertimbangkan bahwa metode utama Anda memanggil metode m1

public void m1{
int x=20
}

Dalam stack java, sebuah frame 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. Di stack java, sebuah frame baru dibuat untuk m2 di atas frame m1.

Variabel b dan c juga akan dibuat dalam bingkai m2 dalam tumpukan.

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

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

Sekarang katakanlah metode kita m3 sedang membuat objek untuk kelas "Akun", yang memiliki dua variabel instance 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 new Account() akan membuat objek akun di heap.

Variabel referensi “ref” akan dibuat di stack java.

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

Setelah metode menyelesaikan eksekusinya. Alur kontrol akan kembali ke metode pemanggilan. Yang dalam hal ini adalah metode m2.

Tumpukan dari metode m3 akan dihapus.

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

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

Begitu juga untuk metode m1.

Akhirnya, aliran kontrol akan kembali ke titik awal program. Yang biasanya merupakan metode “utama”.

Bagaimana jika Objek 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 pada gilirannya akan menunjuk ke objeknya, seperti diagram yang ditunjukkan di bawah ini.

Ringkasan:


java

  1. Variabel dan Literal Java
  2. Kelas dan Objek Java
  3. Kelas Abstrak Java dan Metode Abstrak
  4. Java Nested dan Kelas Dalam
  5. Lemparan Jawa
  6. Jenis Anotasi Java
  7. Autoboxing dan unboxing Java
  8. Java String replace(), replaceAll() dan replaceFirst() metode
  9. Java - Mengganti
  10. Java 10 - Alokasi Heap