It seems like I can get around the garbage collector bug if I use -XX:+UseConcMarkSweepGC JVM argument.
Now I’m having more Soot problems, but they actually make sense. In addition to being cross-platform, DrJava is also “cross-JDK version”: We support JDK versions 5 and 6 and OpenJDK version 6. In the past, we also supported JDK version 4 and various versions of JSR-14 (adding generics to Java 4).
The adapter to the JDK 5 compiler is compiled with and linked against JDK 5; the adapter to the JDK 6 compiler is compiled with and linked against JDK 6. At runtime, we will never use a JDK 5 adapter with a JDK 6 compiler, and vice versa. But when I’m generating the call graph with JDK 6, Soot is now also looking at the JDK 5 adapter.
The JDK 5 com.sun.tools.javac.util.Log
class had a String getText(String a, Object[] b)
method, but that has disappeared in JDK 6. Therefore, Soot is not finding a method it expects.
I guess I will have to remove the cross-version capability for the purpose of the call graph creation.
Update
On Windows and Mac, using -XX:+UseConcMarkSweepGC actually seems to help. On Linux, I’m still getting a segfault.
Pingback: A Concurrent Affair » Blog Archive » Java Bug 4396719 Work-Around? | Drakz Free Online Service