首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >急切的java类加载

急切的java类加载
EN

Stack Overflow用户
提问于 2009-03-01 10:19:32
回答 6查看 4.4K关注 0票数 9

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

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

代码语言:javascript
复制
132ms
86ms
77ms
89ms
72ms

我的怀疑是类的装入很慢,在第一次运行时会产生很大的开销。虽然这确实是我认为每个JVM都独一无二的特性,但目前我对此并不感兴趣。

是否有一个标准的命令行选项或属性来急切地装入类?或者还有没有其他的理论?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-03-01 10:26:59

最简单的做法是忽略第一次运行。(如果这样做是合理的)注意:如果您运行相同的代码10,000次,它将进一步编译代码,您将获得更好的结果,因此您可能希望忽略某些微基准测试的前10K结果。

一些JVM支持即时加载,但我不认为Sun的JVM支持。

JWrapper支持AOT https://www.jwrapper.com/features

票数 5
EN

Stack Overflow用户

发布于 2009-03-01 16:33:00

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

代码语言:javascript
复制
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();
            }
        }
    }
}
票数 5
EN

Stack Overflow用户

发布于 2009-03-01 13:23:20

Java基准测试的第一条规则:一个方法运行的前15000次(大约)并不有趣。

这个帖子包含一些可靠的建议:How do I write a correct micro-benchmark in Java?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/599602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档