Apa itu Alokasi Memori di Java? Stack dan Heap Memory



Artikel yang didasarkan pada 'Memory Allocation in Java' ini akan membantu Anda dengan pengetahuan mendetail tentang alokasi memori bersama dengan struktur data Stack dan Heap.

Alokasi memori adalah proses di mana program dan layanan komputer ditugaskan secara fisik atau virtual Penyimpanan ruang. Pada artikel ini, kita akan mempelajari tentang alokasi memori di dan kita akan membahas Stack dan Heap Memory.

Apa itu Stack Memory?

Memori Java Stack digunakan untuk mengeksekusi thread. Mereka berisi nilai khusus metode yang berumur pendek dan referensi ke objek lain di heap yang dirujuk dari metode.





Tumpukan memori selalu direferensikan dalam LIFO (Last-In-First-Out) memesan. Setiap kali metode dipanggil, blok baru dibuat dalam memori tumpukan untuk metode tersebut menyimpan nilai primitif lokal dan referensi ke objek lain dalam metode tersebut.

Segera setelah metode berakhir, blok tersebut menjadi tidak digunakan dan tersedia untuk metode selanjutnya.



Ukuran memori stack sangat kecil dibandingkan dengan memori Heap.

javascript alert login untuk mengunduh

Fitur Utama dari Stack Memory

Terlepas dari apa yang telah kita bahas sejauh ini, berikut adalah beberapa fitur lainnya Tumpukan Penyimpanan:

  • Itu tumbuh dan menyusut saat metode baru dipanggil dan dikembalikan masing-masing
  • Variabel di dalam tumpukan hanya ada selama metode yang membuatnya berjalan
  • Nya secara otomatis dialokasikan dan dialokasikan ketika metode menyelesaikan eksekusi
  • Jika memori ini penuh, Java akan melempar java.lang.StackOverFlowError
  • Akses ke memori ini adalah cepat jika dibandingkan dengan memori heap
  • Memori ini benang aman karena setiap utas beroperasi di tumpukannya sendiri

Metode di kelas Stack

  • Objek dorong ( Elemen objek ): Mendorong elemen di atas tumpukan.
  • Objek pop (): Menghapus dan mengembalikan elemen teratas tumpukan. Sebuah ‘EmptyStackException’ Exception dilemparkan jika kita memanggil pop () saat stack pemanggilan kosong.
  • Objek mengintip (): Mengembalikan elemen di atas tumpukan, tetapi tidak menghapusnya.
  • Boolean kosong (): Ini mengembalikan nilai true jika tidak ada yang ada di atas tumpukan. Lain, mengembalikan false.
  • int pencarian ( Elemen objek ): Ini menentukan apakah suatu objek ada di tumpukan. Jika elemen ditemukan, ia mengembalikan posisi elemen dari atas tumpukan. Lain, itu mengembalikan -1.

Kode Java untuk implementasi stack

import java.io. * import java.util. * class Test {static void stack_push (Stack stack) {untuk (int i = 0 i<5 i++){ stack.push(i) } } static void stack_pop(Stack stack){ System.out.println('Pop :') for(int i = 0 i < 5 i++){ Integer y = (Integer) stack.pop() System.out.println(y) } } static void stack_peek(Stack stack){ Integer element = (Integer) stack.peek() System.out.println('Element on stack top : ' + element) } static void stack_search(Stack stack, int element){ Integer pos = (Integer) stack.search(element) if(pos == -1) System.out.println('Element not found') else System.out.println('Element is found at position ' + pos) } public static void main (String[] args){ Stack stack = new Stack() stack_push(stack) stack_pop(stack) stack_push(stack) stack_peek(stack) stack_search(stack, 2) stack_search(stack, 6) } } 

//Keluaran



memory-allocation-in-java

Sekarang, Mari kita pindah ke Heap Space.

Heap Space di Java

Memori dialokasikan selama pelaksanaan instruksi yang ditulis oleh programmer. Perhatikan bahwa nama heap tidak ada hubungannya dengan struktur data heap. Disebut heap karena merupakan tumpukan ruang memori yang tersedia untuk pemrogram dialokasikan dan batalkan alokasi. Jika seorang programmer tidak menangani memori ini dengan baik, kebocoran memori dapat terjaditerjadi dalam program.

