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