java – 如何在scala中进行内存分配

前端之家收集整理的这篇文章主要介绍了java – 如何在scala中进行内存分配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们知道,与 java不同,scala将所有东西都作为对象.

例如我们有 –

  1. object A{
  2. val arg1=1
  3. def myFun(arg2:Int)=arg1
  4. }
  5.  
  6. class A{
  7. val arg1=1
  8. def myFun(arg2:Int)=arg1
  9. }
  10.  
  11. trait A{
  12. val arg1=1
  13. def myFun(arg2:Int)=arg1
  14. }

>现在因为scala中的所有内容都是对象所以内存分配将如何发生?
>除了引用变量之外,一切都会在堆中获得内存吗?
>在java中创建类实例时,该类中的方法和变量将获取堆中的内存. Singleton Objects如何在这里发生?
>如果一切都在堆中,它会不会影响性能
>与Java一样,Memory分为5个部分,即Heap,Stack,MethodArea等.在scala中,内存分配是如何进行的?

解决方法

Scala在JVM上运行,它基于Java库.

scala文件(* .scala)将被编译为java类字节码并在JVM上运行它们.为你的例子:

  1. object A{
  2. val arg1=1
  3. def myFun(arg2:Int)=arg1
  4. }

将被翻译为(由javap反编译字节码):

  1. public class A$extends java.lang.Object{
  2. public static final A$MODULE$;
  3. private final int arg1;
  4. public static {};
  5. public int arg1();
  6. public int myFun(int);
  7. public A$();
  8. }
  1. class A{
  2. val arg1=1
  3. def myFun(arg2:Int)=arg1
  4. }

将被翻译为(由javap反编译字节码):

  1. public class A extends java.lang.Object{
  2. private final int arg1;
  3. public int arg1();
  4. public int myFun(int);
  5. public A();
  6. }
  1. trait A{
  2. val arg1=1
  3. def myFun(arg2:Int)=arg1
  4. }

将被翻译为(由javap反编译字节码):

  1. public interface A{
  2. public abstract void $line5$$read$A$_setter_$arg1_$eq(int);
  3.  
  4. public abstract int arg1();
  5.  
  6. public abstract int myFun(int);
  7.  
  8. }

所以对于你的其他内存问题,我认为它与Java相同.

猜你在找的Java相关文章