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