Die statische Initialisierung von Guava Charmatcher ist langsam

UPDATE: Es sieht so aus, als würde mein 13.0.1 Code von diesem abweichenden CharMatcher aufrufen.

http://code.google.com/p/guava-libraries/source/diff?spec=svn69ad96b719d7cd3d872a948d7454f17b816a21c2&r=464b0cfab7c3b6713c35e6f3ae7426542668c77b&format=side/commage/c

Ich habe offenbar ein Problem mit Guavas Charmatcher. Ich schreibe gerade einige JUnit-Tests und bemerke, dass der erste Test etwas Zeit in Anspruch nimmt (mehr als 15 Sekunden), aber die zukünftigen Tests sind alle ungefähr gleich (0,3 Sekunden), wobei ein Großteil der Tests denselben Test durchläuft Code.

Meine Analyse des Codes hat gezeigt, dass der Charmatcher in Guavas Bibliothek der Schuldige zu sein scheint. Es sieht so aus, als ob es in CharMatcher ein bisschen statischen Initialisierungscode gibt, der der wahre Grund dafür sein könnte, dass es so lange dauert. Kann ich dieses Verhalten auf irgendeine Weise deaktivieren oder optimieren? Fehlt mir etwas auf den Wiki-Seiten oder in den Hilfedateien?

Guava Version 13.0.1, System: Linux 64, Eclipse 3.6.1

BEARBEITEN: Ich habe eine Test-App mit folgendem Code erstellt:

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

Dies führte zu folgender Ausgabe:

took 15945 ms
2nd took 0 ms

Ich habe dies in Eclipse minus dem JUnit-Framework und nur Googles Guaven-Bibliothek ausgeführt. Außerdem habe ich ein ausführbares Zeichen gepackt und ähnliche Ergebnisse erhalten. Ich werde mit einer zweiten Bearbeitung zurückkommen, nachdem ich einen Profiler durchlaufen habe.

Danke für jede Hilfe.

Bearbeiten 2: Ergebnisse der Profilerstellung:

Main.main(String[])                                                                  22,556 ms
com.google.common.base.CharMatcher.<clinit>()                                     22.556 ms                                    
    com.google.common.base.CharMatcher.precomputed()                                 22,550 ms                      
        com.google.common.base.Platform.precomputeCharMatcher(CharMatcher)           22,550 ms
            com.google.common.base.CharMatcher.precomputedInternal()                  22,550 ms
                com.google.common.base.CharMatcher.slowGetChars()                    13,638 ms
                com.google.common.base.CharMatcher.setBits(CharMatcher$LookupTable)  8,911 ms

Antworten auf die Frage(4)

Ihre Antwort auf die Frage