2015-12-18 39 views
7

java'nın aksine, scala'nın her şeyi nesne olarak bildiğinin farkındayız. ÖrneğinScala'da bellek ayırma işlemi nasıl yapılır

biz scala herşeyin bir nesne bellek ayırma gerçekleşecek nasıl bu kadar olduğu gibi Şimdi

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 
} 
  • var-?
  • Her şey, bellekte referans değişkenlerinden başka bir şekilde bellekte yer alacak mı?
  • Ve sınıf örneği daha sonra bu sınıfta yöntem ve değişkenleri oluşturulan java
  • yığın bellek alır. Burada bir Singleton nesnesi için nasıl olur?
  • Her şey Yığındaysa, performansı etkilemez mi?
  • Java'da olduğu gibi, bellek 5 bölüme yani Yığın, Yığın, YöntemArea vb. Bölümlere ayrılır. Scalada ne var, bellek ayırma işlemi nasıl gerçekleşir?
+0

Yani sorunuz az ya da çok: Bellek yönetimi nasıl çalışır? –

+2

Türler birleştirilmiş, ancak bu çalışma zamanında "her şey bir nesne" anlamına gelmez. –

cevap

5

ScalaJVM üzerinde çalışır ve Java kitaplığı üs.

scala dosyası (*. Skalası) java sınıf baytkoduna derlenmiş ve JVM bu çalışacaktır. senin örneğin:

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 tarafından kaynak koda bayt) çevrilir:

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

(javap tarafından kaynak koda bayt) çevrilir


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

public abstract int arg1(); 

public abstract int myFun(int); 

} 

böylece diğer bellek soruları için, ben Java ile aynı olduğunu düşünüyorum:
trait A{ 
    val arg1=1 
    def myFun(arg2:Int)=arg1 
} 

(javap tarafından kaynak koda bayt) çevrilir.

+0

Thanx @chengpohi, Cevabınızı kabul ediyorum. Ama bunu açıklamak lütfen bu hat ne anlama geldiğini: ** "public static final A $ MODÜLÜ $;" ** ve ayrıca neden val arg1 = 1 final int ARG1 _private dönüştürülür ediliyor; _ ve _PUBLIC int ARG1() ; _ Özel final int agr1'e dönüşümü anlıyorum; ancak public int arg1() ile açık değilim. –

İlgili konular