2016-08-20 9 views
17
RealEstate v = new RealEstate(); 

मैंने के साथ इस new कीवर्ड का उपयोग किया है। मुझे पता है new मेमोरी आवंटित करता है और RealEstate वर्ग कन्स्ट्रक्टर का उपयोग कर स्मृति को प्रारंभ करता है।जब 'नया' ऑपरेटर कन्स्ट्रक्टर का उपयोग कर स्मृति को प्रारंभ करता है तो JVM क्या करता है?

यहां जेवीएम क्या कर रहा है?

+6

मुझे नहीं लगता कि इस प्रश्न में 6 डाउनवॉट होना चाहिए, संभवतः डाउनवॉटर को यह समझ में नहीं आया कि ओपी वास्तव में क्या पूछ रहा था। उम्मीद है कि 6 उपयोगकर्ता डाउनवॉट्स का मुकाबला करने के लिए लड़े। –

+0

हाँ वास्तव में @ जीन-फ्रैंकोइससार्ड –

+0

आपके प्रश्न में इसका उत्तर है। आप जो पूछ रहे हैं उसे अस्पष्ट करें। – EJP

उत्तर

13

new ऑपरेटर वास्तव में स्मृति आवंटित करने के लिए निर्माता से सहायता का उपयोग नहीं करता है। इसका निर्माता के साथ कुछ लेना देना नहीं है। Basically Java's version of malloc is new.

new ऑपरेटर:

  • एक वस्तु
  • आह्वान निर्माता आपत्ति
  • रिटर्न संदर्भ कि स्मृति

निर्माता आरंभीकरण के दौरान किसी भी कार्रवाई करने के लिए अलग से क्रियान्वित किया जाता है के लिए स्मृति आबंटित करता है, वस्तुओं और चर के लिए मूल्य आवंटित करना। कोई निर्माता परिभाषित किया गया है, तो संकलक डिफ़ॉल्ट निर्माता पैदा करेगा और मूलभूत मूल्यों आवंटित करेगा:


निम्नलिखित चार्ट कई डेटा प्रकार के लिए डिफ़ॉल्ट मान का सारांश है। source

Data Type Default Value (for fields) 
byte   0 
short   0 
int    0 
long   0L 
float   0.0f 
double   0.0d 
char   '\u0000' 
String   null 
any object  null 
boolean   false 

तो, new ऑपरेटर केवल स्मृति आवंटित करता है और कहा कि स्मृति के संदर्भ देता है।

documentation देखें:

नए ऑपरेटर एक नई वस्तु के लिए स्मृति आवंटन और है कि स्मृति के लिए एक संदर्भ वापस लौट कर एक वर्ग को दर्शाता है। नया ऑपरेटर ऑब्जेक्ट कन्स्ट्रक्टर को भी आमंत्रित करता है।

+8

नहीं, जावा प्रत्येक ऑब्जेक्ट के लिए malloc का उपयोग नहीं करता है। यह मूल रूप से टीएलबी (थ्रेड लोकल आवंटन बफर) नामक क्षेत्र में एक सूचक को बढ़ाकर बहुत कम ओवरहेड है। जावा भाषा विशिष्टता में अगला क्या होता है, इसमें क्लास पदानुक्रम के शुरुआती और प्रारंभकर्ता शामिल हैं। और इससे पहले कि वस्तु के लिए actuall कक्षा का निर्माण और initalied भी है। https://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.5 – eckes

+1

यह स्मृति * पहले * आवंटित करता है, फिर कन्स्ट्रक्टर को कॉल करता है, फिर संदर्भ देता है। डिफ़ॉल्ट कन्स्ट्रक्टर संकलक द्वारा बनाया गया है, JVM नहीं। आपने पूर्णांक फ़ील्ड के लिए डिफ़ॉल्ट मान छोड़े हैं, और 'स्ट्रिंग' के लिए डिफ़ॉल्ट मान देने की कोई आवश्यकता नहीं है, जो कि केवल एक अन्य वस्तु है। उद्धृत बयान जावा ट्यूटोरियल से है, न कि 'दस्तावेज़ीकरण'। उद्धरण करने के लिए उचित बात जावा भाषा विशिष्टता है। – EJP

+0

@EJP मैं केवल प्रारंभिकरण के दौरान किए गए प्रमुख संचालन को इंगित करना चाहता था। वह सटीक क्रम नहीं माना जाता था जिसमें वे प्रदर्शन किए जाते थे। वैसे भी, अधिसूचना के लिए धन्यवाद, मैंने तदनुसार अपना जवाब अपडेट कर दिया है। जहां तक ​​* डिफ़ॉल्ट मान चार्ट सारांश * संबंधित है, यह पता है कि कोई उचित दस्तावेज़ीकरण नहीं है, लेकिन आखिरकार, यह अभी भी [oracle] से है (http://docs.oracle.com/javase/tutorial/java /nutsandbolts/datatypes.html)। तो मुझे लगता है कि यह भरोसा किया जा सकता है। –

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