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

  • ChasesAndCrashes

    ChasesAndCra

    31 Temmuz 2009
  • Dellbear816

    Dellbear816

    4 Mart 2008
  • engineerguy

    engineerguy

    10 Ocak 2010