The following magic program breaks on most x86 platforms.
Sparc 32-bit:----------
Runs with 6meg of stack; dies with stackoverflow with 4meg for both client and server, -Xint more or -Xmixed.
WinNT:----------
Dies with stackoverflow for both client & server, in mixed and -Xint modes for both, up to -Xss128m.
At -Xss256m, client -Xint crashes; server -Xint gets a
Fatal: Unable to create signal thread (may be due to resource limit)
Linux:-----------
RUNS -client with no other stack options.
Dies with -client -Xint with stackoverflow.
Dies with -client -Xint -Xss128meg with stackoverflow.
Dies with -server, -server -Xint, -server -Xint -Xss128meg, -server -Xss128meg with stack overflow
SolX86:-----------
Runs with 4meg of stack; dies with stackoverflow with 4meg for both client and server, -Xint more or -Xmixed.
###@###.### 2002-04-26
import java.util.regex.*;
public class JavaBenchmark {
public static void main(String [] args)
{
Matcher Regex1 = Pattern.compile("^(a|b|c|d|e|f|g)+$").matcher("");
Matcher Regex2 = Pattern.compile("^[a-g]+$").matcher("");
long TimesToDo = 2000;
StringBuffer Temp = new StringBuffer();
for (int i = 500; i > 0; i--)
Temp.append("abababdedfg");
String TestString = Temp.toString();
// Time first one...
long Count = TimesToDo;
long StartTime = System.currentTimeMillis();
while (--Count > 0)
Regex1.reset(TestString).matches();
double Seconds = (System.currentTimeMillis()-StartTime)/1000.0;
System.out.println("Alternation takes " + Seconds + " seconds");
// Time second one...
Count = TimesToDo;
StartTime = System.currentTimeMillis();
while (--Count > 0)
Regex2.reset(TestString).matches();
Seconds = (System.currentTimeMillis()-StartTime)/1000.0;
System.out.println("Character Class takes " + Seconds + " seconds");
}
}