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

  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • SavageLuxxxGaming - Daily NBA 2K15 & NBA Live 15 Enjoy And Subscribe!

    SavageLuxxxG

    11 Ocak 2013
  • SoundHound

    SoundHound

    8 Mart 2006