Hi, > > The problem is that the program is spending almost all of the time > > generating stack traces, millions and millions of them. > > And one reason for that is pointless class lookups in > the GTK peer code. > > Look at this: > > Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning > (JNIEnv *env, jobject obj __attribute__((unused)), jint rightGlyph, jint leftGlyph, jlong fnt) > { > ... > > cls = (*env)->FindClass (env, "java/awt/geom/Point2D$Double"); > method = (*env)->GetMethodID (env, cls, "<init>", "(DD)V"); > return (*env)->NewObjectA(env, cls, method, values); > } > > Now, this method only returns a pair of points, and it would have been > trivial to pass a 2-element array into it, fill, with x and y, and > return the same array. But no, we do a class lookup on > java/awt/geom/Point2D$Double and call its constructor with two > double values. Or we could cache the MIDs and FIDs, like is recommended in all good JNI books. /Roman -- Dipl.-Inform. (FH) Roman Kennke, Software Engineer, http://kennke.org aicas Allerton Interworks Computer Automated Systems GmbH Haid-und-Neu-Straße 18 * D-76131 Karlsruhe * Germany http://www.aicas.com * Tel: +49-721-663 968-48 USt-Id: DE216375633, Handelsregister HRB 109481, AG Karlsruhe Geschäftsführer: Dr. James J. Hunt