SORU
31 EKİM 2012, ÇARŞAMBA


Neden olduğunu GÖRDÜM bu şekilde tasarlanmış yaptırıyor?

ConcurrentHashMap hakkında komple cam kaynak kodunu okudum.

Ama aşağıdaki kodu kafamı karıştırdı:

public boolean isEmpty() {
    final Segment<K,V>[] segments = this.segments;
    ...
}

Benim sorum:

"Bu.bölümleri" ilan etti

final Segment<K,V>[] segments;

Yani, burada, bu yöntemin başlangıçta, aynı tip, aynı bellek için referans noktası ilan edildi.

Neden yazar böyle mi yazdın? Neden bu değildi.kesimleri doğrudan? Bir nedeni var mı?

CEVAP
31 EKİM 2012, ÇARŞAMBA


Bu bir deyim kilidi serbest kod için tipik volatile değişkenleri içeren. İlk satırında volatile bir kez okumak ve çalışmak. Bu arada başka bir iş parçacığı volatile güncelleme olabilir ama sadece başlangıçta okuma değeri ilgilendi.

Ayrıca, hatta ne zaman üye değişkeni söz konusu değildir uçucu ama son, bu deyim ilgisi var İŞLEMCİ önbelleğe Okuma bir yığın konumu daha fazla önbellek dostu daha okuyarak rastgele bir yığın yer. Ayrıca yerel bir kayıt var CPU bağlı olacak daha yüksek bir şans var.

Bu ikinci durumda JİT derleyici genellikle bu endişeleri ilgilenecek beri aslında bazı tartışmalar var, ama Doug Lea genel prensip beraber gelen adamlardan biri.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kurtindo Pop Games

    Kurtindo Pop

    2 HAZİRAN 2013
  • Numberphile

    Numberphile

    15 EYLÜL 2011
  • THE RED DRAGON

    THE RED DRAG

    6 ŞUBAT 2009