Fitur Utama dari Memori Java Heap

  • Terlepas dari apa yang telah kita bahas sejauh ini, berikut adalah beberapa fitur lain dari ruang heap:
  • Itu diakses melalui teknik manajemen memori kompleks yang mencakup Generasi Muda, Tua atau Generasi Bertenur, dan Generasi Permanen
  • Jika ruang heap penuh, Java melempar java.lang.OutOfMemoryError
  • Akses ke memori ini relatif lebih lambat daripada memori tumpukan
  • Memori ini, berbeda dengan stack, tidak dibatalkan alokasinya secara otomatis. Itu membutuhkan Pemulung untuk membebaskan objek yang tidak digunakan untuk menjaga efisiensi penggunaan memori
  • Tidak seperti tumpukan, heap tidak benang aman dan perlu dijaga dengan menyinkronkan kode dengan benar

Perbedaan antara Java Heap Space dan Stack Memory

Berdasarkan penjelasan di atas, kita dapat dengan mudah menyimpulkan perbedaan antara berikut Tumpukan dan Tumpukan Penyimpanan.

string to date convert in java
  • Tumpukan memori digunakan oleh semua bagian aplikasi sedangkan memori stack hanya digunakan oleh satu thread eksekusi.
  • Setiap kali objek dibuat, objek tersebut selalu disimpan di ruang Heap dan memori tumpukan berisi referensi ke objek tersebut. Memori tumpukan hanya berisi variabel primitif lokal dan variabel referensi ke objek di ruang heap.
  • Objek yang disimpan di heap dapat diakses secara global sedangkan memori tumpukan tidak dapat diakses oleh utas lain.
  • Manajemen memori di stack dilakukan di a LIFO cara yang lebih kompleks dalam memori Heap karena digunakan secara global. Memori heap dibagi menjadi Generasi Muda, Generasi Tua dll, lebih detail di Pengumpulan Sampah Jawa.
  • Memori tumpukan adalah berumur pendek sedangkan memori heap hidup dari awal hingga akhir eksekusi aplikasi.
  • Kita bisa gunakan -XMX dan -XMS Opsi JVM untuk menentukan ukuran startup dan ukuran maksimum memori heap. Kita bisa gunakan -XSS untuk menentukan ukuran memori tumpukan.
  • Saat memori tumpukan penuh, runtime Java akan melempar java.lang.StackOverFlowError sedangkan jika memori heap penuh, ia melempar java.lang.OutOfMemoryError: Java Heap Spacekesalahan.
  • Ukuran memori stack sangat kecil jika dibandingkan dengan memori Heap. Karena kesederhanaan dalam alokasi memori (LIFO), memori tumpukan sangat cepat jika dibandingkan denganmemori tumpukan.

Grafik perbandingan

PARAMETER TUMPUKAN TUMPUKAN
Dasar Memori dialokasikan dalam Blok BersebelahanMemori dialokasikan dalam Urutan Acak
Alokasi dan Deallocation Otomatis oleh kompilerManual oleh Programmer
Biaya KurangLebih
Penerapan KerasMudah
Waktu akses Lebih cepatLebih lambat
Isu utama Kekurangan MemoriFragmentasi Memori
Lokalitas Perbedaan Luar biasaMemadai
Fleksibilitas Tarif TetapMengubah ukuran dimungkinkan

Dengan ini, kita sampai pada akhir dari Tutorial 'Alokasi Memori di Java' ini. Saya harap Anda memahami konsep dan implementasinya melalui beberapa contoh real-time.

Sekarang kamu sudah mengertiAlokasi Memori di Javadasar-dasar melalui artikel 'Alokasi Memori di Java' ini, lihat oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus pelatihan dan sertifikasi Java J2EE dan SOA dari Edureka dirancang untuk siswa dan profesional yang ingin menjadi Pengembang Java. Kursus ini dirancang untuk memberi Anda permulaan dalam pemrograman Java dan melatih Anda untuk konsep Java inti dan lanjutan bersama dengan berbagai kerangka kerja Java seperti Hibernate & Musim semi .

Ada pertanyaan untuk kami? Sebutkan di bagian komentar di blog 'Alokasi Memori di Java' dan kami akan menghubungi Anda kembali secepatnya.