Ketika seseorang mulai mempelajari Java atau bahasa pemrograman lainnya, dia akan bersentuhan dengan heap dan stack. Karena tidak ada penjelasan yang jelas dan jelas di awal, banyak orang akan memiliki banyak pertanyaan Apa itu heap? apa itu stack, dan apa bedanya heap dan stack? Parahnya lagi di Java terdapat stack, struktur data sekuensial masuk terakhir keluar pertama (Last In First Out), yaitu java.util.Stack. Dalam hal ini, mau tidak mau akan membuat banyak orang semakin bingung dengan pertanyaan sebelumnya. Faktanya, heap dan stack merupakan bagian dari memori dan memiliki fungsi yang berbeda, dan suatu program perlu mengalokasikan memori di area ini. Seperti kita ketahui bersama, semua program Java dijalankan di dalam mesin virtual JVM. Yang kami perkenalkan di sini secara alami adalah heap dan stack di memori JVM (virtual).
perbedaannya
Perbedaan antara heap dan stack di Java tentu saja merupakan pertanyaan umum dalam wawancara. Poin-poin berikut adalah perbedaan spesifiknya.
Setiap orang menjalankan tugasnya
Perbedaan utamanya adalah memori tumpukan digunakan untuk menyimpan variabel lokal dan pemanggilan metode.
Memori heap digunakan untuk menyimpan objek di Java. Baik itu variabel anggota, variabel lokal, atau variabel kelas, objek yang ditunjuknya disimpan dalam memori heap.
Eksklusif atau dibagikan
Memori tumpukan milik satu utas. Setiap utas akan memiliki memori tumpukan, dan variabel yang disimpannya hanya dapat dilihat di utas yang dimilikinya. Artinya, memori tumpukan dapat dipahami sebagai memori pribadi dari utas tersebut.
Objek di memori heap terlihat oleh semua thread. Objek di memori heap dapat diakses oleh semua thread.
Kesalahan pengecualian
Jika tidak ada ruang yang tersedia di memori tumpukan untuk menyimpan pemanggilan metode dan variabel lokal, JVM akan menampilkan java.lang.StackOverFlowError.
Dan jika tidak ada ruang yang tersedia di memori heap untuk menyimpan objek yang dihasilkan, JVM akan menampilkan java.lang.OutOfMemoryError.
Ukuran ruang
Memori tumpukan jauh lebih kecil daripada memori tumpukan. Jika Anda menggunakan rekursi, tumpukan Anda akan terisi dengan cepat. Jika rekursi tidak terjadi tepat waktu, masalah StackOverFlowError mungkin terjadi.
Anda dapat mengatur ukuran memori tumpukan dengan opsi -Xss. Opsi -Xms menetapkan ukuran awal tumpukan, dan opsi -Xmx menetapkan ukuran tumpukan maksimum.
Inilah perbedaan antara heap dan stack di Java. Jika Anda memahami masalah ini dengan baik, ini dapat membantu Anda memecahkan masalah pengembangan, menganalisis memori heap dan penggunaan memori tumpukan, dan bahkan melakukan penyetelan kinerja.
Lihat nilai default (Diperbarui)
Untuk melihat nilai default heap, gunakan kode berikut, dengan InitialHeapSize adalah ukuran heap awal dan MaxHeapSize adalah nilai maksimum heap.
Copy kode kodenya sebagai berikut:
13:17 $ java -XX:+PrintFlagsFinal -versi |.grep HeapSize
uintx ErgoHeapSizeLimit = 0 {produk}
uintx HeapSizePerGCThread = 87241520 {produk}
uintx InitialHeapSize := 134217728 {produk}
uintx LargePageHeapSizeThreshold = 134217728 {produk}
uintx MaxHeapSize := 2147483648 {produk}
versi java "1.8.0_25"
Lingkungan Runtime Java(TM) SE (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mode campuran)
Periksa nilai default tumpukan, di mana ThreadStackSize adalah ukuran memori tumpukan.
Copy kode kodenya sebagai berikut:
13:21 $ Java -XX:+PrintFlagsFinal -versi |
intx CompilerThreadStackSize = 0 {pd produk}
intx ThreadStackSize = 1024 {pd produk}
intx VMThreadStackSize = 1024 {pd produk}
versi java "1.8.0_25"
Lingkungan Runtime Java(TM) SE (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mode campuran)
Informasi terjemahan
Teks asli bahasa Inggris: http://javarevisited.blogspot.com.au/2013/01/difference-between-stack-and-heap-java.html.
Terjemahan telah dimodifikasi, diatur dan dihapus berdasarkan teks aslinya. Jika Anda tertarik, Anda dapat mengunjungi teks aslinya. Alamat PS telah diblokir.