Scala 中如何进行内存分配
How memory allocation takes place in 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 中,当创建 class 实例时,class 中的方法和变量将获得堆中的内存。这里的单例对象是如何发生的?
- 如果一切都在Heap中,会不会影响性能?
- 与Java一样,内存分为5个部分,即Heap,Stack,MethodArea等。在scala中,内存分配是如何进行的?
Scala 运行s 在 JVM 上,它基于 Java 库。
scala 文件(*.scala) 将被编译为 java class 字节码和 运行 这些 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 将一切都作为对象。
例如我们有-
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 中,当创建 class 实例时,class 中的方法和变量将获得堆中的内存。这里的单例对象是如何发生的?
- 如果一切都在Heap中,会不会影响性能?
- 与Java一样,内存分为5个部分,即Heap,Stack,MethodArea等。在scala中,内存分配是如何进行的?
Scala 运行s 在 JVM 上,它基于 Java 库。
scala 文件(*.scala) 将被编译为 java class 字节码和 运行 这些 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.
相同