2015-12-18 42 views
7

में स्मृति आवंटन कैसे होता है जैसा कि हम जानते हैं कि जावा के विपरीत, स्कैला में वस्तु के रूप में सब कुछ है।स्कैला

उदाहरण के लिए हम

object A{ 
    val arg1=1 
    def myFun(arg2:Int)=arg1 
} 

class A{ 
    val arg1=1 
    def myFun(arg2:Int)=arg1 
} 

trait A{ 
    val arg1=1 
    def myFun(arg2:Int)=arg1 
} 
  • have- अब स्केला में सब कुछ एक वस्तु तो है के रूप में कैसे स्मृति आवंटन जगह ले जाएगा?
  • क्या सब कुछ संदर्भ चर के अलावा ढेर में स्मृति प्राप्त करने जा रहा है?
  • और जावा में जब क्लास इंस्टेंस बनाया गया है तो उस वर्ग में विधियों और चर को ढेर में स्मृति मिलती है। सिंगलटन ऑब्जेक्ट्स के लिए यह कैसे होता है?
  • यदि सब कुछ ढेर में है, तो क्या यह प्रदर्शन को प्रभावित नहीं करेगा?
  • जावा में, मेमोरी को 5 अनुभागों में विभाजित किया गया है यानी हेप, स्टैक, मेथडएरिया इत्यादि। स्केल में क्या, स्मृति आवंटन कैसे होता है?
+0

तो आपका प्रश्न कम या कम है: स्मृति प्रबंधन पैमाने पर कैसे काम करता है? –

+2

प्रकार एकीकृत हैं, लेकिन इसका मतलब यह नहीं है कि रनटाइम पर "सब कुछ एक वस्तु है"। –

उत्तर

5

स्काला JVM पर रन और यह जावा पुस्तकालय के आधार पर है।

स्केला फ़ाइल (*। स्केला) जावा वर्ग बाईटकोड को संकलित और JVM पर इन चलाया जाएगा। आपके उदाहरण के लिए:

public class A extends java.lang.Object{ 
    private final int arg1; 
    public int arg1(); 
    public int myFun(int); 
    public A(); 
} 
:

public class A$ extends java.lang.Object{ 
    public static final A$ MODULE$; 
    private final int arg1; 
    public static {}; 
    public int arg1(); 
    public int myFun(int); 
    public A$(); 
} 

class A{ 
    val arg1=1 
    def myFun(arg2:Int)=arg1 
} 

(javap द्वारा विघटित बाईटकोड) करने के लिए अनुवाद किया जाएगा:

object A{ 
    val arg1=1 
    def myFun(arg2:Int)=arg1 
} 

(javap द्वारा विघटित बाईटकोड) करने के लिए अनुवाद किया जाएगा


trait A{ 
    val arg1=1 
    def myFun(arg2:Int)=arg1 
} 

(javap द्वारा विघटित बाईटकोड) करने के लिए अनुवाद किया जाएगा:

public interface A{ 
public abstract void $line5$$read$A$_setter_$arg1_$eq(int); 

public abstract int arg1(); 

public abstract int myFun(int); 

} 

तो अपने अन्य स्मृति प्रश्नों के लिए, मुझे लगता है कि के रूप में जावा ही है।

+0

थैंक्स @chengpohi, मैं आपका जवाब स्वीकार करता हूं। लेकिन क्या आप कृपया यह स्पष्ट कर सकते हैं कि इस लाइन का क्या अर्थ है: ** "सार्वजनिक स्थिर अंतिम ए $ MODULE $;" ** और क्यों वैल arg1 = 1 को _private अंतिम int arg1 में परिवर्तित किया जा रहा है; _ और _public int arg1() ; _ मेरा मतलब है कि मैं निजी अंतिम int agr1 में रूपांतरण को समझता हूं; लेकिन सार्वजनिक int arg1() के साथ स्पष्ट नहीं हूं। –