SORU
4 Mart 2014, Salı


Aslında bir Yığın Taşma hatası neden olur?

Her yere baktım ama sağlam bir cevap bulamıyorum. Belgelere göre, Java aşağıdaki şartlar altında java.lang.StackOverflowError hatası atar:

Bir uygulama, çok derinden yinelenir, çünkü bir yığın taşması ne zaman atılan oluşur.

Ama bu iki soru yükseltir:

  • Orada özyineleme yoluyla taşmasına yığını için, sadece başka bir yolu değil mi?
  • Bu StackOverflowError JVM aslında yığını taşmaları önce veya sonra olur mu?

İkinci soru üzerinde ayrıntılı bilgi için:

Java StackOverflowError atar, güvenli bir şekilde yığın yığın halinde yazmak olmadığını düşünebilir misin? Eğer bir yığın taşması atan bir işlevi üzerine bir deneme/yığın veya yığın boyutunu küçült yakalamak, çalışmaya devam edebilir misiniz? Bu her yerde belgelenmiştir?

Aradığım yanıtlar:

  • Bir StackOverflow kötü özyineleme nedeniyle olur.
  • Bir StackOverflow yığın yığın karşılaşınca.

CEVAP
4 Mart 2014, Salı


Görünüşe göre sen düşünme o bir stackoverflow error gibi bir yığın taşması özel durum yerel programlar, zaman riski vardır yazımına bellek bu girdi için ayrılan tampon ve böylece bozuk başka bir hafıza konumları. Durum hiç de böyle değil.

JVM belirli bir bellek her iş parçacığı yığınının her biri için ayırdı, ve eğer bir yöntemi çağırmak için bir girişim bu belleği doldurmak için olursa, JVM bir hata atar. Eğer uzunluk N. bir dizi indisi N Hiçbir şey hatırlamıyor yazmaya çalışıyor olsaydın ne olurdu gibi yolsuzluk olabilir. Yığın yığın halinde yazmak mümkün değil.

StackOverflowError bir OutOfMemoryError ne yığın yığın için bir: bu sadece daha fazla bellek kullanılabilir olduğunu bildirir.

Description from Virtual Machine Errors (§6.3)

StackOverflowError: Java Sanal Makine uygulama iş parçacığı yürütülen programda bir kusur sonucu özyinelemeli çağırmaları sınırlandırılmamış bir numara yapıyor çünkü bir iş parçacığı yığın alanı, genellikle tükendi.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BigDawsTv

    BigDawsTv

    20 HAZİRAN 2012
  • DragsterMC Gaming

    DragsterMC G

    30 HAZİRAN 2013
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010