相关疑难解决方法(0)

Guava Charmatcher静态初始化缓慢

更新:看起来我的13.0.1正在调用来自这个差异化CharMatcher的代码.

http://code.google.com/p/guava-libraries/source/diff?spec=svn69ad96b719d7cd3d872a948d7454f17b816a21c2&r=464b0cfab7c3b6713c35e6f3ae7426542668c77b&format=side&path=/guava/src/com/google/common/base/CharMatcher.java

我似乎遇到了番石榴的Charmatcher的问题.我目前正在编写一些JUnit测试,我注意到第一次测试花费了一些时间(15+秒),但未来的测试大致相同(.3秒),大多数测试都是通过相同的码.

我对代码的分析表明,Guava图书馆中的Charmatcher似乎是罪魁祸首.看起来CharMatcher中有一些静态初始化代码可能是它花费这么长时间的真正原因.有什么办法可以禁用或优化这种行为吗?维基页面或帮助文件中是否存在我遗漏的内容?

Guava版本13.0.1,系统:Linux 64,Eclipse 3.6.1

编辑:我用以下代码构建了一个测试应用程序:

import com.google.common.base.CharMatcher;

public class Main {
    public static void main(String[] args) {
        // Using system instead of stopwatch to isolate library.
        long startTime = System.currentTimeMillis();
        CharMatcher.is(' ');
        long endTime = System.currentTimeMillis();
        System.out.println("took " + String.valueOf(endTime-startTime) + " ms");

        startTime = System.currentTimeMillis();
        CharMatcher.is('d');
        endTime = System.currentTimeMillis();
        System.out.println("2nd took " + String.valueOf(endTime-startTime) + " ms");
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致以下输出:

took 15945 ms
2nd took 0 ms
Run Code Online (Sandbox Code Playgroud)

我在eclipse中运行了这个减去JUnit框架和google的guava库.我还打包了一个可执行的char并收到了类似的结果.在我通过它运行一个分析器后,我会再回来进行第二次编辑.

谢谢你的帮助.

编辑2:分析结果:

Main.main(String[])                                                                  22,556 ms
com.google.common.base.CharMatcher.<clinit>()                                     22.556 ms …
Run Code Online (Sandbox Code Playgroud)

java guava

9
推荐指数
1
解决办法
1202
查看次数

标签 统计

guava ×1

java ×1