强制JVM抢先加载和初始化类以减少延迟?

时间:2013-04-01 19:58:29

标签: java performance jvm classloader

在一个大型Java桌面应用程序中,我是开发人员,我注意到,当你刚刚启动程序时,大多数GUI功能和操作在你第一次激活它们时会有所滞后。第二次单击相同的功能,它会立即生效。我目前的假设是,以下一个或多个运行时操作会导致这种影响(根据我的知识,大致从最接近的顺序):

  • 从磁盘加载.class文件(或从JAR解压缩)
  • 类字节码验证
  • 字节码的JIT编译
  • 类静态初始化

如果程序在所有内容上都有那种可爱的活泼感,那显然会更好,而不仅仅是你已经点击过一次的按钮。所以,我有的问题是:

  1. 如何判断这些操作中的哪一个(或者其他一些我没有想过的操作)是主要的影响因素?我知道如何使用VisualVM进行CPU和堆分析,但我不知道如何分析这样的半隐藏JVM因素。
  2. 假设上述操作是造成这种延迟的原因,减少它的一种方法可能是让一个低优先级的后台线程遍历程序中的所有类和最常用的库并反复触摸它们强制他们进行分类加载和初始化。理想情况下,它会首先触及常用的类,并将不太常用的类放到后面的过程中。这是个好主意吗?
  3. 如果是这样,有没有人写过这样做的东西?
  4. 如果没有,实施它的最简单方法是什么?

0 个答案:

没有答案