Rumah > Java > javaTutorial > Apakah perbezaan antara StackOverflowError dan OutOfMemoryError dalam Java?

Apakah perbezaan antara StackOverflowError dan OutOfMemoryError dalam Java?

WBOY
Lepaskan: 2023-08-27 12:09:06
ke hadapan
1082 orang telah melayarinya

Apakah perbezaan antara StackOverflowError dan OutOfMemoryError dalam Java?

Setiap kali kita menjalankan program java, sistem pengendalian akan memperuntukkan sedikit memori kepada JVM. JVM membahagikan memori ini kepada dua bahagian. Satu ialah ingatan timbunan dan satu lagi ialah ingatan timbunan. Tindanan digunakan untuk melaksanakan kaedah, dan timbunan digunakan untuk menyimpan objek. Apabila timbunan penuh, JVM membuang java.lang.StackOverflowError; apabila timbunan penuh, JVM membuang java.lang.OutOfMemoryError.

StackOverflowError

  • Timbunan digunakan untuk pelaksanaan kaedah. Untuk setiap panggilan kaedah, blok dibuat dalam memori tindanan
  • Data yang berkaitan dengan kaedah (seperti parameter, pembolehubah setempat atau rujukan objek) disimpan dalam blok ini.
  • Apabila kaedah menyelesaikan pelaksanaan, blok dikeluarkan daripada timbunan bersama-sama dengan data yang disimpan di dalamnya.
  • Setiap kali kita memanggil kaedah, ia mesti menyelesaikan pelaksanaan dan meninggalkan memori tindanan.
  • Jika kaedah kekal dalam tindanan, maka tindanan akan penuh dan JVM akan membuang java.lang.StackOverflowError.

OutOfMemoryError

  • Objek yang kami cipta dalam Java disimpan dalam memori timbunan. Apabila objek ini tidak lagi diperlukan, ia mesti dipadamkan daripada ingatan.
  • Pengumpul sampah membuang objek yang tidak diperlukan daripada ingatan timbunan.
  • Jika objek kita mempunyai rujukan langsung, pemungut sampah tidak akan memadamkannya. Ia hanya memadamkan objek yang tidak mempunyai rujukan langsung.
  • Setiap kali kita memanggil kaedah, ia mesti menyelesaikan pelaksanaan dan meninggalkan memori tindanan.
  • Jika tiada ruang yang tinggal untuk objek baharu dalam ingatan timbunan, JVM akan membuang java.lang.OutOfMemoryError.

Atas ialah kandungan terperinci Apakah perbezaan antara StackOverflowError dan OutOfMemoryError dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan