SORU
2 Mart 2014, Pazar


Neden bir StackOverflowError kurtarmak mümkün mü?

StackOverflowError bir Java oluştu bile sonra yürütme devam etmek mümkündür ne de şaşırdım.

StackOverflowError sınıf Hata sublass olduğunu biliyorum. Sınıf Hatası "makul bir uygulama ciddi sorunlar yaşandığını belirten Throwable bir alt sınıfı yakalamak için çalışmalısınız." olarak decumented.

Bu bir kuraldan çok bir öneri gibi, bir StackOverflowError aslında gibi bir Hata yakalamak izin aboneye sesler ve programcı bunu yapmak için değil reasonability kalmış. Ve Bakın, bu kodu test ettim ve normal olarak sona erdirir.

public class Test
{
    public static void main(String[] args)
    {
        try {
            foo();
        } catch (StackOverflowError e) {
            bar();
        }
        System.out.println("normal termination");
    }

    private static void foo() {
        System.out.println("foo");
        foo();
    }

    private static void bar() {
        System.out.println("bar");
    }
}

Bu nasıl olabilir? Yığın başka bir işlevi çağırmak için bir oda var bu yüzden hiç tam olması gereken zaman StackOverflowError atılır bence. Hata işleme bloğu farklı bir çalışan burada neler oluyor yığını ya?

CEVAP
2 Mart 2014, Pazar


Yığın taşması ve StackOverflowError atıldığında, olağan dışı durum işleme yığını bir aşk şarkısı. Yığın anlamı gevşemek:

  • şu anda aktif işlevi yürütme iptal
  • sil yığın çerçevesini, arama işlevi ile devam edin
  • arayanın yürütme iptal
  • sil yığın çerçevesini, arama işlevi ile devam edin
  • .

... kadar durum yakalandı. Bu özel durum ve neden normal (aslında) gerekli ve bağımsızdır. Beri catch istisna dışında İlk Çağrı için foo() binlerce foo yığın çerçeveler dolu yığını tüm çözülmemiş ve çoğu yığını ücretsiz kullanılacak yine.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bogdan Gabriel

    Bogdan Gabri

    5 Aralık 2006
  • Hak5DarrensVlog

    Hak5DarrensV

    11 EYLÜL 2009
  • SomeOne Pro

    SomeOne Pro

    25 EKİM 2013