Stack dan Heap , keduanya merupakan bagian dari sistem memori ,yang ada di dalam komputer , yang fungsinya sebagai tempat , untuk mengalokasikan data , pada suatu program aplikasi. Dimana keduanya sama-sama disimpan , ke dalam memori RAM di komputer.
Seperti yang kita tahu , saat kita mencoba menuliskan baris code , lalu menjalankan suatu program aplikasi . Selanjutnya , akan terjadi suatu proses, yang secara otomatis akan menempatkan ke lokasi tertentu dalam memori, saat program aplikasi tersebut dijalankan ,yang dimana ini bisa juga sebut sebagai alamat memori (memory address).
Sebuah program yang menggunakan bahasa pemrograman java , akan menjalankan JVM , yang mana akan diluncurkan, atas proses perintah atau command java. Selama program java dijalankan (runtime) , memori akan terbagi menjadi 3 part atau bagian. Ketiga part itu terdiri dari baris code atau text , stack ,dan , heap. Beberapa baris code ,ada yang ditempatkan di memori stack , beberapa baris code lainnya , akan ditempatkan di memori heap.
Pada artikel belajar java kali ini ,kita akan belajar memahami contoh perbedaan alokasi memori stack dan heap , di bahasa pemrograman java . Selengkapnya ,berikut mari kita simak lebih lanjut :
Apa itu fungsi Stack ?
Stack adalah bagian dari memori ,yang digunakan untuk pengalokasian memori secara statis. Serta untuk alamat memorinya , yang digunakan untuk menyimpan data dan variable , sudah ditentukan sejak awal saat proses kompilasi , bukan saat runtime(program berjalan). Dalam metode penyimpananya , stack menggunakan LIFO (Last In First Out), yang dimana setiap data terakhir yang masuk akan pertama kali keluar. Ini bisa kita analogikan ke dalam kehidupan sehari-hari ,seperti contohnya sebuah tumpukan buku atau tumpukan piring.
Stack juga digunakan untuk mengeksekusi sebuah Thread. Sebagai bagian dari memori ,stack hanya menyimpan variabel primitif lokal dan variable referensi. Stack sangat cepat , akan tapi kurang dalam segi ukuran , dibandingkan dengan memori heap.
Apa itu fungsi Heap ?
Heap adalah bagian dari memori ,yang digunakan untuk pengalokasian memori secara dinamis. Serta untuk mengalamatkan memorinya , akan dimulai , saat runtime(program berjalan). Karena dialokasikan secara dinamis , sehingga lokasi memorinya tidak memiliki pola , atau bisa disebut acak. Kapanpun kita membuat suatu objek , akan selalu otomatis dibuat , dan ditempatkan di dalam memori heap.
Sedangkan untuk variable referensi dari objek, akan ditempatkan di dalam memori stack. Setiap objek yang dibuat di dalam heap ,akan mempunyai akses global ,dan dapat direferensikan , dimana saja dari suatu progam aplikasi.
Contoh Code :
Contoh Code |
Ketika kita mencoba menjalankan contoh code program di atas , kira-kira visualisasi atau ilustrasinya , akan menjadi seperti pada gambar di bawah:
Contoh ilustrasi memori stack vs heap |
Penjelasan :
Seperti yang kalian lihat pada contoh gambar ilustrasi di atas, yang menggambarkan tentang proses alokasi memori stack dan heap , saat program java berjalan di komputer.
Pertama-tama , pada baris code int x = 15 dan int y = 30 ,yang merupakan variable tipe data primitif. Akan disimpan ke dalam memori stack.
Sedangkan untuk variable referensi a dan b , akan disimpan ke memori stack , dan untuk objeknya akan disimpan ke memori heap.
Selanjutnya, untuk text ,yang merupakan tipe data String, nilai atau valuenya akan disimpan di string pool , di dalam memori heap.
Baca juga : Perbedaan Tipe Data Primitif dan Referensi di Program Java
Perbedaan Antara Memori Stack dan Heap :
- Tipe data primitif , dan referensi untuk objek , akan disimpan ke dalam memori stack
- Setiap objek akan mengambil space di dalam memori heap
- Memori stack kurang dari memori heap
- Memori stack berisi variable lokal untuk sebuah program aplikasi. Memori heap berisi objek yang di akses secara global di dalam sebuah program aplikasi
- Dalam kasus cara kerja memori stack, ketika variable dihapus , maka ruang memori bebas akan disediakan untuk variabel lain , setelah code terakhir dieksekusi.
- Dalam kasus kerja memori heap , jika ada referensi yang mengacu ke objek , maka objek itu akan mempertahankan space atau ruang di memori heap. Sedangkan , ketika objek tidak memiliki referensi yang tersedia , maka objek yang dimaksud akan mati, dan garbage collector akan menghapus objek itu dari memeori heap , untuk mempertahankan ruang ,yang disediakan untuk objek lain