Most Java "interpreters" are actually
just in time compilers which spot where the main loops are and then compile it. If a program runs for a short while then it will all get compiled. End result is a program that runs almost as quick as a compiled program. My board game programs will search 1/2 million board positions in under a second and that's using an antique of a computer. This compares well with assembly language programs that I've written (on much older processors). The garbage collection is quite good in Java - I don't give it a second thought but then it depends on how you write the programs as to how much garbage needs to be collected. Similarly there is no need to use the OO features of the language - I don't