zafena development

December 2, 2011

I have been following the CACAO JVM development on ARM since 2008, back then CACAO was one of the first alternative JVM, to be used instead of Hotspot in combination with the OpenJDK 6 class libraries.

CACAO history dates back to 1997-1998 when CACAO was one of the first JIT compiler to be used instead of SUN's Java JVM interpreter.

Today CACAO are being used in combination with OpenJDK 6 on architectures like ARM, MIPS and PPC where Oracle have not yet released code for a GPL licensed Hotspot JIT. CACAO are popular, see the Debian OpenJDK-6 popularity contest chart where up to 80% of all the Debian OpenJDK 6 JVM users have picked CACAO to be installed. This trend kept on since the beginning of 2009 up to the summer of 2011.

Carpe diem CACAO JVM!

During the summer of 2011 Oracle released OpenJDK 7 and CACAO users started to abandon the JVM in favour for JamVM, the reason "why?" are that CACAO depends on the HPI API that have been removed from the OpenJDK 7 code base. This means that CACAO currently only work in combination with the "classic" OpenJDK 6. The second black cloud for CACAO JVM on ARM was that all major ARM Linux distributions started to move from "armel" towards the new "armhf" ABI something CACAO do not support. JamVM here provided the ARM Linux distributions and users with a stable and future proof alternative.

If we for a moment forget about the future and focus on today CACAO are in great shape when built from CACAO hg HEAD.

  • CACAO are FAST,
  • CACAO are stable, thanks to Stefan Ring who have been diligent on fixing bugs found in the CACAO JIT codegen.
  • CACAO are fresh, the current CACAO hg HEAD contains the rewritten, "still unreleased" C++ version of CACAO its a totally different JVM compared to the last C based release of CACAO 0.99.4.

If you want to experience the CACAO JVM in its finest the do run the latest development version of CACAO in combination with OpenJDK 6, built using the current IcedTea6 head. Run it on ARM "armel", PPC or MIPS and experience a fast responsive JVM burning brighter than ever before!


  1. Thanks a lot for the plug, Xerces!

    I guess you really meant to encourage folks to have a go at helping out with CACAO development. It's a nice experience working on something that's actually used by a large project (Ubuntu). CACAO may seem quite dead — broken web page, IRC channel idle (although I hang out on #openjdk during European office hours), mailing list traffic very low, and also the frequency of changesets is rather low.

    The most glaring sign of (apparent) deadness though is the lack of official releases. That's a bit unfortunate, and I could really do better on this part. It's just that I prefer working on CACAO itself rather than working on the surrounding "community" stuff. Maybe the latter would be better overall; it's just not what I enjoy most.

    So I'm trying to make CACAO work as well as possible in the mean time, and I know its days are counted as long as no JDK7 support is forthcoming. Volunteers anyone? ;)


    Comment by Stefan Ring — December 3, 2011 @ 14:57

  2. I tested today to run CACAO inside a Debian armhf chroot, and to my and the CACAO maintainer, Stefan Rings surprise.. CACAO did work on debian armhf! ... it was unexpected since we have not put effort into getting it working.

    java -server -version
    java version "1.6.0_24"
    OpenJDK Runtime Environment (IcedTea6 1.11.1) (6b24-1.11.1-3)
    OpenJDK Zero VM (build 20.0-b12, mixed mode)

    java -jamvm -version
    java version "1.6.0_24"
    OpenJDK Runtime Environment (IcedTea6 1.11.1) (6b24-1.11.1-3)
    JamVM (build 1.6.0-devel, inline-threaded interpreter with stack-caching)

    java -cacao -version
    java version "1.6.0_24"
    IcedTea Runtime Environment (IcedTea6 1.11.1) (6b24-1.11.1-3)
    CACAO (build 1.1.0pre2, compiled mode)

    wget ; unzip ; java CaffeineMarkEmbeddedApp

    root@panda-debian-sid-armhf:/# gcc -E -v
    Using built-in specs.
    Target: arm-linux-gnueabihf
    Configured with: ../src/configure -v --with-pkgversion='Debian 4.6.2-16' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-objc-gc --disable-sjlj-exceptions --with-arch=armv7-a --with-float=hard --with-fpu=vfpv3-d16 --with-mode=thumb --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
    Thread model: posix
    gcc version 4.6.2 (Debian 4.6.2-16)

    root@panda-debian-sid-armhf:/# java -cacao CaffeineMarkEmbeddedApp
    Sieve score = 5061 (98)
    Loop score = 8048 (2017)
    Logic score = 18318 (0)
    String score = 3423 (708)
    Float score = 4052 (185)
    Method score = 14177 (166650)

    Comment by Xerxes Rånby — March 1, 2012 @ 12:57

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress