2012-07-26 59 views
0

给出一个包含有一个对象与肥胖型号码实例的性状(100文件,每个文件100行)存储在非延迟VAL成本初始化

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

什么初始化成本?假定有100个Repository消费者,每个DAO实例一个(即“对象X扩展仓库”* 100)。对象X,Y,Z消费者每个都会招致100个DAO实例的开销吗?

鉴于Repository使用者将只需要引用DAO实例的一个子集,我正在考虑采用惰性初始化方法,但试图看看懒惰与非懒惰的代价之间存在什么折衷初始化。

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

回答

1

据我所知,objects是懒洋洋的初始化。例如与

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

观察:

val x = new Repository {} // pasa nada 

现在只有:

x.dao // pasa algo 
+0

+1,嗯,很好,我推往懒VAL如果是这样的话;即对于每个存储库消费者我“支付”以在访问dao对象容器时初始化存储库中的所有100个DAO。但是,如果DAO实例本身是懒惰创建的,那么我只会承担我实际使用的DAO成本。 – virtualeyes 2012-07-26 15:48:06