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

  • Eric Enge

    Eric Enge

    2 Kasım 2009
  • How to Cook ?

    How to Cook

    31 Ocak 2007
  • Manuel Vizcaino

    Manuel Vizca

    27 Mayıs 2008