I have recently begun physics graduate school. My own programming background is in Java, but I haven't done much computational physics of a caliber that required me to implement things *well*. My research advisor states that most of the numerical simulation that takes place in our field (quantum gravity) is written in C or FORTRAN. He doesn't know whether this is because the researchers are all old and crotchety and therefore don't use Java simply because it's too new-fangled, or if there are legitimate disadvantages to programming numerical physics in Java. He asked me to look into it, because far more incoming students these days seem to know Java than know C or FORTRAN. Some specific questions I have: 1. What good scientific computing libraries are there for Java? Are there good libraries implementing things like Runge–Kutta, LU decomposition, and other common algorithms of typical numerical techniques? 2. Java doesn't have in-built support for complex variables or true multidimensional matrices. How much of a problem is this? What are the workarounds, and how good are they? 3. Then there's the obvious question of speed. I know that just-in-time compilation has been getting better and better, but I'm sure that running on the JVM must still have a cost compared to compiled machine code. Please share any thoughts, or direct me to good places where this topic may have been discussed before. Thank you very much.