在应用程序启动时强制scala.Predef初始化而不影响代码

时间:2014-01-06 14:05:02

标签: java scala static-initialization predef

scala.Predef类的初始化是懒惰的重量级操作,可能会导致应用程序出现意外减速,并且在时间安排(如编程竞赛)时会出现问题。

val a = new Array[Integer](10)
a(5) = 3 //slowdown on this line

因此,如果不对代码进行更改,我是否可以仅使用scala编译器或VM选项关闭应用程序启动时的懒惰和强制scala.Predef初始化?

1 个答案:

答案 0 :(得分:0)

不,你不能。你可以通过调用它来初始化一个对象,就像这个

Predef    // ensures the body of Predef is initialized
val a = new Array[Integer](10)
a(5) = 3

但是,您可能还没有初始化ArrayOps中涉及的a.apply类。延迟类初始化是JVM的一个属性。如果你做基准测试,那就是为什么你通常先给它一个“预热”运行,以便首先加载所有相关的类。