



The " Heroes of Java " series took a short break. After the first 20 it is time to start over in 2013. This time it is kind of an unexpected hero. During my ongoing search for the real heroes of Java I stumbled upon Coleen.is a Hotspot veteran and hers and the work of many others build the cornerstones of every single line of Java ever written. I'm very happy that she joined my little series. Thanks to Marcus for getting me in touch!I am a software engineer working on the Hotspot Java Virtual Machine at Oracle. I work in the runtime group and we work on startup and footprint optimizations, the interpreter, class file parsing, verification, internal class data representation, and interfaces to GC and the compilers. I've been doing this for a long time - 12 years at Sun then Oracle and about 30 years in the industry on various compilers for other languages.My official title is "principle engineer" although most of us talk about our titles as IC , where I think IC is "Individual Contributor".I don't care a whole lot about titles. Most of my co-workers are quite senior and have the same or one better title.I had a high school French. I still remember some of the words but that's it.My daily bootstrap process takes a couple hours. Sometimes it takes longer so I don't make it into the office and work from home instead to save the driving. I usually drink 3-4 cups of coffee while checking personal email and organizing some activity for my teenage son. I also have my Oracle email configured in Thunderbird, so when I run out of home email, I start answering these emails. I might do some code reviews and reply to colleagues in Stockholm or Australia or an earlier time zone.No, I really haven't figured out why I would have a twitter account or follow anyone on it (sorry this is boring).I have just installed Ubuntu 12.04 on some Dell 4 way system in my office. We have racks of different types of virtual machines at Oracle somewhere that we use to test on different platforms. It's all virtualized now.In general, I am as about as low tech as it gets. I mostly use vim, make, gcc and gdb. grep -r is my IDE.My co-workers are all over the world. We have very long email threads. I do have some coworkers in my office and we actually talk in person and can draw pictures on whiteboards to explain things. This is my preference but it's impractical for everyone. Some of us use IM which is better than email.I keep lists with arrows in front of these items in a spiral notebook. Was this supposed to be some high tech gadget? I'm the boringest tech person ever.Well, working at Oracle on the JVM is really fun. We don't seem to run out of ideas for improvements and code to write. My husband's company Abinitio would be great to work at because they all went to the Galapagos but they won't say what they do.I am actually not coding in Java. The Hotspot JVM is written in C++. There's an openjdk project to write the JVM, or at least parts of it in Java, called Graal. That would be cool to work on when it's closer to a product.I haven't had time to learn and use dynamic languages yet, but all the runtime support underneath these dynamic languages is in the JVM. We've had to change assumptions that we've made for Java to accommodate these new languages. It's totally cool that there's this whole world on top of the JVM but it's also a lot of pressure to make it faster, better, smaller and more reliable.Last summer, a few of us completed a project where we moved Java class metadata from the Java heap, aka PermGen, to a different heap area. This probably seems counter intuitive to a Java programmer because now we have to use explicit memory management and not let the garbage collector do the work. There were a lot of problems with managing our JVM memory through the garbage collectors and the memory for class metadata was limited by this. We were finding many applications that load too many classes and would get OutOfMemoryError on PermGen which wasn't recoverable. This project changed most of the JVM and removed a ton of code, which is sort of my favorite thing to do.I tend to be a code environmentalist - reduce, reuse and recycle and all that. Most of my programming mistakes have been to remove code and find out that it was in fact needed.