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

  • Matt Stokes

    Matt Stokes

    22 Ocak 2008
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008
  • ShoSho

    ShoSho

    20 Ocak 2010