初始化成本

时间:2012-07-26 15:03:53

标签: performance scala initialization

给出一个包含一个具有大量实例的对象的特征(100个文件,每100行)存储在非惰性val中

trait Repository {
  object dao {
    val a = new A
    val b = new B
    val c = new C
    ...
  }
}

初始化成本是多少?假设有100个Repository使用者,每个DAO实例一个(即“object X extends Repository”* 100)。对象X,Y,Z消费者是否会产生100 DAO实例的开销?

鉴于Repository的消费者只需要引用DAO实例的子集,我正在考虑采用延迟初始化方法,但试图看看在延迟与非延迟初始化的成本之间的权衡。

如果在JVM容器启动时,所有100个DAO实例都被初始化,那么非延迟方法将避免延迟初始化的不必要开销。但是,如果为每个Repository使用者创建了100个DAO实例,最好是延迟并减少内存使用量。

1 个答案:

答案 0 :(得分:1)

据我所知,objects被懒惰地初始化了。例如

trait Repository {
  object dao {
    val a = { println( "aqui" ); 33 }
  }
}

观察:

val x = new Repository {}  // pasa nada

仅限现在:

x.dao // pasa algo