How did the J9 in OpenJ9 get its name?

It has nothing to do with Java 9 and everything to do with history.

A memory corruption bug in Object Technology International(OTI)’s ENVY/Smalltalk product is the ultimate source of the name ‘J9’.

During the development of ENVY/Smalltalk, a notorious memory corruption issue came up. It took a long time to track down, as everytime the code was visually reviewed the use of a constant for 8K looked fine. Ultimately, it was discovered that the constant was incorrectly defined as 8096 instead of 8192.

From @Andrew_Low:

The 8096 original was 4096 (correctly 4k). Incorrectly upgraded to 8k. That 8096 sized buffer was a thread stack, so it mostly worked.

In honour of this bug, two things were done: 1) you could no longer define multiples of 1K by hand; you had to use 8*1K, and 2) the entire naming convention for all of the source code for the Smalltalk Virtual Machine (VM) in ENVY/Smalltalk was prefix with K8. Why K8 and not 8K? Because you couldn’t start a name with a number.

In 1996, IBM purchased OTI, initially for their Smalltalk expertise and products. At the time, Smalltalk was believed to be the enterprise platform of the future. It is a language that is still considered by many to be the best Object Oriented (OO) language ever conceived.

Java came onto the scene and began to domintate the enterprise market. IBM and OTI shifted their focus away from Smalltalk and onto Java. The OTI team leveraged the existing Smalltalk VM to start executing Java bytecodes. In so doing they updated the name from K8 to J9. ‘K’ back one letter in the alphabet to ‘J’ because Java was seen to be an inferior OO language when compared to Smalltalk, and ‘8’ to ‘9’ (or up 1) because the virtual machine that was being built was going to be better than the one before.

The name J9 has stuck ever since and now lives on in ‘Eclipse OpenJ9’.