当前位置:  开发笔记 > 编程语言 > 正文

如何在scala中进行内存分配

如何解决《如何在scala中进行内存分配》经验,为你挑选了1个好方法。

我们知道,与java不同,scala将所有东西都作为对象.

例如我们有 -

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
}

现在因为scala中的所有内容都是一个对象所以内存分配将如何发生?

除了引用变量之外,一切都会在堆中获得内存吗?

在java中创建类实例时,该类中的方法和变量将获取堆中的内存.Singleton Objects如何在这里发生?

如果一切都在堆中,它会不会影响性能?

与Java一样,Memory分为5个部分,即Heap,Stack,MethodArea等.在scala中,内存分配是如何进行的?

chengpohi.. 5

ScalaJVM上运行,它基于Java库.

scala文件(*.scala)将被编译为java类字节码并在JVM上运行它们.为你的例子:

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

将被翻译为(由javap反编译字节码):

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反编译字节码):

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

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);

}

所以对于你的其他记忆问题,我认为它与Java相同.



1> chengpohi..:

ScalaJVM上运行,它基于Java库.

scala文件(*.scala)将被编译为java类字节码并在JVM上运行它们.为你的例子:

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

将被翻译为(由javap反编译字节码):

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反编译字节码):

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

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);

}

所以对于你的其他记忆问题,我认为它与Java相同.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有