加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何在scala中进行内存分配

发布时间:2020-12-15 03:02:43 所属栏目:Java 来源:网络整理
导读:我们知道,与 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不同,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中,内存分配是如何进行的?

解决方法

Scala在JVM上运行,它基于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相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读