gpt4 book ai didi

java - scala中的内存分配是如何发生的

转载 作者:IT王子 更新时间:2023-10-28 23:37:59 26 4
gpt4 key购买 nike

我们知道,与 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 中,当创建类实例时,该类中的方法和变量会在堆中获取内存。这里的单例对象是如何发生的?
  • 如果一切都在 Heap 中,会不会影响性能?
  • 和 Java 一样,内存分为 5 个部分,即 Heap、Stack、MethodArea 等。那么在 scala 中,内存分配是如何发生的?

最佳答案

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 相同。

关于java - scala中的内存分配是如何发生的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34349871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com