SORU
25 Kasım 2014, Salı


Neden Java API yerine veya bayt int kısa kullanıyor mu?

Neden Java API short hatta byte yeterli olup olmadığını int kullanıyor mu?

Örnek: Calendar int kullanır sınıfı DAY_OF_WEEK alan.

Düzenleme:

İlgi çekici yönleri

  • Depolama
  • Hesaplamalar

Eğer fark çok az ise, neden bu veri türleri (kısa) int hiç var mı? Eski?

CEVAP
25 Kasım 2014, Salı


Nedenleri zaten işaret edilmiştir. Örneğin, "...(Almost) All operations on byte, short will promote these primitives to int" aslında. Ancak, belli bir sonraki soru şöyle olacaktır:NEDENbu tür int terfi.

Bir seviye daha derine gitmek: cevap sadece Java Sanal Makine komut Seti ile ilgili olabilir. Table in the Java Virtual Machine Specification özetlenmiştirtümintegral aritmetik işlemleri, ekleme, bölme ve diğerleri gibi, tek tip int tipi long ve için kullanılabilirdeğildaha küçük türleri için.

(Bir kenara: temelde içindir daha küçük türleri (byte short)diziler. Birdizigibi new byte[1000] 1000 bayt alacak, new int[1000] gibi bir dizi 4000 bayt)

Şimdi, tabii, diyebilir"...açık bir sonraki soru şöyle olacaktır:NEDENbu talimatlar yalnızca int (long) sunulmaktadır?".

Bir nedeni JVM Spec yukarıda belirtilen:

Eğer her yazılan talimat Java Sanal Makine çalıştırma veri tipleri her destekleniyorsa, bir bayt olarak temsil edilebilir daha talimatları olacaktır

Ayrıca, Java Sanal Makine gerçek bir işlemci bir soyutlama olarak kabul edilebilir. Ve küçük türleri için Arithmetic Logic Unit özel tanıtan çabaya değer olmaz: ek transistör gerekir, ama yine de sadece bir saat döngüsünde ayrıca. bir yürütebilir JVM dizayn edildiği baskın mimari 32bit, sadece doğru için 32 int bir oldu. (64 bit long bir değer içeren işlemlerden, özel bir durum olarak uygulanır).

(Not: son paragraf, dikkate Olası vektörleştirme vb. biraz basitleştirilmiş. ama çok derin bir işlemci tasarım konuları içine dalış olmadan temel fikir verecektir


EDİT: kısa BİR ek, daha genel anlamda soru ama: örnek odaklanarak da saklayın . yararına olacak olup olmadığını sormak olabilir ^em>alanlardaha küçük türleri kullanarak. Örneğin, bir bellek byte Calendar.DAY_OF_WEEK saklayarak kurtarmış olabileceğini düşünebilir. Ama burada, Java Sınıf Dosya Biçimi devreye giriyor: Fields in a Class File Tüm en az bir "bir int (32 bit) boyutu vardır.", slot işgal ("Geniş" alanları double long iki yuva işgal). Yani açıkça short byte olarak alan ilan herhangi bir bellek ya da tasarruf olmaz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Justin Schenck

    Justin Schen

    24 Kasım 2006
  • LaKe Lightroom Tutorials

    LaKe Lightro

    22 Temmuz 2014
  • talkandroid

    talkandroid

    27 Mayıs 2010