JRockit Mission Control @ OOW 2009

There are a bunch of JRockit related sessions at OOW 2009! Joy!

Here are the ones I am involved in:

Session ID Session Title Date/Time Room

S309689

The Next Generation of Profiling and Diagnostics Tools

Sunday
10/11/2009
10:30 – 11:30

Hilton Hotel
Golden Gate 4/5

S309676

Advanced Java Diagnostics and Profiling with Oracle JRockit Mission Control

Monday
10/12/2009
11:30 – 12:30

Hilton Hotel
Continental Ballroom 4

Other exciting sessions:

Session ID Session Title Date/Time Room
S309305 Oracle JRockit: What’s New and What’s Coming Monday
10/12/2009
16:00 – 17:00
Marriott Hotel
Salon 7
S309680 Latency Is a Bug: Tuning Your Java Virtual Machine for Optimal Performance Monday
10/12/2009
10:15 – 11:15
Hilton Hotel
Continental Ballroom 4
S309331 A Next-Generation Platform for Virtualized Java Wednesday
10/14/2009
13:00 – 13:30
Moscone South
Room 309

Scariest Night Ever

Last 32 hours have been a nightmare. Malin called me at work around 10 a.m. yesterday and told me Natalie wasn’t herself. She was really lax and not responding. I immediately took the bike to the drug store, bought a breast pump and went home. After spoon-feeding her some milk it looked like she started to come around. She didn’t get to keep the milk for long though. We tried a few times, but every time we tried she vomited after a little while. We called the doctor who told us to bring her in.

At the hospital (SöS) she got some routine anti-biotic treatment and they took a lot of different tests. When we changed diapers, we discovered quite a bit of blood in her feces and they put us in a room for observation. Later she underwent a battery of X-rays. The X-ray was probably not so traumatic for Natalie, but holding her tiny little body beneath that X-ray machine really broke my heart.

After getting the results from the X-rays, Natalie had to get an ultra sound examination. The ultra sound revealed intestinal invagination – part of the intestines had folded in on themselves (telescoping).

They wrapped Natalie up in blankets and strapped her to an ambulance stretcher. Malin and Natalie went by ambulance to another hospital (Astrid Lindgren’s) where the pediatric surgeons in Stockholm reside. Natalie looked so tiny and cute on that stretcher that I’d probably have laughed if circumstances would have been different. I followed in my car.

At Astrid Lindgren’s the specialist put her in another X-ray machine and the team started filling her with contrast fluid. Sometimes the pressure from the contrast fluid can be used to make the intestines sort themselves out without having to resort to surgery. She had some morphine in her drip by then, so she didn’t seem to mind terribly.

In this case it worked out, and they never had to cut her open. The procedure was done by 3 a.m. in the morning. By this time Natalie was totally exhausted from all the vomiting, the morphine and the contrast fluid procedure. They kept us for observation and we stayed the night. Today we arrived back at home. A little while ago we were, probably for the very first time, immensely happy to find that she’d done #2. A lot.

Welcome to the world!

Less than two days ago my daughter Natalie was borne. She is 51 cm tall and weighs in at 3850g. Malin, Natalie and I are all exhausted from the experience, but otherwise fine.

She is the cutest little thing and has already managed to wrap me all around her tiny little finger.

Mobile Broadband

Woho! First post from the bus! Yeah, well, I lost my drivers license due to speeding. Anyway, did my first code check-in from the bus just now. Constant access to the internet – yay! I’ll probably regret this. Well, at least Malin will regret me having this. 🙂

What do I do for a living?

I often get asked what I work with, and I’ve always had a hard time answering that. The problem usually starts when I introduce the concept of a Java Virtual Machine. So I thought I’d write a few lines on the evolution on computing to sort of explain how what I work with came about.

At the dawn of electrical computing programming was done by manually closing and opening electrical circuits. This evolved into punching holes into paper cards, representing the closed and open circuits. Eventually better methods of providing the instructions to the processing units came along, but at the hardware level the processing units still need to get its instructions as sequences of ones and zeroes. At first assemblers appeared that had simple mnemonics, or textual symbols, that were more or less a handy but direct representation of the sequences of ones and zeroes. Higher level programming languages, such as C, appeared that provided means of expressing the meaning of the program, the semantics, using better and easier to read syntax. Other programs, so called compilers, were responsible for analyzing the meaning of the program and translating it into machine code. As the processors became more advanced, so did the compilers, and today it is very complicated for a programmer to, even by hand, produce better and more efficient programs by hand in assembly, than the machine code produced by an optimizing compiler. Even with intimate knowledge of the processor architecture, it can be very hard to, for instance, decide upon the best way to schedule the instructions to best utilize parallel instruction pipes.

Java is a modern programming language, and represents another leap in abstraction. Its syntax is reminiscent to that of C, one of the most popular and successful imperative programming languages to date. Using a C-like syntax made the transition to Java easier for programmers already knowledgeable in C, and helped drive adoption.

Quite unlike C, however, Java programs are not compiled into machine code that the hardware which will execute the program can understand. Java programs are instead translated to platform independent byte code, which another piece of software, the Java Virtual Machine, or JVM, translates into machine code. You can view the Java Virtual Machine as a hardware abstraction layer, with its own machine code. The JVM does the final translation from the Java byte code to the machine code of the underlying hardware. Since the JVM is translating the Java byte code while it is running, the JVM has more information about the runtime characteristics of the program running in the JVM than a static compiler could ever have. This means that there is more information available to do advanced optimizations.

At the beginning, Java got a reputation for being very slow. The early JVMs were interpreting and translating the Java byte code line by line. This was rather inefficient. Today, high performance JVMs like JRockit are analyzing the semantics of the Java program while it is executing. It translates the program into machine code using a JIT (Just In Time) compiling strategy; translating method by method into machine code as it is required. It uses an internal profiler to find out how the application is executing, and dynamically does optimizations to the running program; in effect recompiling methods while the program is running. A modern JVM has a high performance, adaptive memory management system that efficiently handles the allocation and reclaiming of memory for the developer. Today, a Java program running in a modern JVM can outperform a well written C program.

So, to finally answer the question, I work with JRockit – one of the fastest and most advanced JVMs in the world.

Married!

Yay! Now it’s finally done! Me and Malin are officially hitched. For some preliminary pictures, see the photo album. 🙂

The ceremony was beautiful, and the dinner was filled with wonderful and touching speeches. We’re truly blessed to have such wonderful friends and family.

Now we’re off to El Gouna, Egypt, for honey moon and diving. See y’all when we get back!