java - ConcurrentHashMap में स्ट्रिंग के आंतरिक विधि के लिए प्रतिरूप




string dictionary (2)

मैंने जावाडय से एक कोड देखा, लेखक ने कहा कि संभावना के साथ यह दृष्टिकोण स्टॉन्ग करने के लिए बहुत प्रभावी है स्ट्रिंग इंस्ट्रूमेंट विधि के अनुरूप

 public class CHMDeduplicator<T> {
    private final int prob;
    private final Map<T, T> map;

    public CHMDeduplicator(double prob) {
        this.prob = (int) (Integer.MIN_VALUE + prob * (1L << 32));
        this.map = new ConcurrentHashMap<>();
    }

    public T dedup(T t) {
        if (ThreadLocalRandom.current().nextInt() > prob) {
            return t;
        }
        T exist = map.putIfAbsent(t, t);
        return (exist == null) ? t : exist;
    }
}

कृपया, मुझे बताएं, इस रेखा में संभावना का क्या प्रभाव है:

if (ThreadLocalRandom.current().nextInt() > prob) return t;

यह जावा दिवस से मूल प्रस्तुति है https://shipilev.net/talks/jpoint-pril2015-string-catechism.pdf (56 वें स्लाइड)


कंस्ट्रक्टर को दिए गए डबल वेल्यू का श्रेय 0.0 से 1.0 के बीच की संभावना मान है। इसे पूर्णांक में कनवर्ट किया जाता है, जैसे कि यह नीचे पूर्णांक मानों का अनुपात दोहरे मान के बराबर है।

पूरे अभिव्यक्ति को कंसट्रक्टर पैरामीटर के बराबर एक संभावना के साथ मूल्यांकन करने के लिए डिज़ाइन किया गया true । पूर्णांक गणित का उपयोग करके यह कच्चे डबल मान का उपयोग किया जाने से थोड़ा अधिक तेज होगा।

कार्यान्वयन का इरादा यह है कि कभी-कभी यह स्ट्रिंग को कैश नहीं करेगा, बजाय इसे वापस करना। ऐसा करने का कारण एक सीपीयू बनाम स्मृति प्रदर्शन व्यापार बंद है: यदि स्मृति-बचत कैशिंग प्रक्रिया एक सीपीयू बाधा उत्पन्न करती है, तो आप "कुछ भी नहीं" संभावना को तब तक बदल सकते हैं जब तक आप शेष राशि नहीं पाते।


यदि आप अगली स्लाइड पर नजर रखते हैं जिसमें अलग-अलग संभावनाओं वाले आंकड़ों के साथ एक टेबल है, या बात सुनें , तो आप देखेंगे / इस तर्क को देखेंगे: संभाव्य डिडुप्लाकेटर्स स्ट्रिंग्स को डिप्लोसिट करने में बिताए गए समय को संतुलित करते हैं, और स्मरणशक्ति बचत में कटौती से आ रही है। इससे प्रसंस्करण स्ट्रिंग्स का समय बिताया जा सकता है, या कोड के चारों ओर कम-प्रो-डिप्डुप्लाकेटर्स भी छिड़क सकता है, इस प्रकार डिडुप्लिकेशन्स की लागतों को बढ़ाना

(स्रोत: ये मेरी स्लाइड्स हैं)







concurrenthashmap