Some ancient comments from Carmack:
CHAPTER 2. JOHN CARMACK - THE BOOT INTERVIEW John Carmack Archive 22 Interviews 2.6 Page 6
Alex St. John: When are you going to do a Java version of Quake?
John Carmack: Java has a lot of wonderful advantages as a program development language and I do plan, after we ﬁnish Quake 2, to go off and develop something signiﬁcant in Java to feel-up the language. I haven’t done hands-on work with Java, but I think there’s really something there to be gained. We don’t have a lot of ties holding us back at id and we developed on this crazy NextStep platform for a long time and we’re willing to push OpenGL or maybe jump to Rhapsody. And if Java pans out the way I think it might, then we might write a lot of things in Java.
Alex St. John: Do you think Java is fast enough for games?
John Carmack: This is one thing that I don’t really understand about the whole Java marketplace and the way it’s being presented. It also ties to this bytecode portability stuff and there’s no damn good reason for that. Why don’t we just have Java and X86 compilers? I like the language–I don’t care about bytecode.
Alex St. John: The portability of Java isn’t a feature. It’s just a language, and it would be nice to have a better compiler.
John Carmack: Exactly. I think it’s a language that in many ways is better than C++ and I’d rather develop something in that, but it’s all tied-up in this non-proprietary, run-anywhere type of thing, which is not what I care about.
Alex St. John: The whole Java virtual machine thing doesn’t turn you on?
John Carmack: No, not at all. I like the language. In general, I’m willing to spend performance to make a better product. And that’s one thing that has taken me awhile to kind of mature to because all game programmers start off on ”I can do this in 10 cycles!” And games have gotten so complex where Quake is practically an operating system. It’s this architecture, with all these different things that plug-in different ways, and it’s not just this little thing that draws to the screen.
And, from another old Gamasutra article on the development of the Trinity project:
"John Carmack considered using Java in id's games for quite some time, ever since he announced that the company was leaning towards client-downloadable code for the Trinity project."
However, at the time, key platforms like Linux did not have the Java technology that is available to them today and was the main reason John did not choose Java. Had nothing to do with performance:
"Ironically, it was Java portability problems that led id to develop the Quake 3 custom VM. Sun's promise of "write once, run anywhere" did not hold for the Invocation API on important server platforms, so Carmack decided to abandon the embedded JVM he had planned to use."
He then goes on to state:
"Having made the decision to do my own interpreter, I feel much more at ease not having to rely on anyone else's external code. When it comes around to the next development cycle, I will make the Java decision again."
Having built their own VM, it was easier for John and company to continue their homebrew technology. Had Java technology, back then, been where it is today, we would not be having this discussion
So, many reasons why John didn't use Java. In my discussions with him, he believes that Java would be fine just what's the point? They have their own tech and he likes to build such stuff. Remember, John doesn't build games, he builds tech that id Software uses to make games.