我们知道,与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
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相同.
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相同.