Smart linking and compilation

Since all classes used by the application are present at compilation time and we know that it doest not use dynamic class loading, we can use the option -smart to enable smart linking and to enable further optimizations by the compiler:

  > jamaica -compile -smart CaffeineMarkEmbeddedApp
      
Jamaica Builder Tool
 + CaffeineMarkEmbeddedApp.c
 + CaffeineMarkEmbeddedApp.makefile
Classfile compaction gain: 89.494606% (241514 ==> 25372)
gcc -O2 -o CaffeineMarkEmbeddedApp.o -c CaffeineMarkEmbeddedApp.c ...
gcc -o CaffeineMarkEmbeddedApp CaffeineMarkEmbeddedApp.o /home/...
strip CaffeineMarkEmbeddedApp
    
  
  > ls -l CaffeineMarkEmbeddedApp
  -rwxr-xr-x 1 user group 243736 May 24 08:58 CaffeineMarkEmbeddedApp
  

The code size is reduced significantly since many methods within the application are never called. This affects mainly the method from the standard Java classes. The result is an executable file of around 243KB, only one sixth of the original executable that was obtained without smart linking. Additionally to the improved binary codesize, the performance could be enhanced as well since the compiler was able to perform additional optimizations such as direct binding of dynamic calls:

  > ./CaffeineMarkEmbeddedApp
  Sieve score = 5674 (98)
Loop score = 8960 (2017)
Logic score = 24462 (0)
String score = 4618 (708)
Float score = 3664 (185)
Method score = 9858 (166650)
Overall score = 7693