In case anyone cares, did a bit of testing and found:
(1) Running in Eclipse using "Run" was about 3 times slower than running
"java" on command line (on my particular machine) on the same class
files. So yes, environment, JVM version etc make a BIG difference
straight up.
(2) If you want to write a class reading from a stream with a field
holding the current index being read from and you want to read 4 bytes,
its faster to update index once than updating 4 times.
class ByteBuf {
private int i = 0;
private byte[] buf = ...;
int slowerReadInt32() {
byte b1 = buf[i++];
byte b2 = buf[i++];
byte b3 = buf[i++];
byte b4 = buf[i++];
return (b1 << 24) | ((b2 & 0xff) << 16) | ((b3 & 0xff) <<
8) | (b4 & 0xff);
}
int fasterReadInt32() {
byte b1 = buf[i];
byte b2 = buf[i+1];
byte b3 = buf[i+2];
byte b4 = buf[i+3];
i += 4;
return (b1 << 24) | ((b2 & 0xff) << 16) | ((b3 & 0xff) <<
8) | (b4 & 0xff);
}
}
Upon reflection of course it will be faster. The first function has to
update the field 'i' per increment in case there is an index out of
bounds exception. The second only updates the field once.
Doing Google searches on Java vs C++ performance I found some Wikipedia
etc pages, that I don't trust much. There were a few subjective
sounding statements in there, and some comments talked about the new JIT
that might speed Java up. The only comments I almost trust were Java
probably does new/delete faster than C++ but tends to consume more
memory, and Java JIT might get code to same raw execution speed to same
as C++ (but 4 times slower is not unexpected).
So my next meaningless microbenchmark will be to try Scala with lazy
vals pulled from a byte[] (and so potentially avoiding the need for
converting bytes in a buffer into int's in the first place).
Alan
--
You received this message because you are subscribed to the Google Groups "The Java
Posse" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/javaposse?hl=en.