2012-03-10 8 views
5

मैं जीडब्ल्यूटी में डबल ब्रेसेस ऑब्जेक्ट इंटिलाइजेशन का उपयोग (या यहां तक ​​कि अत्यधिक उपयोग) का उपयोग करता हूं। मेरे लिए यह अधिक पठनीय और अधिक घोषणात्मक दिखता है।जीडब्ल्यूटी में डबल ब्रेसिज़ कितने हानिकारक हैं?

new FastMap<Object>(){{ 
    put("Value", 12); 
    put("Unit", "Kg"); 
}}; 

आज से पहले मुझे पता है कि इस वाक्य रचना सिर्फ वस्तु का दृष्टांत नहीं है, लेकिन यह भी AnonymousInnerClass for it नहीं बना था। अब मैं चिंतित हूं कि जीडब्ल्यूटी उनके साथ कैसे व्यवहार करता है।

  1. यह वाक्यविन्यास निष्पादन के प्रभाव को कैसे प्रभावित करता है?
  2. यह वाक्यविन्यास संकलित आकार को कैसे प्रभावित करता है?
  3. कोई और बुरी चीज?

मेरे पास मेरे ऐप में हजारों प्रारंभिक हैं।

+0

महान सवाल। _-Style = PRETTY_ के साथ संकलन करने का प्रयास करें, जो कुछ प्रकाश डाल सकता है। –

उत्तर

5

मेरे निष्कर्ष। टेस्ट code। मैं 21 आइटम प्रत्येक के साथ 4 मानचित्रों के साथ एकल सूची बना रहा हूं। मैं सभी जेनरेट की गई जावास्क्रिप्ट फ़ाइलों का आकार माप रहा हूं।परिणाम:

खाली (बस खाली कोड कि GWT समर्थन कोड गाया सुनिश्चित करने के लिए):

  • सुंदर = 533 KB (546 602 बाइट्स)
  • OBF = 212 KB (217 601 बाइट्स)
  • new की संख्या = 167

कोड दोहरे कोष्ठकों बिना:

  • सुंदर = 557 KB (570 682 बाइट्स)
  • OBF = 222 KB (227 663 बाइट्स)
  • new = 171

की संख्या और एक ही कोड दोहरे कोष्ठकों साथ:

  • सुंदर = 567 KB (581 004 बाइट्स)
  • OBF = 228 KB (234 089 बाइट्स)
  • new = 177

की संख्या मुझे लगता है कि परिणाम बहुत स्वतः स्पष्ट हैं।

+0

डब्ल्यूटीजी, वास्तव में काम में डाल रहा है। –

1

जहां तक ​​पठनीयता का सवाल है: मैं यह कुछ इस तरह करने के लिए यह आसान को पढ़ने के लिए बनाने के लिए बदल जाएगा:

new FastMap<Object>() 
{{ 
    put("Value", 12); 
    put("Unit", "Kg"); 
}}; 

आप हालांकि प्रदर्शन से संबंधित मुद्दों के बारे में अधिक जानने के लिए this जवाब को पढ़ने के लिए चाहते हो सकता है।

+1

वह संकलित नहीं करेगा। आप ब्रेसिज़ के दूसरे सेट को भूल गए। – Jeffrey

+0

मेरा बुरा। धन्यवाद! – beta

+1

आपके द्वारा प्रदान किया गया लिंक जावा के बारे में है, जीडब्ल्यूटी के बारे में नहीं। जीडब्ल्यूटी में यह बिना किसी ऑब्जेक्ट के जावास्क्रिप्ट को संकलित करता है। यह संभव है कि जीडब्ल्यूटी में इसका कोई भी हानिकारक प्रभाव नहीं होगा। –

1

आप सिर्फ इस तरह लगातार नक्शे तय कर रहे हैं, तो आप शायद बेहतर (दोनों गति के लिहाज से और पठनीयता वार) Guava और ImmutableMap का उपयोग कर होगा:

Map<Integer, Character> map = ImmutableMap.of(5, 'a', 1, 'b'); 
Map<Integer, String> largerMap = ImmutableMap.<Integer, String>builder() 
    .put(1, "a") 
    .put(2, "b"); 
    .put(5, "wisconsin") 
    .build(); 

(वे गूगल से कर रहे हैं , और वे पूरी तरह से जीडब्ल्यूटी-संगत हैं।)

+0

ठीक है, सवाल किसी भी वर्ग के बारे में है। वास्तव में ज्यादातर मामलों में यह मेरे आंतरिक डीएसएल calasses। Guava और ImmutableMap के बारे में लिंक के लिए धन्यवाद। उम्मीद तो दिखती है। –

2

यह मानक जावा है और जीडब्ल्यूटी से स्वतंत्र है। इसे Efficiency of Java “Double Brace Initialization”? में व्यापक रूप से निपटाया जाता है।

इस वाक्यविन्यास के साथ मेरी सबसे बड़ी समस्या यह है कि FastMap का उदाहरण प्रदान नहीं करता है, बल्कि इसके अज्ञात उप-वर्ग के बजाय। उस ऑब्जेक्ट की तुलना बराबर के रूप में FastMap के समतुल्य उदाहरण के साथ पारंपरिक तरीके से स्थापित डेटा के साथ नहीं की जाती है। इसमें अन्य गॉथ भी होने की संभावना है जो स्पष्ट नहीं हैं और कम से कम डीबग करने के लिए कम हैं।


धागा here कहना है कि यह

से सावधान रहें - डबल-ब्रेस प्रारंभ शांत लग रही है, लेकिन यह परिमाण नियमित प्रारंभ की तुलना में धीमी की आदेश है के रूप में यह एक अनाम वर्ग उत्पन्न करनी चाहिये।

इसके अलावा, जेनरेट क्लास को परमजन स्पेस में रखा गया है, जो कचरा एकत्र नहीं किया गया है। Permgen डिफ़ॉल्ट रूप से बहुत छोटा है - और यदि आप इसे भरें, तो आपका सिस्टम बंद हो गया है।

मैं उन्हें यूनिट परीक्षणों में हर समय उपयोग करता हूं, लेकिन कभी भी उत्पादन कोड में नहीं।

+2

लेकिन जीडब्ल्यूटी सिर्फ एक और जावा एपीआई नहीं है, बल्कि एक "डीएसएल" (वास्तव में कोई टी नहीं, लेकिन मुझे हास्य) जो जावा की तरह दिखता है और क्लाइंट-साइड जावास्क्रिप्ट में संकलित होता है। यह प्रक्रिया जावा कंपाइलर और रनटाइम जेवीएम से अलग डीबीआई को संभाल सकती है। –

+0

केविन के साथ सहमत हैं। –

+0

@ केविन: बस काम किया * डीबीआई * डेटाबेस इंटरफ़ेस से अलग क्या था! हाँ मैं भी आपसे सहमत हूं। किसी के लिए यह जांचना आसान होगा कि जावा की कुछ पंक्तियां किस तरह से संकलित होती हैं। – Borodin

संबंधित मुद्दे