SORU
3 Mart 2011, PERŞEMBE


Bir JVM bu hata veya "beklenen"?

Fark ettim bazı beklenmeyen davranış (beklenmeyen göre benim kişisel beklentileri), ve merak ediyorum, eğer bir şey varsa bir hata JVM ya da belki bir saçak dava nerede anlamıyorum bazı ayrıntıları tam olarak ne olduğunu olmamalıydı. Kendisi tarafından bir ana yöntem: aşağıdaki kodu vardı sanırım

int i;
int count = 0;
for(i=0; i < Integer.MAX_VALUE; i =2){
  count  ;
}
System.out.println(i  );

Naif bir beklenti bu Integer.MAX_VALUE-1 bile int temsil edilebilir en büyük baskı olacak. Ancak, tamsayı aritmetik gerekiyordu inanıyorum "geçiş Java, Integer.MAX_VALUE ekleme 1" Integer.MIN_VALUE yol açmalıdır. Integer.MIN_VALUE Integer.MAX_VALUE, daha küçük olduğu için döngü negatif bile değer vermez yineleme devam eder. Sonunda 0 ve sonsuz bir döngü gibi tekrar bu işlemi geri almak istiyorum.

Aslında ben bu kodu çalıştırdığınızda, belirli olmayan sonuçlar alıyorum. Basılmış olur ve bunun sonucunda yarım milyon sipariş olma eğilimindedir, ama tam değeri değişir. Bu yüzden sadece döngü sonsuz bir döngü olması gerektiğine inanıyorum ve ne zaman sona eriyor, ama rastgele sona erdirmek gibi görünüyor. Neler oluyor?

Benim tahminim bu JVM bir hata değildir ya o, ya bu beklenen davranış yapan funky optimizasyon çok şey var. Hangisi?

CEVAP
3 Mart 2011, PERŞEMBE


Hata da bilinir. İlgili

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6196102

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6357214

ve diğerleri.

Gerçek dünyada dışarı çıkmazlar çünkü düzeltmek için düşük öncelikli kabul ediyorlar sanırım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Outler

    Adam Outler

    19 EKİM 2006
  • ASUS North America

    ASUS North A

    12 AĞUSTOS 2008
  • Marques Brownlee

    Marques Brow

    21 Mart 2008

İLGİLİ SORU / CEVAPLAR