The name JESSICA was coined by an MPhil student in SRG Lab, Mr. Marchy Ma in 1999, which stands for ``Java-Enabled Single-System Image Computing Architecture''. The first JESSICA prototype was created by Marchy running on Solaris clusters. Later he ported this to Linux clusters. JESSICA adopted Kaffe 1.0.9's interpreter and supported thread migration in interpretive execution mode. The shared memory in JESSICA directly used the commercial version of Treadmarks page-based DSM. The system was one of the three old DJVM projects (the other two IBM cJVM and Java/DSM).
The leaders in SRG Lab, Dr. Cho-Li Wang and Dr. (now Prof.) Francis Lau were pleased with the outcome and decided to push JESSICA further. A group of five people, including Marchy, Benny, Zoe, Weijian and Wenzhang were formed into the new JESSICA group. Marchy was working as a parttime consultant for the problems of JESSICA at that time. Benny and Zoe were MPhil students. And Weijiang and I (Wenzhang) were fresh Ph.D. students.
A group meeting was held, and several key issues were raised in the autumn of 2000. The discussion focused on the new technologies of JVM and DSM. JIT compilers, which were new to everyone in the group, were raised. Dr. Lau joked that if anyone could get JIT compiler work on the new JESSICA project, he could get the degree immediately. The other problem was the shared memory support for JESSICA, which aimed to solve the bad performance of JESSICA on top of Treadmark. The people in the group were welcome to take one of the challenges as his main research direction. Weijian, working on embedded systems before, favoured much to work on shared memory. I took the JIT part, since I was curious at JIT compilers. I worked on communication system for supercomputers before during my master degree study in the Chinese Academy of Science. Since I have covered many books on programming language, compiler before and I was confident that I could solve all this.
A few research assistants also continued to work to test and debug the old JESSICA. And finally they packed it up for release. The new JESSICA project was carried out by Weijian and I in parallel. And after discussion, the new Kaffe 1.0.6 code was chosen as the JVM to be based on. The reason was it was open source and had attracted many research work. And the new code will have no relationship with the old JESSICA code. The project was named "JESSICA-2" initially.
The following months passed quickly as we were tracing the Kaffe JVM code. Weijian and I were working independently on our work, discussing some thoughts in the JVM code sometimes. After that we started our design and implementation independently. Weijian was focusing on supporting a shared memory space, which later we called Global Object Space. And he was trying to work in interpreter to avoid the complexity of JIT compilers. I was working on supporting thread migration in JIT compilers. At that time, we hoped that our work could merge into one new JESSICA. Marchy was not working for JESSICA2. Benny was working on DSM independentlyfor his Ph.D. title after transfering from MPhil to Ph.D. program. And Zoe was investing independent garbage collection algorithms for JVM.
One day in late 2001, my system began to work. I was very pleased to see the Java threas could be migrated to a remote node and printed out ``hello world'' correctly on the screen. It was so amazing. Besides the thread migration in JIT compilers, I also wrote my own code to support GOS too. I was intended to write a simple GOS. But it turned out that my GOS is full-fledged since many ideas were from the discussion between me and Weijian. My system could be run without Weijian's GOS. It turned out to be a full workable version of JESSICA2 Distributed JVM.
Soon after that, I wrote a paper ``JESSICA2: A Distributed Java Virtual Machine with Transparent Thread Migration Support''. We officially named it as ``JESSICA2'' since it saves the typing effort for the hyphen between ``JESSICA'' and ``2'' and JESSICA2 resembles more like DB2 and others. The first draft was rejected by Usenix JVM'02 conference. The Usenix committees mostly thought Kaffe was a toy JVM and the work on clusters was not interesting to them, the core JVM experts. Some reviewers simply rejected it without giving comments. Based on some of the comments, I improved my system and the paper. We submitted again to Cluster conference 2002. It turned out to be strongly accepted. I was happy to have a trip to Chicago to present the work in the autumn of 2002. The thread migration mechanism was based on a simple native code instrumentationin Kaffe's JIT compiler. And I wrote a paper on this mechanism to ICPP'03 and got accepted. Weijian also did a few valuable work on his prototypes for object sharing pattern detections. And he later boosted his system from interpreter mode to JIT compiler mode. His sytem used initial placement for thread distribution without realizing thread migration.
In the autumn of 2003, I made a major revision to the GOS in JESSICA2 and added more supports for I/O redirections. In the spring of 2004, I found a better solution to support thread migration in JIT compilers. That is, the recompilation approach. I quickly implemented this and used it as the default thread migration technique in JESSICA2. During 2004, I began to wrap up my Ph.D. thesis on JESSICA2. After finishing the final revision, JESSICA2 was tidied up and the source code was released in May, 2005 since a few people from both academia and industries were interested in JESSICA2. I created the download website in my homepage, hoping to get fundings from investors :-)
The JESSICA2 still has much room for improvement. In Septermber 2005, new students are coming in our group to improve JESSICA2. The story of JESSICA2 will continue.
By Wenzhang Zhu