我正在尝试对在各种硬件和操作系统平台上运行的JVM进行一些基准测试.我已经创建了一个算法来练习我感兴趣的JVM部分,并打算多次运行这个算法来找到一个不错的平均值.
当我运行基准测试时,我发现第一次运行比后续运行时间长得多:
132ms
86ms
77ms
89ms
72ms
Run Code Online (Sandbox Code Playgroud)
我怀疑这些类是懒得加载的,在第一次运行时会产生很大的开销.虽然这确实是我认为每个JVM都是独一无二的功能,但在这一点上我并不感兴趣.
是否有标准的命令行选项或属性来急切加载类?还是有人有其他理论吗?
最简单的方法是忽略第一次运行.(如果这是一个有效的事情)注意:如果你运行相同的代码10,000次,它将进一步编译代码,你会得到更好的结果,所以你可能想忽略一些微基准测试的前10K结果.
一些JVM支持急切加载,但我不认为Sun的JVM会这样做.
如果要强制加载类,请执行以下操作:
public class Main
{
static
{
loadClasses();
}
public static void main(final String[] argv)
{
// whatever
}
private static void loadClasses()
{
final String[] classesToLoad;
// even better, read them from a file and pass the filename to this method
classesToLoad = new String[]
{
"foo.bar.X",
"foo.bar.Y",
}
for(final String className : classesToLoad)
{
try
{
// load the class
Class.forName(className);
}
catch(final ClassNotFoundException ex)
{
// do something that makes sense here
ex.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3676 次 |
| 最近记录: |