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

Apakah perbezaan antara StackOverflowError dan OutOfMemoryError dalam Java?

WBOY
WBOYke hadapan
2023-08-27 12:09:061033semak imbas

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam