当前位置:  开发笔记 > 编程语言 > 正文

渴望java类加载

如何解决《渴望java类加载》经验,为你挑选了2个好方法。

我正在尝试对在各种硬件和操作系统平台上运行的JVM进行一些基准测试.我已经创建了一个算法来练习我感兴趣的JVM部分,并打算多次运行这个算法来找到一个不错的平均值.

当我运行基准测试时,我发现第一次运行比后续运行时间长得多:

132ms
86ms
77ms
89ms
72ms

我怀疑这些类是懒得加载的,在第一次运行时会产生很大的开销.虽然这确实是我认为每个JVM都是独一无二的功能,但在这一点上我并不感兴趣.

是否有标准的命令行选项或属性来急切加载类?还是有人有其他理论吗?



1> Peter Lawrey..:

最简单的方法是忽略第一次运行.(如果这是一个有效的事情)注意:如果你运行相同的代码10,000次,它将进一步编译代码,你会得到更好的结果,所以你可能想忽略一些微基准测试的前10K结果.

一些JVM支持急切加载,但我不认为Sun的JVM会这样做.



2> TofuBeer..:

如果要强制加载类,请执行以下操作:

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();
            }
        }
    }
}

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有