On Wed, 2007-05-16 at 19:44 +0200, Mark Wielaard wrote:
> Hi Christian,
>
> On Thu, 2007-05-03 at 16:32 +0200, Christian Thalinger wrote:
> > I'm writing this to the list to get some feedback and to not forget this
> > issue.
> >
> > I've written a testcase which loads all classes of the bootstrap
> > archives and it's much slower with cacao than with jamvm. Sun's RI is
> > also much faster.
> >
> > We should investigate that...
>
> That is an interesting testcase. Could you post it to the classpath
> mailinglist to get some input from other runtime experts?
Sure. This testcase was actually written to hit a bug in CACAO, that's
why there are these classcasts.
- twisti
---
import java.io.*;
import java.util.*;
import java.util.zip.*;
public class thread extends Thread {
boolean doit = true;
String classname = null;
public thread() {
new A().start();
new B().start();
}
public static void main(String[] argv) {
new thread();
}
class A extends Thread {
public void run() {
try {
sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
sub(new Integer(1));
}
void sub(Object o) {
Integer io = null;
int i = 0;
while (doit) {
try {
io = (Integer) o;
} catch (ClassCastException cce) {
cce.printStackTrace();
System.out.println("while loading " + classname);
}
i++;
}
System.out.println("done: io=" + io + ", i=" + i);
}
}
class B extends Thread {
public void run() {
String bootclasspath = System.getProperty("sun.boot.class.path");
for (String s: bootclasspath.split(":")) {
System.out.println("file: " + s);
File f = new File(s);
ZipFile zf = null;
try {
zf = new ZipFile(f);
} catch (IOException ioe) {
ioe.printStackTrace();
}
System.out.println("size: " + zf.size());
for (Enumeration<? extends ZipEntry> entries = zf.entries();
entries.hasMoreElements(); ) {
ZipEntry entry = entries.nextElement();
String name = entry.getName();
if (name.endsWith(".class")) {
int index = name.indexOf(".class");
classname = name.substring(0, index).replace("/", ".");
try {
Class.forName(classname, false, null);
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
}
}
System.out.println("classes loaded");
}
doit = false;
}
}
}