Home
        JamaicaVM 6.0 — User Manual
         Contents
1.                      79         TETTO 80  8 2 1   Usage of the Memory Analyzertool              80   Cu 80  baia 81  10 82  8 2 5 Constant Garbage Collection Work               84    8 2 6 Comparing dynamic mode and constant GC work mode    85  8 2 7 Determination of the worst case execution time of an al            SM 86                 ane a             te    ee 86   9 Debugging Support 89  9 1 Enabling the Debugger Agent                      89  oor ee ee 90  ere ae ee d ee a 90   93  10 1 Realtime programming with the     5                  93   rrr 96  TT re ee ee           96  Sain             aw         96   10 3 2 Thread Priorities                         97   10 3 3 Runtime checks for NoHeapReal  meThread          97   10 3 4 Static In  itializers                         97   deed ne dg dee 98   10 4 Strict RISJ                                           98    10 4 44 Use of Memory Areas                      98    6 CONTENTS    10 4 2 Thread priorities                         98   10 4 3 Runtime checks for NoHeapRealtimeThread          99   10 4 4 Static Initializers     2    ee ee 99               99   s          xt 99  11 Realtime Programming Guidelines 101  11 1 General                                 101  11 2 Computational Transparency                        101  11 2 1 Efficient Java Statements                     102  NM 104  ponen 105  ere 107   11 2 5 Operations Causing Class Loading                108   s ee oe CE Box wea Rc E ees  ended 109  11 3 1 Real Tim
2.           The runtime performance for the built application is slightly better compared to  an interpreted version using jamaicavm slim  buta stronger performance in   crease will be achieved by compilation as shown in the next section below      gt    caffeine interpret  Sieve score   416  98   Loop score   395  2017   Logic score   419  0   String score   2127  708   Float score   331  185   Method score   200  166650   Overall score   461           gt  jamaicavm slim CaffeineMarkEmbeddedApp  Sieve score   346  98    Loop score   277  2017    Logic score   411  0    String score   1699  708    Float score   276  185    Method score   212  166650    Overall score   397    7 1 2 Using Compilation    Compilation can be used to increase the runtime performance of Java applications  significantly  Compiled code is typically about 20 to 30 times faster than inter   preted code  However  due to the fact that Java bytecode is very compact com   pared to machine code on CISC or RISC machines  fully compiled applications    7 1  CODE SIZE VS  RUNTIME PERFORMANCE 61    require significantly more memory  This is why we recommend using a profile as  decribed in    instead of fully compiling the application     Using Default Compilation    If none of the options interpret  compile  or useProfile is specified  the  default compilation will be used  The default means that a pre generated profile  will be used for the system classes  and all application classes will be compiled  fully  This
3.       The JVMTI is a replacement for the Java Virtual Machine Debug Interface  JVMDI  which  has been deprecated     Chapter 10    The Real Time Specification for  Java    JamaicaVM supports the Real Time Specification for Java V 1 0 2  RTSJ   see  1      The specification is available at The API documen     tation of the JamaicaVM implementation is available online at http   www   aicas com jamaica doc rtsj_api  and is included in the API docu     mentation of the Jamaica class library   jamaica home   doc   jamaica  api index html     The RTSJ resides in package javax realtime  Itis generally recommended  that you refer to the RTSJ documentation provided by aicas since it contains a  detailed description of the behavior of the RTSJ functions and includes specific  comments on the behavior of JamaicaVM at places left open by the specification     10 1 Realtime programming with the RTSJ    The aim of the Real Time Specification for Java  RTSJ  is to extend the Java  language definition and the Java standard libraries to support realtime threads  i e    threads whose execution conforms to certain timing constraints  Nevertheless   the specification is compatible with different Java environments and backwards  compatible with existing non realtime Java applications    The most important improvements of the RTSJ affect the following seven ar   eas     e thread scheduling     e memory management     93    94 CHAPTER 10  THE REAL TIME SPECIFICATION FOR JAVA    e synchronization   
4.      will im   prove the builder performance     JAMAICA BUILDER HEAPSIZE Maximum heap size of the jamaica program  itself in bytes  If the initial heap size of the builder is not sufficient  it will  increase its heap dynamically up to this value  To build large applications   you may have to set this maximum heap size to a larger value  e g      640M        JAMAICA BUILDER JAVA STACKSIZE Java stack size of the jamaica pro   gram itself in bytes     JAMAICA BUILDER NATIVE STACKSIZE Native stack size of the jamaica  program itself in bytes     14 5  EXITCODES       Normal termination       Error       NIe       Invalid argument       64    Insufficient memory       100          Internal error          Table 14 1  Jamaica Builder  jamaicah and numblocks exitcodes    14 5 Exitcodes    179    Tab  lists the exit codes of the JamaicaVM Builder  The jamaicah and num   blocks tools use the same exitcodes  If you get an exit code of an internal error  please contact aicas support with a full description of the tool usage  command    line options and input     180 CHAPTER 14  THE JAMAICA BUILDER    Chapter 15    The Jamaica ThreadMonitor    The JamaicaVM ThreadMonitor enables to monitor the realtime behaviour of ap   plications and helps developers to fine tune the threaded Java applications run   ning on Jamaica run time systems  These run time systems can be either the Ja   maicaVM or any application that was created using the Jamaica Builder    The ThreadMonitor tool collects and 
5.     Window  gt  Preferences   Section Jamaica  Add the installation directo   ries of all distributions you wish to use    The plug in creates Java Runtime Environments  JREs  for all added Jamaica  distributions  A JRE comprises the Java class libraries  Javadoc documentation  and the virtual machine  A Jamaica distribution additionally contains classes and  documentation for the RTSJ    After setting up a Jamaica distribution as a JRE  it can be used like any other  JRE in Eclipse  For example  it is possible to choose Jamaica as a project specific  environment for a Java project  either in      Create Java Project wizard   or by changing JRE System Library in the properties of an existing project   It is also possible to choose a Jamaica as default JRE for the workspace    If you added a new Jamaica distribution and its associated JRE installation is  not visible afterwards  please restart Eclipse     5 3 Setting Virtual Machine Parameters    The JamaicaVM Virtual Machine is configured through runtime parameters  which      for example     control the heap size or the size of memory areas such as scoped  memory  These settings are controlled via environment variables  refer to section  8 13 5 for a list of available variables   To do so  create or open a run configuration  of type Java Application in your project  The environment variables can be  defined on the tab named Environment     5 4 Building applications with Jamaica Builder    The plug in extends Eclipse with sup
6.    1  maximum number of threads attached via JNI          LE VERS          Keyword  PROF    Values    ON Groups  all    1  version of Jamaica the profile was created with    56 CHAPTER 6  PERFORMANCE OPTIMIZATION    6 3 2 Example    We can sort the profiling output to find the application methods where most of the  execution time is spent  Under Unix  the 25 methods which use the most execu   tion time  in number of bytecode instructions  can be found with the following  command      gt  grep PROFILE  HelloWorld prof   sort  rn  k2   head  n25  PROFILE  7186606  21   sun nio cs UTF_8SEncoder encode     PROFILE  7186606  21   sun nio cs UTF_8SEncoder encode     PROFILE  7186606  21   sun nio cs UTF_8SEncoder encode     PROFILE  5705490  17    java lang String getChars II CI     PROFILE  5705490  17    java lang String getChars II CI     PROFILE  5705490  17    java lang String getChars II CI     PROFILE  1323056  3   java lang StringBuilder append      PROFILE  1323056  3   java lang StringBuilder append      PROFILE  1323056  3   java lang StringBuilder append      PROFILE  1200060  3   java io BufferedWriter write Lj     PROFILE  1200060  3   java io BufferedWriter write Lj     PROFILE  1200060  3   java io BufferedWriter write Lj             PROFILE  960096  2   java nio Buffer position I Lja     PROFILE  960096  2   java nio Buffer position I Lja     PROFILE  960096  2   java nio Buffer position I Lja     PROFILE  880044  2   sun nio cs StreamEncoder write     PROFILE  880
7.    145      lt class gt   lt package gt           lt method gt   lt method gt          Sh     destination           o    lt          gt         lt name gt        gt    timezone         setProto   cde   se   smart      showExcl   compile            lt ti            s   cols   ldc    closed    udedFeatu     in         protocol    lt protocol gt     crementalCompilation     showIncludedFeatures                inline      lt n gt      res    interpret   Xint      optimise         optimiz        lt type gt       heapSize   n   K M        target  lt platform gt      maxHeapSize  lt n gt  K M                      maxHeaps       heapSizeIncrement  lt n gt  K M      javaStackSize cn   K    nativeStackSize   n      maxNumThreads c  n       numJniAttachableThreads c  n      threadPreemption cn      finalizerPri   pri       1   K M           numThreads  lt n gt        timeSlice  lt n gt      heapSizeFromEnv  lt var gt         izeFromEnv  lt var gt          numThrea       dsFromE       heapSizeIncrementFromEnv  lt var gt      javaStackSizeFromEnv   var      nativeStackSizeFromEnv  lt var gt    nv  lt var gt     maxNumThreadsFromEnv  lt var gt          numJniAttac   finalizerPr       hableT                              lt      priMapFromE       nv  lt var gt      hreadsFrom  iFromEnv  lt var gt      jp gt   lt sp gt    lt jp gt   lt sp gt             analyse         analyze    lt t    analyzeFrom   constGCwork   atomicGC      reservedMem       olerance     Env    lt var gt            FromE
8.    At the end of execution  the total number of bytecode instructions executed  by each method is written to a file with the name of the main class of the Java  application and the suffix   prof  such that it can be used for further processing    Hot spots     the most likely sources for further performance enhancements by  optimization  in the application can easily be determined using this file     6 1 1 Creating a profiling application    The compilation technology of Jamaica s builder is able to use the data generated  during profile runs using the  profile option to guide the compilation process     47    48 CHAPTER 6  PERFORMANCE OPTIMIZATION    producing optimal performance with a minimum increase in code size   Here is a demonstration of the profiler using the HelloWorld example pre   sented in   B 4  First  it is built using the  profile option         gt  jamaicabuilder  cp classes  profil interpret HelloWorld  Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1   User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed       HelloWorld   c    HelloWorld   h  Class file compaction gain  58 739178   21654255    gt  8934724     C compiling    HelloWorld__ c       HelloWorld  nc o    linking    stripping  Application memory demand will be as follows     initial max  
9.    Error codes  64   JamaicaVM failure  65   VM not initialized  66   Insufficient memory  67   Stack overflow  68   Initialization error  69   Setup failure  70   Clean up failure  71   Invalid command line arguments  72   No main class  73   Exec    failure  Internal errors  100   Serious error  HALT called  101   Internal error  102   Internal test error  103   Function or feature not implemented  104   Exit by signal  105   Unreachable code executed  255   Unexpected termination                                                                         Table 13 1  Exitcodes of the Jamaica VMs    13 6  EXITCODES 141    13 6 Exitcodes    Tab   13 1  lists the exit codes of the Jamaica VMs  Standard exit codes are exit  codes of the application program  Error exit codes indicate an error such as insuf   ficient memory  If you get an exit code of an internal error please contact aicas  support with a full description of the runtime condition or  if available  an example  program for which the error occurred     142 CHAPTER 13  THE JAMAICA VIRTUAL MACHINE COMMANDS    Chapter 14    The Jamaica Builder    Traditionally  Java applications are stored in a set of Java class files  To run an  application  these files are loaded by a virtual machine prior to their execution   This method of execution emphasizes the dynamic nature of Java applications  and allows easy replacement or addition of classes to an existing system    However  in the context of embedded systems  this approach ha
10.    IDEs  such as Eclipse and Netbeans  These are popular IDEs for the Java plat   form  Debugging is possible on instances of the JamaicaVM running on the host  platform  as well as for applications built with Jamaica  which run on an embed   ded device  The latter requires that the device provides network access    In this chapter  it is shown how to set up the IDE debugging facilities with  Jamaica  A reference section towards the end briefly explains the underlying tech   nology  JPDA  and the supported options     9 1 Enabling the Debugger Agent    While debugging the IDE   s debugger needs to connect to the virtual machine or  the running application in order to inspect the VM s state  set breakpoints  start  and stop execution and so forth  Jamaicacontains a communication agent  which  must be either enabled  for the VM  or built into the application  This is done  through the agent Lib option      gt  jamaicavm  agentlib BuiltInAgent transport dt socket      gt  address localhost 4000 server y suspend y HelloWorld    launches JamaicaVM with debug support enabled and HelloWorld as the main  class  The VM listens on port 4000 at localhost  The VM is suspended before  the main class is loaded  The user may send a command through the debugger  to resume the VM and start the user application after setting required breakpoints  etc    In order to build debugging support into an application  the builder option   agentlib BuiltInAgent    should be used  If the application is t
11.    The jamaicavmdi command is a variant of jamaicavm slim that includes  support for the JVMTI debugging interface  It includes a debugging agent that  can communicate with remote source level debuggers such as Eclipse     13 4 1 Additional options of jamaicavmdi  Option  agentlib  libname   options     The agent 1ib option loads and runs the dynamic JVMTI agent library libname  with the given options  Be aware that JVMTI is not yet fully implemented  so not  every agent will work  Jamaica comes with a statically built in debugging agent  that can be selected by setting BuiltInAgent as name  The transport layer  must be sockets  A typical example of using this option is           agentlib BuiltInAgent transport dt socket server y   suspend y address 8000     To be typed in a single line   This starts the application and waits for an incoming  connection of a debugger on port 8000  See   D 1 for further information on the  options that can be provided to the built in agent for remote debugging     13 5 Environment Variables    The following environment variables control jamaicavm and its variants     CLASSPATH Path list to search for class files     13 6  EXITCODES 139    JAMAICA SCHEDULING Select native thread scheduling mode  for Linux and  Solaris only   Available values are  OTHER     default scheduling  RR      round robin  and FIFO   first in first out        JAMAICAVM HEAPSIZE Heap size in bytes  default 2M  JAMAICAVM MAXHEAPSIZE Max heap size in bytes  default 256M    
12.    method           The XloadJNIDynamic option will cause the Builder to know which native de   clared methods calls at runtime a dynamic library  Arguments have to be separated  by spaces and enclosed in double quotes        Here are examples of class arguments  com  user MyClass com user2   x and com      An example of a method argrument is    com user MyClass toString  Ljava lang String     Option  Xinclude    dirs    The Xinclude option adds the specified directories to the include path  This  path should contain the include files generated by jamaicah for the native code  referenced from Java code  The include files are used to determine whether the  Java Native Interface  JNI  or Jamaica Binary Interface  JBI  is used to access the  native code    This option expects a list of paths that are separated using the platform depen   dent path separator character  e g                Option  XobjectFormat default   none   C   ELF   PECOFF    The XobjectFormat option sets the object format to one of default  C   PECOFF and ELF        Option  XobjectProcessorFamily type    The XobjectProcessorFamily option sets the processor type for code gen   eration  Available types are none  1386  1486  1586  1686  ppc  sparc   arm  mips  sh4 and cris  The processor type is only required if the ELF or  PECOFF object formats are used  Otherwise the type may be set to none        Option  XobjectSymbolPrefix prefix    ec 29    The XobjectSymbolPrefix sets the object symbol prefix  e g      14 3
13.   8 2 7 Determination of the worst case execution time of an al   location    As we have just seen  the worst case execution time of an allocation depends on the  amount of garbage collection work that has to be performed for the allocation  The  configuration of the heap as shown above gives a worst case number of garbage  collection work units that need to be performed for the allocation of one block of  memory  In order to determine the actual time an allocation might take in the worst  case  it is also necessary to know the number of blocks that will be allocated and  the platform dependent worst case execution time of one unit of garbage collection  work    For an allocation statement S we get the following equation to calculate the  Worst case execution time     weet S    numblocks  S    max gc units   wcet of gc unit  Where  e wcet S  is the worst case execution time of the allocation  e numblocks S  gives the number of blocks that need to be allocated    e max gc units is the maximum number of garbage collection units that need  to be performed for the allocation of one block    e wcet of gc unit is the platform dependent worst case execution time of a  single unit of garbage collection work     8 2 8 Examples    Imagine that we want to determine the worst case execution time  wcet  of an  allocation of a StringBuffer object  as was done in the HelloWorld java exam   ple shown above  If this example was built with the dynamic garbage collection  option and a heap size
14.   JNI     The Java Native Interface  JNI  is a standard mechanism for interoperability be   tween Java and native code  1      code written with other programming languages  like C  Jamaica implements version 1 4 of the Java Native Interface  Creating and  destroying the vm via the Invocation API is currently not supported     16 1 Using JNI    Native code that is interfaced through the JNI interface is typically stored in shared  libraries that are dynamically loaded by the virtual machine when the application  uses native code  Jamaica supports this on many plattforms  but since dynamically  loaded libraries are usually not available on small embedded systems that do not  provide a file system  Jamaica also offers a different approach  Instead of loading  a library at runtime  you can statically include the native code into the application  itself  1      link the native object code directly with the application    The Builder allows direct linking of native object code with the created appli   cation through the option  object fileor  XstaticLibraries file  Multi   ple files can be linked  Separate the file names with spaces and enclose the whole  option argument within      double quotes        object files containing native    code should be presented to the Builder using this option    Building an application using native code on a target requiring manual linking  may require providing these object files to the linker  Here is a short example on  the use of the Java Nat
15.   Once the unpredictability of the garbage collector has been solved  realtime pro   gramming is possible even without the need for special thread classes or the use  of specific memory areas for realtime code     Realtime Tasks    In Jamaica  garbage collection activity is performed within application threads  and only when memory is allocated by a thread  A direct consequence of this  is that any realtime task that performs no dynamic memory allocation will be  entirely unaffected by garbage collection activity  These realtime tasks can access  objects on the normal heap just like all other tasks  As long as realtime tasks use a  priority that is higher than other threads  they will be guaranteed to run when they  are ready  Furthermore  even realtime tasks may allocate memory dynamically   Just like any other task  garbage collection work needs to be performed to pay  for this allocation  Since a worst case execution time can be determined for the  allocation  the worst case execution time of the task that performs the allocation  can be determined as well     Communication    The communication mechanisms that can be used between threads with differ   ent priority levels and timing requirements are basically the same mechanisms as  those used for normal Java threads  shared memory and Java monitors     Shared Memory Since all threads can access the normal  garbage collected  heap without suffering from unpredictable pauses due to garbage collector ac   tivity  this normal 
16.   The JamaicaVM allows class files to be linked with the virtual machine code into  a standalone executable  The resulting executable can be stored in ROM or flash   memory since all files required by a Java application are packed into the stan   dalone executable  There is no need for file system support on the target platform   as all data required for execution is contained in the executable application     2 5 Native code support    The JamaicaVM implements the Java Native Interface V1 2  JNI   This allows  for direct embedding of existing native code into Java applications  or to encode  hardware accesses and performance critical code sections in C or machine code  routines  The usage of the Java Native Interface provides execution security even  with the presence of native code  while binary compatibility with other Java im   plementations is ensured  Unlike other Java implementations  JamaicaVM pro   vides exact garbage collection even with the presence of native code  Realtime  guarantees for the Java code are not affected by the presence of native code     2 6 Dynamic Linking    One of the most important features of Java is the ability to dynamically load code  in the form of class files during execution  e g   from a local file system or from a  remote server  The JamaicaVM supports this dynamic class loading  enabling the  full power of dynamically loaded software components  This allows  for exam   ple  on the fly reconfiguration  hot swapping of code  dynamic add
17.   This is done  with jamaicac  Jamaica   s version of javac  The source code resides in the  src folder  and we wish to generate byte code in a classes folder  which must  be created if not already present        mkdir classes   gt  jamaicac  d classes src HelloWorld  java    Before generating an executable  we test the byte code with the Jamaica virtual  machine     3 4  BUILDING AND RUNNING AN EXAMPLE JAVA PROGRAM 29     gt  jamaicavm  cp classes HelloWorld    Hello World   Hello World   Hello World   Hello World     Hello World   Hello World    en      Having convinced ourselves that the program exhibits the desired behaviour  we  now generate an executable with the Jamaica Builder  In the context of the Ja   maicaVM Tools  one speaks of building an application         gt  jamaicabuilder  cp classes  interpret HelloWorld  Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1   User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed       HelloWorld__ c    HelloWorld__ h  Class file compaction gain  58 893684   21654255    gt  8901266     C compiling    HelloWorld__ c       HelloWorld  nc o    linking    stripping  Application memory demand will be as follows     initial max  Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread Java stacks  128KB    8   16KB  
18.   a Ja   maica distribution provides support for the target platform that hosts the tool  chain  as well as for an embedded or real time operating system     3 4 Building and Running an Example Java Program    A number of sample applications is provided  These are located in the directory  jJamaica home target platform examples  In the following instructions it  is assumed that a Unix host system is used  For Windows  please note that the  Unix path separator character         should be replaced by V     Before using the examples  it is recommended to copy them from the instal   lation directory to a working location     that is  copy each of the directories  jamaica home   platform   examples to user home   examples  platform    The HelloWorld example is an excellent starting point for getting acquainted  with the Jamaica VM tools  In this section  the main tools are used to build an  application executable for a simple HelloWorld both for the host and target plat   forms    Below  it is assumed that the example directories have been copied to user   home   examples  host and user home  examples  target for host and target  platforms respectively     3 41 Host Platform    In order to build and run the HelloWorld example on the host platform  go to  the corresponding examples directory      gt  cd user home   examples  host    Depending on your host platform  host will be 1inux x86  windows x86 or  solaris sparc    First  the Java source code needs to be compiled to byte code
19.   purpose  The priMap option allows one to replace the default mapping used for  a target system with a specific priority mapping    The Java thread priorities are integer values in the range 1 through 127  where  1 corresponds to the lowest priority and 127 to the highest priority  Since not all  Java priorities need  or can  be mapped to system level priorities  the maximal  avialable Java priority may be less than 127  The Java priorities 1 through 10 cor   respond to the ten priority levels of jJava lang Thread threads  while prior   ities starting at 11 represent the priority levels of Realt imeThreads  package  javax realtime   The maximal priority is not available for Java threads as  it is used for the synchronization thread that permits round robin scheduling of  threads of equal priorities    Each single Java priority up to the maximal priority can and must be mapped  to a system priority  To simplify the description of a mapping a range of priorities  can be described using from     to    Example 1                  1  11 50 12  39 51  78  40 85 will cause  all java lang Thread threads to use system priority 50  while the realtime  threads will be mapped to priorities 51 through 78 and the synchronization thread  will use priority 85  There will be 28 priority levels available for threads from  javax realtime RealtimeThread    Example 2   priMap 1  52 22  104 will cause the use of system pri   orities 2  4  6  through 102 for the Java priorities 1 through 51  The sy
20.  224             dle eis 225  B 7 1 Installation                            225  Boe PUR EA EEUU RR HORIS EUR ee 225  B 8                                                         225   27  C                m 227   PP  230   233  Limitations 235  E  VMLlumiatios               RR RR  235  E2 Builder Limitations            ns 236          Internal Environment Variables    239    10    CONTENTS    Part I    Introduction    Chapter 1    Preface    The Java programming language  with its clear syntax and semantics  is used  widely for the creation of complex and reliable systems  Development and main   tenance of these systems benefit greatly from object oriented programming con   structs such as dynamic binding and automatic memory management  Anyone  who has experienced the benefits of these mechanisms on software development  productivity and improved quality of resulting applications will find them essen   tial when developing software for embedded and time critical applications    This manual describes JamaicaVM  a Java implementation that brings tech   nologies that are required for embedded and time critical applications and that are  not available in classic Java implementations  This enables this new application  domain to profit from the advantages that have provided an enormous boost to  most other software development areas     1 1 Intended Audience of This Book    Most developers familiar with Java environments will quickly be able to use the  tools provided with Jamaic
21.  6 Miscellaneous    Miscellaneous options    178 CHAPTER 14  THE JAMAICA BUILDER    Option  XignoreLineNumbers    Specifying the XignoreLineNumbers option instructs the Builder to remove  the line number information from the classes that are built into the target applica   tion  The resulting information will have a smaller memory footprint and RAM  demand  However  exception traces in the resulting application will not show line  number information     Option  agent1ib lib option val    option val     The agent lib option loads and runs the dynamic JVMTI agent library libname  with the given options  Be aware that JVMTI is not yet fully implemented  so not  every agent will work    Jamaica comes with a statically built in debugging agent that can be selected  by setting BuiltInAgent as name  The transport layer must be sockets  A  typical example would be   agentlib BuiltInAgent transport dt _  socket  server y  suspend y  address 8000  This starts the applica   tion and waits for a incoming connection of a debugger on port 8000           14 4 Environment Variables    The following environment variables control the Builder     JAMAICA The Jamaica Home directory  jamaica home   This variable sets the  path of Jamaica to be used  Under Unix systems this must be a Unix style  pathname  while under Windows this has to be a DOS style pathname     JAMAICA BUILDER MIN HEAPSIZE Initial heap size of the jamaica pro   gram itself in bytes  Setting this to a larger value  e g      512M
22.  B will prevent A and C from running   because A is blocked and C has lower priority  In fact  this is a programming error   If a thread might enter a monitor which a higher priority thread might require  then  no other thread should have a priority in between the two    Since errors of this nature are very hard to locate  the programming environ   ment should provide a means for avoiding priority inversion  The RTSJ defines  two possible mechanisms for avoiding priority inversion  Priority Inheritance and  Priority Ceiling Emulation  The Jamaica VM implements both mechanisms     Priority Inheritance    Priority Inheritance is a protocol which is easy to understand and to use  but that  poses the risk of causing deadlocks  If priority inheritance is used  whenever a  higher priority thread waits for a monitor that is held by a lower priority thread     11 5  SCHEDULING AND SYNCHRONIZATION 121             Task A  Task B  Task C  Figure 11 4  Priority Inversion  Task A  Task B  Task C       Figure 11 5  Priority Inheritance    the lower priority thread   s priority is boosted to the priority of the blocking thread     Fig  illustrates this     Priority Ceiling Emulation    Priority Ceiling Emulation is widely used in safety critical system  The priority of  any thread entering a monitor is raised to the highest priority of any thread which  could ever enter the monitor  Fig   I1 6 illustrates the Priority Ceiling Emulation  protocol    As long as no thread that holds a priority
23.  Eclipse     A  Yes  There is a plugin available that will help you to configure the Builder  download and execute your application on your target  For more infor     mation  see http    www aicas com eclipse html  For a quick    start  you can use the Eclipse Update Site Manager with the following    Update Site URL  http    www aicas com download eclipse    This conveniently downloads and installs the plugin       Does Jamaica VM support the Real Time Specification for Java  RTSJ      A  Yes  The RTSJ V1 0 2 is supported by JamaicaVM 6 0  The API documenta   tion of the implementation can be found at    jamaica doc rtsj api index html  Q  Is Linux a real time operating system     A  No  However  kernel patches exist which add the functionality for real time  behavior to a regular Linux system     A 2 Jamaica VM    Q  When I try to execute an application with the JamaicaVM I get the error mes   sage OUT OF MEMORY  What can I do     205    206 APPENDIX     FAQ     FREQUENTLY ASKED QUESTIONS    A  The JamaicaVM has a predefined setting for the internal heap size  If it is  exhausted the error message OUT OF MEMORY is printed        JamaicaVM  exits with an error code  The predefined heap size of 256MB is usually  large enough  but for some applications it may not be sufficient  You can  set the heap size via the jamaicavm options Xmxsize  via the environment  variable JAMAICAVM  MAXHEAPSIZE  e g   under bash with                      export JAMAICAVM MAXHEAPSIZE 268435456    o
24.  Emulation  PCE  can never cause deadlocks  but care has to be taken  that a monitor is never used in a thread of higher priority than the monitor  Both  protocols are efficiently implemented in the Jamaica VM     126 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES    Part III    Tools Reference    127    Chapter 12    The Jamaica Java Compiler    The command jamaicac is a compiler for the Java programming language and  is based on OpenJDK s Java Compiler  It uses the system classes of the Jamaica  distribution as default bootclasspath     12 1 Usage of jamaicac  The command line syntax for the jamaicac is as follows   jamaicac  options   source files and directories     If directories are specified their source contents are compiled  The command line  options of jamaicac are those of javac  As notable difference  the additional  useTarget option enables specifying a particular target platform     12 1 1 Classpath options  Option  useTarget platform    The useTarget option specifies the target platform to compile for  It is used to  compute the bootclasspath in case boot classpath is omitted  By default  the  host platform is used     Option  cp   classpath  path    The classpath option specifies the location for application classes and sources   The path is a list of directories  zip files or jar files separated by the platform  specific separator  usually colon            Each directory or file can specify access  rules for types between          and    P  e g     X  java     t
25.  GC     Option  reservedMemory percentage    Jamaica VM s realtime garbage collector performs GC work at allocation time   This may reduce the responsiveness of applications that have long pause times  with little or no activity and are preempted by sudden activities that require a  burst of memory allocation  The responsiveness of such burst allocations can be  improved significantly via reserved memory    If the reservedMemory option is set to a value larger 0  then a low priority  thread will be created that continuously tries to reserve memory up to the percent   age of the total heap size that is selected via this option  Any thread that performs  memory allocation will then use this reserved memory to satisfy its allocations  whenever there is reserved memory available  For these allocations of reserved  memory  no GC work needs to be performed since the low priority reservation  thread has done this work already  Only when the reserved memory is exhausted  will GC work to allow further allocations be performed    The overall effect is that a burst of allocations up to the amount of reserved  memory followed by a pause in activity that was long enough during this alloca   tion will require no GC work to perform the allocation  However  any thread that  performs more allocation than the amount of memory that is currently reserved  will fall back to the performing GC work at allocation time    The disadvantage of using reserved memory is that the worst case GC work  that 
26.  INCLUDE RTP SHELL CMD                e INCLUDE POSIX PTHREAD SCHEDULER             If WindML graphics is used  it must be included as well     e INCLUDE WINDML                   In addition  the following parameters should be set                       Parameter Value   NUM FILES 1024    DKM only   RTP FD NUM MAX 1024    RTP only   TASK USER EXC STACK SIZE   16384                  If some of this functionally is not included in the VxWorks kernel image   linker errors may occur when loading an application built with Jamaica and  the application may not run correctly     B 1 2 Installation    The VxWorks version of Jamaica is installed as described in the section Installa   tion     3 1   In addition  the following steps are necessary     Configuration for Tornado  VxWorks 5 x           e Set the environment variable WIND_BASE to the base directory of the Tor   nado installation           e We recommend you set the environment variable WIND_BASE in your boot   or login script to the directory where Tornado is installed  top level direc     tory      e Add the Tornado tools directory to the PATH environment variable  so that  tools like ccppc exe resp  ccpent ium  exe can be found             Do not use the DOS Windows Style path separator          backslash  in WIND    BASE  because some programs interpret the backslash as an escape sequence  for special characters  Use          slash  in path names     Configuration of platform specific tools  see 8 3 1 1  is only required in
27.  Java stacks  128KB    8  16KB  8176KB    511   16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  3328KB 343MB     gt  ls  s caffeine_nolibs  3569868 caffeine nolibs    About 75  of the class file data can be removed so that the resulting application  occupies only 783kB     7 2 4 Memory Required for Threads    To reduce the Non Java heap memory  one must reduce the stack sizes and the  number of threads that will be created for the application  This can be done in the  following ways    1  Reducing Java stack size    The Java stack size can be reduced via setting option javaStackSize  to a lower value than the default  typically 20K   To reduce the size to 4  kilobytes  javaStackSize 4K can be used    2  Reducing C stack size    The C stack size can be set accordingly via option nat iveStackSize     3  Disabling finalizer thread    A Java application typically uses one thread that is dedicated to running the  finalize   methods of objects that were found to be unreachable by the  garbage collector  An application that does not allocate any of such objects    7 2  OPTIMIZING RAM MEMORY DEMAND 71    may not need this finalizer thread  The priority of the finalizer thread can be  adjusted through the option finalizerPri  Setting the priority to zero    finalizerPri 0  deactivates the finalizer thread completely           Note that deactivating the finalizer thread may cause a memory leak since  any objects that have a finalize   method can no longer be reclaimed   Sim
28.  Plug In  see 8 5  provides the required setup for debug   ging with the JamaicaVM on the host system automatically  It is sufficient to  select Jamaica as the Java Runtime Environment of the project     9 3 Reference Information    Jamaica supports the Java Platform Debugger Architecture  JPDA   Debugging is  possible with IDEs that support the JPDA  Tab   9  1 shows the debugging options  accepted by Jamaica   s communication agent  The Jamaica Debugging Interface  has the following limitations     e Local variables of compiled methods cannot be examined  e Stepping through a compiled method is not supported  e Setting a breakpoint in a compiled method will silently be ignored    e Notification on field access modification is not available    9 3  REFERENCE INFORMATION 91    Create  manage  and run configurations    Attach to a Java virtual machine accepting debug connections           Bi Name       type filter text          E Common       Eclipse Application           Java Applet  v 27          Application       Main  O SpinningLogo  Ju JUnit  Jt JUnit Plug in Test                   OSGi Framework Connection Properties   v m Remote Java Application    1  Ell New configuration Host   device local  Port 4000     C Allow termination of remote VM       New configuration    Connection Type     LET    Filter matched 10 of 10 items       Figure 9 1  Setting up a remote debugging connection in Eclipse 3 5    92 CHAPTER 9  DEBUGGING SUPPORT                   Syntax Description   tr
29.  Pri   orities of normal threads may be in the range permitted forRealtimeThreads   see option priMap   Furthermore  any thread may access objects allocated on  the heap without having to fear being delayed by the garbage collector  Any  thread is safe from being interrupted or delayed by garbage collector activity  Only  higher priority threads can interrupt lower priority threads    When using Jamaica VM  it is thus not necessary to use non heap memory  areas for realtime tasks  It is possible for any thread to access objects on the  heap  Furthermore  scoped memory provided by the classes defined in the RTSJ  are available to normal threads as well    The strict semantics of the RTSJ require a significant runtime overhead to  check that an access to an object is legal  Since these checks are not needed by  Jamaica VM  they are disabled by default  However  setting strict RTSJ forces  Jamaica VM to perform these checks    If the option st rict RTSJ is set  the following checks are performed and the  corresponding exceptions are thrown    MemoryAccessError aNoHeapRealtimeThread attempts to access  an object stored in normal Java heap  a MemoryAccessError is thrown   IllegalStateException anon RealtimeThread attempts to enter     javax realtime MemoryArea or tries to access the scope stack by call   ing the methods get CurrentMemoryArea  getMemoryAreaStackDepth   getOuterMemoryArea or getInitialMemoryAreaIndex  which are de   fined in class javax realtime RealtimeThread    La
30.  _ cplusplus      fendif   fendif       The native code is implemented in JNITest c     finclude  jni h        Env xenv     jclass c     16 1  USING JNI 193       include  JNITest h   include  lt stdio h gt                 JNIEXPORT jint JNICALL   Java JNITest write 1HW lRegister JNIEnv xenv   jclass c   jint vO                    jint v1     printf  Now we could write the value  i into     memory address  x n   vl  v0    return vl     return the  written  value              Note that the mangling of the Java name into a name for the C routine is defined  in the JNI specification  In order to avoid typing errors  just copy the function  declarations from the generated header file    A C compiler is used to generate an object file  Here  gcc     the GNU C  compiler     is used  but other C compilers should also work  Note that the include  search directories provided with the option I may be different on your system    For Unix users using gcc the command line is         gt  gcc  I usr 1local jamaica target linux gnu i686 include     gt   c  m32 JNITest c    For Windows user using the Visual Studio C compiler the command line is      gt  c  Programs cl  Ic  programs jamaica target  windows x86 include   c  m32 JNITest c    Finally  the Builder can be called to generate a binary file which contains all nec   essary classes as well as the object file with the native code from JNITest c   The Builder is called by            gt  jamaicabuilder  object JNITest o JNITest  Reading co
31.  a class  calls of  static methods  accesses to static fields and the creation of an instance of a class    Setting this option causes Jamaica VM to load and link classes lazily  This  behaviour may be required to execute applications that reference classes that are  not available and that are never used during runtime  Also  it helps to reduce  startup time of an application that refers to large library code that is not actually  needed at runtime     Option  lazyFromEnv var    This option causes the creation of an application that reads its Lazy setting from  the specified environment variable  If this variable is not set  the value of boolean  option lazy will be used  The value of the environment variable must be 0  for   lazy false  or 1  for  lazy true      Option  destination                    The dest ination option specifies the name of the destination executable to be  generated by the Builder  If this option is not present  the name of the main class  is used as the name of the destination executable    The destination name can be a path into a different directory  E g       destination myproject bin application    may be used to save the created executable applicationinmyproject bin     Option  tmpdir name    The tmpdir option may be used to specify the name of the directory used for  temporary files generated by the Builder  such as C source and object files for  compiled methods      Option  resource                               This option causes the inclusio
32.  a target that executes the binary that resulted from the specific  Builder configuration    Click Invoke Ant on this target to start the application  If the ap   plication needs runtime parameters  those can be specified by clicking  configure   at the end of the arguments line                   property task s env attribute is not supported     44    CHAPTER 5  SUPPORT FOR THE ECLIPSE IDE    Part II    Tools Usage and Guidelines    Chapter 6    Performance Optimization    The most fundamental measure employed by the Jamaica Builder to improve the  performance of an application is to statically compile those parts that contribute  most to the overall runtime  These parts are identified in a profile run of the  application  Identifying these parts is called profiling  The profiling information  is used by the Builder to decide which parts of an application need to be compiled  and whether further optimizations such as inlining the code are necessary     6 1 Creating a profile    The builder s  profile option and the jamaicavmp command provide sim   ple means to profile an application  Setting the  profile option enables pro   filing  The builder will then link the application with the profiling version of the  JamaicaVM libraries    During profiling the Jamaica Virtual Machine counts  among other things  the  number of bytecode instructions executed within every method of the application   The number of instructions can be used as a measure for the time spent in each  method 
33.  an intermediary target code  allowing  easy porting to different target platforms  The Jamaica compiler is tightly inte   grated into the memory management system  allowing highest performance and  reliable realtime behavior  No conservative reference detection code is required   enabling fully exact and predictable garbage collection     22 CHAPTER 2  KEY FEATURES OF JAMAICAVM    2 9 Tools for Realtime and Embedded System De   velopment    JamaicaVM comes with a set of tools that support the development of applications  for realtime and embedded systems    e Jamaica Builder  a tool for creating a single executable image out of the  Jamaica Virtual Machine and a set of Java classes  This image can be loaded  into flash memory or ROM  avoiding the need for a file system in the target  platform     For most effective memory usage  the Jamaica Builder finds the amount of  memory that is actually used by an application  This allows both system  memory and heap size to be precisely chosen for optimal run time perfor   mance  In additon  the Builder enables the detection of performance critical  code to control the static compiler for optimal results     e Thread Monitor  enables to analyse and fine tune the behaviour of threaded  Java applications       e VeriFlux  a static analysis tool for the object oriented domain that enables  to prove the absence of potential faults such as null pointer exceptions or  deadlocks in Java programs            Thread Monitor and VeriFlux are not
34.  available for scoped memory areas javax realtime LTMemory and  javax realtime VTMemory  This memory lies outside of the normal Java  heap  but it is nevertheless scanned by the garbage collector for references to the  heap    Objects allocated in scoped memory will never be reclaimed by the garbage  collector  Instead  their memory will be freed when the last thread exits a the  scope     Option  scopedMemorySizeFromEnv var    The scopedMemorySizeFromEnv option enables the application to read its  scoped memory size from the environment variable specified within  If this vari        168 CHAPTER 14  THE JAMAICA BUILDER    able is not set  the scoped memory size specified using  scopedMemorySize  n will be used     Option  physicalMemoryRanges      range    range     The RawMemory and PhysicalMemory classes in the javax realtime  package provide access to physical memory for Java applications  The memory  ranges that may be accessed by the Java application can be specified using the  option physicalMemoryRanges  The default behavior is that no access to  physical memory is permitted by the application    The physicalMemoryRanges option expects a list of address ranges  Each  address range is separated by      and gives the lower and upper address of the  range  lower   upper  The lower address is inclusive and the upper address is  exclusive  Le   the difference upper lower gives the size of the accessible area   There can be an arbitrary number of memory ranges    Example 1  
35.  cause a potentially high  overhead for exiting this scope  The finalizers of objects that are allocated in  ImmortalMemory will never be executed    As an alternative to finalizers  the consequent use of finally clauses in Java  code to free unused resources at a predefined time is highly recommended  Using  finalizers may be helpful during debugging to find programming bugs like leakage  of resources or to visualize when an object   s memory is recycled  In a production  release  any finalizers  even empty ones  should be removed due to the impact they  have on the runtime and the potential for memory leaks caused by their presence              11 4 3 Configuring a Realtime Garbage Collector    To be able to determine worst case execution times for memory allocation opera   tions in a realtime garbage collector  one needs to know the memory required by  the realtime application  With this information  a worst case number of garbage  collector increments that are required on an allocation can be determined  see 818    Automatic tools can help to determine this value  The heap size can then be        lected to give sufficient headroom for the garbage collector  while a larger heap  size ensures a shorter execution time for allocation  Tools like the analyzer in the    116 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES    JamaicaVM help to configure a system and find suitable heap size and allocation  times     11 4 4 Programming with the RTSJ and Realtime Garbage Col   lection  
36.  ceiling emulation monitor blocks   any thread that tries to enter such a monitor can be sure not to                        quently  the use of priority ceiling emulation automatically ensures that    system  is deadlock free          If any other thread owns the monitor  its priority will have been boosted to the ceiling priority   Consequently  the current thread cannot run and try to enter this monitor     122 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES             Task A  Task B  Priority Ceiling  Task C  Figure 11 6  Priority Ceiling Emulation Protocol  Lock y   Task A  Task B       Lock x  Lock y     Figure 11 7  Deadlocks are possible with Priority Inheritance    Priority Inheritance vs  Priority Ceiling Emulation    Priority Inheritance should be used with care  because it can cause deadlocks when  two threads try to enter the same two monitors in different order  This is shown  in Fig  Thus it is safer to use Priority Ceiling Emulation  since when used  correctly  deadlocks cannot occur there  Priority Inheritance deadlocks can be  avoided  if all programmers make sure to always enter monitors in the same order    Unlike classic priority ceiling emulation  the RTSJ permits blocking while  holding a priority ceiling emulation monitor  Other threads that may want to enter  the same monitor will be stopped exactly as they would be for a normal monitor   This fall back to standard monitor behavior permits the use of priority ceiling  emulation even for monitors that are 
37.  classes will be added dynamically   Setting option closed to true enables such optimizations  a significant enhance   ment of the performance of compiled code is usually the result    The additional optimization performed when closed is set include static  binding of virtual method calls for methods that are not redefined by any of the  classes built into the application  The overhead of dynamic binding is removed  and even inlining of a virtual method call becomes possible  which often results  in even further possibilities for optimizations    Note that care is needed for an open application that uses dynamic loading  even when closed is not set  For an open application  it has to be ensured that all  classes that should be available for dynamically loaded code need to be included  fully using option includeClasses or includeJAR  Otherwise  the Builder  may omit these classes  if they are not referenced by the built in application   or  it may omit parts of these classes  certain methods or fields  that happen not to be  used by the built in application     14 2  BUILDER USAGE 155    Option  showIncludedFeatures       The showIncludedFeatures option will cause the Builder to display a list  of all classes  methods and fields that will be part of the created application  Any  classes  methods or fields removed from the target application through mecha   nisms such as smart linking will not be displayed  Used in conjunction with  includeClasses  excludeClasses  includeJAR an
38.  cumulatively require most of the execution time                  gt  grep PROFILE CYCLES  HelloWorld prof   sort  rn  k2   head  n25  javax realtime AffinitySet  lt cl     java util BitSet   clinit    V i     java lang Class desiredAsserti       PROFILE CYCLES   PROFILE CYCLES   PROFILE CYCLES     1803030931  1774328122  1759095288       PROFILE CYCLES  1232845675 java lang System  lt clinit gt   V i     PROFILE_CYCLES  411827088 java io PrintStream   init   Lja     PROFILE CYCLES  411762656 java io PrintStream   init   Lja     PROFILE CYCLES  407908263 java lang System 4   init   Ljav     PROFILE CYCLES  397958325 java io OutputStreamWriter   in     PROFILE CYCLES  382076564 sun nio cs StreamEncoder forOu     PROFILE CYCLES  366630363 java lang String intern  Ljava     PROFILE CYCLES  322935075 sun misc URLClassPath pathTOoUR     PROFILE CYCLES  277977307 java nio charset Charset   clin     PROFILE CYCLES  268836921 java lang ClassLoader loadClas     PROFILE CYCLES  268802918 java lang ClassLoader loadClas     PROFILE CYCLES  268769712 java lang ClassLoader loadClas     PROFILE CYCLES  268300354 java lang ClassLoader SystemCl     PROFILE CYCLES  268236844 java net URLClassLoader findCl     PROFILE CYCLES  264332693 java io BufferedInputStream   c     PROFILE CYCLES  259179348 java util concurrent atomic At     PROFILE CYCLES  256416238 java security AccessController     PROFILE CYCLES  256392827 java net URLClassLoader 1 run      PROFILE CYCLES  256361948 java net URLClassL
39.  default heap size is 64K  bytes  as specified by the following default   1d directive      heap align 16  pad 0x10000   NOCLEAR    This can be increased in myapplication ld to 8MB as follows    heap align 16  pad 0x800000  NOCLEAR      If you need to control where in RAM the kernel is placed  you may specify the  rambase and  ramlimit to identify the starting base of the kernel image and set the  limit of where free memory ends  This is only valid for the KernelSpace program s  linker directives file  e g   default  1d       ramlimit 0x800000     ramlimit defines the size of available RAM  8MB by default for sim800  BSP     The devguide manual provides detailed instructions on how to build applica   tions for INTEGRITY        B 3 3 Additional Target configuration    If any additional configuration of your target is required  e g  of the network   it  may be defined in the file jamaica home target integrity  x include   target configuration h  This file will be included when the application  is built        B 4 Windows    B 4 1 Limitations    The current release of Jamaica for the desktop versions of Windows contains the  following limitations     e Norealtime signals are available     e On multicore systems Jamaica will always run on the first CPU in the sys   tem     224    B 5    APPENDIX B  INFORMATION FOR SPECIFIC TARGETS    WindowsCE    B 5 1 Limitations    The current release of Jamaica for WindowsCE contains the following limitations     WindowsCE Version 5 limits pro
40.  default usually results in good performance for small applications   but it causes extreme code size increase for larger applications and it results in  slow execution of applications that use the system classes in a way different than  recorded in the system profile      gt  jamaicabuilder  cp classes CaffeineMarkEmbeddedApp     gt   destination caffeine  Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1   User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed               Vf8981d50b7d603bf   c  D osa    caffeine   c    caffeine   h  Class file compaction gain  58 973328   21665933    gt  8888811      C compiling    caffeine__ c     Des      caffeine  nc o         linking    stripping  Application memory demand will be as follows     initial max  Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread Java stacks  128KB    8  16KB  8176KB    511   16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  3328KB 343MB   gt  ls  s caffeine  12726072 caffeine    The runtime performance is better than the interpreted version  But compared  to the executable in the next section the application size is bigger and the per     62 CHAPTER 7  REDUCING FOOTPRINT AND MEMORY USAGE    formance is slightly worse  It is strongly recommended to create a profile as    desc
41.  displays Builder usage and a short description of all possible  standard command line options     Option  Xhelp    Xhelp     The Xhelp option displays Builder usage and a short description of all possible  extended command line options  Extended command line options are not needed  for normal control of the Builder command  They are used to configure tools and  options  and to provide tools required internally for Jamaica VM development     Option  version    Print the version of the Builder and exit     Option  verbose n    The verbose option sets the verbosity level for the Builder  If the verbosity  level is larger than 0  additional output on the state of the build process is printed  to standard out  The information provided in verbose mode includes  external  tools called  warnings  or the list of all class files that are loaded and the methods  that are compiled in case compilation is switched on     Option  showSettings    Print the builder settings in property file format  To make these setting the de   fault  replace the file jamaica home   target  platform etc  jamaica conf  by the output     Option  saveSettings  ile    Ifthe saveSettings option is used  Jamaica Builder options currently in effect  are written to the provided file in property file format  To make these setting  the default  replace the file jamaica home  target  platform etc  jamaica   conf by the output     148 CHAPTER 14  THE JAMAICA BUILDER    Option  configuration file    The configuration op
42.  dynamic determination of garbage collection  work  The disadvantage is that any allocation requires this worst case amount of  garbage collection work    The output generated using the option   analyze also shows possible values  for the constant garbage collection option  In the example above  the amount of  garbage collection work required varies from 3 to 24 units for heap sizes between  7366K and 2246K bytes  A unit of garbage collection work is the same as in the  dynamic case     about 160 machine instructions on the PowerPC processor    Similarly  if we want to give the same guarantee of 14 units of work for  the worst case execution time of the allocation of a block of memory with con   stant garbage collection work  a heap size of 2427K bytes is sufficient  To in   form the builder that constant garbage collection work should be used  the op   tion  constGCwork and the number of units of work should be specified when  building the application            gt  jamaicabuilder  cp classes  heapSize 2427K  maxHeapSize 2427K     gt   constGCwork 14 HelloWorld  Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1    User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed        PKG__V66c2f3114d534efc__ o  reusing existing file for package               HelloWorld__ c     
43.  for each element of the list  For example   the following are equivalent      classpath system classes user classes   classpath system classes  classpath user classes    The separator for list elements depends on the agrument type and is documented  for the individual options  As a general rule  paths and file names are separated  by the system specific separator character  colon on Unix systems  semicolon on  Windows   for identifiers such as class names and package names the separator is  space  and for maps the separator is comma    Note that arguments  in particular  file names  and argument lists that contain  spaces must be enclosed in double quotes        The following are well formed  declarations      includeClasses  java lang    java util       classpath t  system classes installation directory        Options that permit a list of mappings as their arguments require one equals sign  to start the arguments list and another equals for each mapping in the list        priMap 1 5  2 7  3 9    Default values for many options are target specific  The actual settings may be  obtained by invoking the Builder with  he1p  In order to find out the the settings  for a target other than the host platform  include  target platform     14 2  BUILDER USAGE 147    14 2 1 General    The following are general options which provide information about the Builder  itself or enable the use of script files that specifying further options     Option  help    help   h         The help option
44.  for multiprogramming  in hard real time environment  Journal of the ACM  20  1973     241    Index        134  147   194  197   extdirs   130    agentlib   finalizerPri   160    all   finalizerPriFromEnv   161    analyse   163   jeu E   analyze   i63 A  147  194 197   analyzeFromEnv   163   heapSize   157     atomicGC   heapSizeFromEnv      bootelasspath       cdc   153  help   L34  147   194  197                         196   help             immortalMemorySize   167           immortalMemorySizeFromEnv   Raid   includeClasses  148   Ponpe   includeFilename   195     configuration   includeJAR  150     constGCwork          lation   I   constGCworkFromEnv   164 incrementalCompilation   153      inline  156  cp   129  interpret   155   D  134   H  J    d            148      deprecation   javaStackSize   157    destination   151     javaStackSizeFromEnv     dwarf2   jni   195    ea  148 js   135    enableassertions   148  lazy   150   encoding   Jaz FroinBoy  151    excludeClasses   149 i M   excludeFromCompile   150   main   148   excludeJAR   maxHeapSize   157     242    INDEX     maxHeapSizeFromEnv    maxNumThreads   158   maxNumThreadsFromEnv    mi     ms   135     mx      nativeStackSize   158    nativeStackSizeFromEnv    nowarn     ns  136   numJniAttachableThreads      numJniAttachableThreadsFromEnv      numThreads    numThreadsFromEnv      0    object   169   optimise   156    optimize   156      percentageCompiled    physicalMemoryRanges   168    priMap    priMapFromEn
45.  gt     XstaticLibraries       library    lt library gt      XlinkDynamicPrefix   prefix      XlinkStaticPrefix   prefix      XlinkDynamicFlags   switch      XlinkStaticFlags   switch      XlibraryPaths       path     path      Xstrip   tool      XnoRuntimeChecks    XavailableTargets    XprofileFilename  lt name gt     XenableDynamicJNILibraries    XloadJNIDynamic     lt class gt   lt method gt    lt class gt   lt method gt       Xinclude     lt dirs gt     XobjectFormat default   none   C   ELF    PECOFF    XobjectProcessorFamily  lt type gt     XobjectSymbolPrefix   prefix       XignoreLineNumbers   agentlib   lib     option     val     option     val     classl      classn                                                                             14 3 1 General    The following are general options which provide information about the Builder  itself or enable the use of script files that specifying further options     14 3  BUILDER EXTENDED USAGE 171    Option  XdefineProperty      name value    The XdefineProperty option sets a system property for the resulting binary   For security reasons  system properties used by the VM cannot by changed  The  Unicode character U EEEE is reserved and may not be used within the argument  of the option     Option  XdefinePropertyFromEnv      name    At program start  the resulting binary will set a system property to the value of  an environment variable  This feature can only be used if the target OS supports  environment variables  Fo
46.  java lang Runtime runFinalization    It can be useful on  very small systems not to use a finalizer thread  This reduces the use of system  resources  The priority must be one of the Java priorities 1 through 10  corre   sponding to the ten priority levels of java  lang Thread         Option  heapSizeFromEnv var    The heapSizeFromEnv option enables the application to read its heap size  from the specified environment variable  If this variable is not set  the heap size  specified using  heapSize n will be used     Option  maxHeapSizeFromEnv var    The maxHeapSizeFromEnv option enables the application to read its maxi   mum heap size from the specified environment variable  If this variable is not set   the maximum heap size specified using  maxHeapSize n will be used     Option  heapSizelIncrementFromEnv var       The heapSizeIncrementFromEnv option enables the application to read its  heap size increment from the specified environment variable within  If this vari   able is not set  the heap size increment specified using  heapSizelncrement  n will be used        14 2  BUILDER USAGE 161    Option  javaStackSizeFromEnv var    The javaStackSizeFromEnv option enables the application to read its Java  stack size from the specified environment variable  If this variable is not set  the  stack size specified using   javaStackSize n will be used     Option  nativeStackSizeFromEnv var    The nativeStackSizeFromEnv option enables the application to read its  native stack size from 
47.  libraries or extensions such as the Real Time  Specification for Java  Please refer to the JavaDoc documentation of these li   braries provided with JamaicaVM  see    3 3      1 2 Contacting aicas    Please contact aicas or one of aicas   s sales partners to obtain a copy of JamaicaVM  for your specific hardware and RTOS requirements  or to discuss licensing ques   tions for the Jamaica binaries or source code  The full contact information for the  aicas main offices is reproduced in the front matter of this manual  page  2   The  current list of sales partners is available online at http     www aicas com     An evaluation version of JamaicaVM may be downloaded from the aicas web  site athttp   www aicas com download html   Please help us improve this manual and future versions of Jamaica VM  E mail  your bug reports and comments to bugs aicas         Please include the exact  version of JamaicaVM you use  the host and target systems you are developing for  and all the information required to reproduce the problem you have encountered     1 3 Whatis New in JamaicaVM 6 0    Version 6 0 of Jamaica VM provides numerous enhancements  The most important  additions are     e Support for Java 6 0 features including Java 6 0 source and class file com   patibility     e The standard classes library is based on the OpenJDK code  This leads to a  more conformant implementation of the standard classes  in particular AWT  and Swing features     1 3  WHAT IS NEW IN JAMAICAVM 6 0 15    e 
48.  memory classes  ImmortalMemory and ScopedMemory  provide these  memory areas  One important consequence of using special memory areas is  of  course  that the advantages of dynamic memory management is not fully available  to realtime threads        Synchronization    In realtime systems with threads of different priority levels  priority inversion situ   ations must be avoided  Priority inversion occurs when a thread of high priority is  blocked by waiting for a monitor that is owned by a thread of a lower priority that    11 3  SUPPORTED STANDARDS 111    is preempted by some thread with intermediate priority  The RTSJ provides two  alternatives  priority inheritance and the priority ceiling protocol  to avoid priority  inversion     Limitations of the RTSJ and their solution    The RTSJ provides a solution for realtime programming  but it also brings new  difficulties to the developer  The most important consequence is that applications  have to be split strictly into two parts  a realtime and a non realtime part  Commu   nication between these parts is heavily restricted  realtime threads cannot perform  memory operations such as the allocation of objects on the normal heap which is  under the control of the garbage collector  Synchronization between realtime and  non realtime threads is also severely restricted to prevent realtime threads from  being blocked by the garbage collector due to priority inversion    The JamaicaVM removes these restrictions by using its realti
49.  needed for one object of this class  3  block size in bytes  4  number of bytes needed for all objects of this class    5  relative heap usage of objects of this class    6 3  INTERPRETING THE PROFILING OUTPUT 53    6  total number of objects of this class organized in a tree structure  7  relative number of objects of this class organized in a tree structure    8  name of the class       Keyword  INSTANTIATION_COUNT Groups  memory                Values  1  total number of instantiated objects of this class  2  number of blocks needed for one object of this class  3  number of blocks needed for all objects of this class  4  number of bytes needed for all objects of this class  5  total number of objects of this class organized in a tree structure  6  relative number of objects of this class organized in a tree structure  7  class loader that loaded the class    8  name of the class    Keyword  PROFILE Groups  builder       Values  1  total number of bytecodes spent in this method  2  relative number of bytecodes spent in this method  3  signature of the method    4  class loader that loaded the class of the method                Keyword  PROFILE_CLASS_USED_VIA_REFLECTION Groups  builder             Values    1  name of the class used via reflection    54 CHAPTER 6  PERFORMANCE OPTIMIZATION    Keyword  PROFILE_CYCLES Groups  speed       Values    1  total number of processor cycles spent in this method  if available on the  target     2  signature of the method             Ke
50.  null      tmp   class   C     classSC   tmp        11 3  SUPPORTED STANDARDS 109       else     tmp   classSC        Class class_C   tmp     This code sequence causes loading of new classes from the current class loading  context  Le   it may involve memory allocation and loading of new class files   If the new classes are provided by a user class loader  this might even involve  network activity  etc    Starting with JDK 1 5  the classname   class notation will be supported by  the JVM directly  The complex code above will be replaced by a simple bytecode  instruction that references the desired class directly  Consequently  the referenced  class can be loaded by the JamaicaVM at the same time the referencing class  is loaded and the statement will be replaced by a constant number of memory  accesses     11 3 Supported Standards    Thus far  only standard Java constructs have been discussed  However libraries  and other APIs are also an issue  Timely Java development needs support for  timely execution and device access  There are also issues of certifiability to con   sider  The JamaicaVM has at least some support for all of the following APIs     11 3 1 Real Time Specification for Java    The Real Time Specification for Java  RTSJ  provides functionality needed for  time critical Java applications  RTSJ introduces an additional API of Java classes   mainly with the goal of providing a standardized mechanism for realtime ex   tensions of Java Virtual Machines  RTSJ extensi
51.  object will ever  be recycled by the system and that a finalizer will ever be called  Furthermore  if  several unreachable objects have a finalizer  the execution order of these finalizers  is undefined  For these reasons  it is generally unwise to use finalizers in Java at  all  The developer cannot rely on the finalizer ever being executed  Moreover   during the execution of a finalizer  the developer cannot rely on the availability of  any other resources since their finalizers may have been executed already    In addition to these unpredictabilities  the use of finalizers has an important  impact on the memory demand of an application  The garbage collector cannot  reclaim the memory of any object that has been found to be unreachable before its  finalizer has been executed  Consequently  the memory occupied by such objects  remains allocated    The finalizer methods are executed by the finalizer thread  which by default  runs at the lowest priority available to Java threads  If this finalizer thread does  not obtain sufficient execution time  or it is stopped by a finalizer that is blocked   the system may run out of memory  In this case  explicit calls to Runt ime  run   Finalization   may be required by some higher priority task to empty the  queue of finalizable objects    The use of finalizers is more predictable for objects allocated in Scoped   Memory or ImmortalMemory  For ScopedMemory  all finalizers will be  executed when the last thread exits a scope  This may
52.  of 443K bytes  we get   max gc units     14  as has been shown above  If our target platform gives a worst case execution time  for one unit of garbage collection work of 1 6us  we have    wcet of gc unit   1           8 2  CONFIGURATION FOR HARD REALTIME APPLICATIONS 87    We use the numblocks tool  see 8 I7 to find the number of blocks required for the  allocation of a java lang StringBuffer object        numblocks java lang StringBuffer  1    A StringBuffer object requires just a single block of memory  so that  numblocks new StringBuffer    1  and the total worst case execution time of the allocation becomes  weet new StringBuffer     1 14 1 6us   22 4us    Had we used the constant garbage collection option with the same heap size  the  amount of garbage collection work on an allocation of one block could have been  fixed at 6 units  In that case the worst case execution time of the allocation be   comes    WceteonstGCwork new StringBuffer      1 6 1          9           After creation of the java lang StringBuffer object  a character array of 16 ele   ments is allocated during the execution of StringBuffer   s initialization routine   For this allocation  we can determine the worst case execution time by first deter   mining the number of blocks required      gt  numblocks  char 16    2    and we get  weet new char 16   2 14 1 6ys   44 8us  and  WcCetconstGCworkl new Char  16      2  6 1          19 2  5    Typical values for the number of blocks required for the alloca
53.  of allocation activity with sufficient idle  time between these bursts will see an improved performance    The maximum amount of memory that will be reserved by the memory reser   vation thread is given as a percentage of the total memory  The default value for  this percentage is 10   It can be set via the builder options  reservedMemory  and  reservedMemoryFromEnv  or for the virtual machine via the environ   ment variable JAMAICAVM RESERVEDMEMORY    An allocation burst that exceeds the amount of reserved memory will have to  fall back to perform garbage collection work as soon as the amount of reserved  memory is exceeded  This may occur if the maximum amount of reserved memory  is less than the memory allocated during the burst or if there is too little idle time  in between consecutive bursts such as when the reservation thread cannot catch  up and reserve the maximum amount of memory    For an application that cannot guarantee sufficient idle time for the memory  reservation thread  the amount of reserved memory should not be set to a high per   centage  Higher values will increase the worst case garbage collection work that  will have to be performed on an allocation  since after the reserved memory was  allocated  there is less memory remaining to perform sufficient garbage collection  work to reclaim memory before the free memory is exhausted                    78 CHAPTER 8  MEMORY MANAGEMENT CONFIGURATION    A realtime application without allocation bursts and suff
54.  option as follows      gt  jamaicabuilder  cp classes  interpret      gt   setLocales none  setProtocols none  setGraphics none     gt   setFonts none  javaStackSize 4K  finalizerPri 0      gt   numThreads 1  timeSlice 0ns  reservedMemory 0      gt  XdefineProperty  jamaica no_sig_int_handler true     gt     gt     gt     gt                    jamaica no sig quit handler true    jamaica no sig term handler true     CaffeineMarkEmbeddedApp  XignoreLineNumbers true     destination caffeine nolibs js fP tS nL  Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf                 74 CHAPTER 7  REDUCING FOOTPRINT AND MEMORY USAGE    Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1    User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed        caffeine nolibs js fP tS       c     caffeine nolibs js      tS nL  h  Class file compaction gain  83 21974   8835298    gt  1482586       C compiling    caffeine_nolibs_js_fP_tS_nL__ c                           mcpu   is deprecated  Use     mtune     or   march   instead     caffeine nolibs js fP tS nL nc o    linking      stripping  Application memory demand will be as follows     initial max  Thread C stacks  128KB    1  128KB  63MB    511   128KB   Thread Java stacks  4096B    1 4096B   2044KB    511 4096B    Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  2308KB 337MB     gt  ls  
55.  package   class   package      The includeClasses option forces the inclusion of the listed classes and  packages into the created application  The listed classes with all their methods    14 2  BUILDER USAGE 149    and fields will be included  This is useful or even neccessary if you use reflection  with these classes    Arguments for this option can be  a class name to include the class with all  methods and fields  a package name followed by an asterisk to include all classes  in the package or a package name followed by             to include all classes in the  package and in all sub packages of this package    Example      includeClasses  java beans XMLEncoder java util     java lang        includes the class java beans XMLEncoder  all classes in java util and  all classes in the package java lang and in all sub packages of java lang  such as java lang ref     f The includeClasses option affects only the listed classes themselves   Subclasses of these classes remain subject to smart linking     Option  excludeClasses     class package   class  package       The excludeClasses option forces exclusion of the listed classes and pack   ages from the created application  The listed classes with all their methods and  fields will be excluded  even if they were previously included using includeJAR  or includeClasses  This is useful if you want to load classes at runtime    Arguments for this option can be  a class name to exclude the class with all  methods and fields  a pack
56.  part of the standard Jamaica license     Chapter 3    Getting Started    3 1       relea    Installation of JamaicaVM    se of the JamaicaVM tools consists of an info file with detailed information    about the host and target platform and optional features such as graphics support   and a package for the Jamaica binaries  library and documentation files  The  Jamaica version  build number  host and target platform and other properties of a    release    is encoded as release identification string in the names of info and package    file according to the following scheme     U       U    Jamaica version build  features  host  target    in   o  Jamaica version build  features  host  target    suffix    Package files with the following package suffixes are released        Host Platform   Suffix Package Kind                   Linux rpm Package for the rpm package manager  tar gz   Compressed tape archive file  Windows exe Interactive installer  zip Windows zip file  Solaris tar gz   Compressed tape archive file                In order to install the JamaicaVM tools  the following steps are required     e Unpack and install the Jamaica binaries  library and documentation files     e Configure the tools for host and target platform  C compiler and native li   braries      e Set environment variables     e Install license keys     23    24 CHAPTER 3  GETTING STARTED    The actual installation procedure varies from host platform to host platform  see  the sections below  For additi
57.  physicalMemoryRanges 0x0c00  0x1000 will allow  access to the memory range from address 0x0c00 to 0x1000  i e   to a range of  1024 bytes     14 2 8 Profiling    Profiling can be used to guide the compilation process and to find a good trade off  between fast compiled code and smaller interpreted byte code  This is particularly  important for systems with tight memory and CPU resources     Option  profile    The profile option builds an application that collects information on the amount  of run time spent for the execution of different methods  This information is  printed to the standard output after a test run of the application has been per   formed    The information collected in a profiling run can then be used as an input for  the option useProfile to guide the compilation process    Profiling information can only be collected when using the Jamaica VM in   terpreter  as compiled code cannot be profiled  Consequently  profile does not  work in combination with compile    Option  XprofileFilenameFromEnv var    The XprofileFilenameFromEnv creates an application that reads the name  of a file for profiling data from the environment variable var  If this variable is not    14 2  BUILDER USAGE 169    set  the name specified using XprofileFilename will be used  default  not  used      Option  percentageCompiled n    Use profiling information collected using profile to restrict compilation to  those methods that were most frequently executed during the profiling run  The  pe
58.  running resch ready blocked detached    210 15  raise priority set to base priority    ThreadName  lt none gt     start                 enter contended    finish    gc work    a 8000000000    reschedule    a       J    O    user event    allocated memory       w  thread state change       W  thread priority change            thread names           monitor enter  exit          L  GC activity     v  start execution  reschedule    C  ready yield       w  user event             lv  allocated memory    127 0 0 1  2712    IP Address   Port                 advanced    Buffer size   Sample Period        v  show thread headers          v  show fixed time scale                Start recording             Figure 15 1  Control view of the ThreadMonitor    15 3  DATA WINDOW 185    File Quit    Select this menu item will close all windows of the ThreadMonitor tool and quit  the application     15 3 Data Window    The data window will display scheduler data that was recorded through    Start Stop  recording    in the control window or that was loaded from a file    To better understand the ThreadMonitor output  it is helpful to have some un   derstanding of the JamaicaVM scheduler  The JamaicaVM scheduler provides  real time priority enforcement within Java programs on operating systems that  do not offer strict priority based scheduling  e g  Linux for user programs   The  scheduler reduces the overhead for JNI calls and helps the operating system to  better schedule CPU resources for thre
59.  special  situations  Normally  setting the environment variable WIND BASE and extend   ing PATH is sufficient           216 APPENDIX B  INFORMATION FOR SPECIFIC TARGETS    Configuration for Workbench  VxWorks 6 x     e Set the environment variable WIND_HOME to the base directory of the Wind   River installation  e g   opt  WindRiver                 e Set the environment variable WIND_BASE to the VxWorks directory in  the WindRiver installation  The previously declared environment variable  WIND  HOME may be used  e g   SWIND HOME vxworks 6 6                  e Set the environment variable WIND USR to the RTP header files directory  of the WindRiver installation  e g   SWIND_BASE target usr                     We recommend using wrenv sh  located in the WindRiver base directory to  set all necessary environment variables  The VxWorks subdirectory has to be  specified as the following example shows for VxWorks 6 6      gt   opt WindRiver wrenv sh  p vxworks 6 6    1 Donotadd wrenv sh to your boot or login script  It starts a new shell which  tries to process its login script and thus you create a recursion     Configuration of platform specific tools  see 83 1 1  is only required in special  situations  Normally  executing wrenv  sh is sufficient     B 1 3 Starting an application  DKM     The procedure for starting an application on VxWorks depends on whether down   loadable kernel modules  DKM  or real time processes  RTP  are used    For DKM  if the target system is configur
60.  that  an application that on startup requires significantly more memory than the initial  heap size will see its startup time increased by repeated incremental heap size  expansion    The obvious solution here is to set the initial heap size to a value large enough  for the application to start  The Jamaica builder option heapSize  see 8 14  and    75    76 CHAPTER 8  MEMORY MANAGEMENT CONFIGURATION    the virtual machine option Xmssize can be employed to set a higher size    Starting off with a larger initial heap not only prevents the overhead of in   cremental heap expansion  but it also reduces the garbage collection work during  startup  This is because the garbage collector determines the amount of garbage  collection work from the amount of free memory  and with a larger initial heap   the initial amount of free memory is larger     8 1 2 Maximum heap size    The maximum heap size specified via builder option maxHeapSize  see 8 14   and the virtual machine option Xmx should be set to the maximum amount of  memory on the target system that should be available to the Java application  Set   ting this option has no direct impact on the performance of the application as  long as the application s memory demand does not come close to this limit  If  the maximum heap size is not sufficient  the application will receive an Out Of   MemoryError at runtime    However  it may make sense to set the initial heap size to the same value as  the maximum heap size whenever the initia
61.  the user are displayed in angular brackets  For example   cat   file   instead of cat file     3 5 2 Argument Syntax    In the specification of command line arguments and options  the following nota   tions are used     TNI    Alternative  the pipe symbol denotes alternatives  For example      XobjectFormat default C ELF    means that the Xob jectFormat option must be set to exactly one of the  specified values default  C or ELF     Option  optional arguments that may appear at most once are enclosed in brack   ets  For example      heapSize n K M     means that the heapSize option must be set to a  numeric  value     which  may be followed by either K or M     Repetition  optional arguments that may be repeated are enclosed in braces  For  example      priMap jp sp   jp sp     means that the priMap accepts one or several comma separated arguments  of the form jp sp  These are assignments of Java priorities to system prior   ities    Alternative option names are indicated in parentheses  For example         1           1        h               means that the option help may be invoked by any one of  he 1p    help   h  and        3 5  NOTATIONS AND CONVENTIONS 33    3 5 3 Jamaica Home and User Home    The file system location where the JamaicaVM Tools are installed is referred to as  jamaica home  In order for the tools to work correctly  the environment variable  JAMAICA must be set to jamaica home  see 8B 1     The JamaicaVM Tools store user related information such as lice
62.  to be included  The  libraries that should be included can be set through the option set Libraries    For our example application  it is sufficient to have the default encoding iso  8859_1 and no support for network protocols or text locales  Furthermore security  management and logging is not needed and a minimal charset is sufficient  Con   sequently  we can set iso_encodings to 8859_1 while all of protocols  and locales can be set to the empty set  security and logger can be set  to off and charsetprovider to minimal  The resulting call to build the  application looks as follows         gt  jamaicabuilder  cp classes  interpret       gt   setProtocols none  setLocales none     gt   setGraphics none  setFonts none     gt  CaffeineMarkEmbeddedApp  destination caffeine nolibs       Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf        70 CHAPTER 7  REDUCING FOOTPRINT AND MEMORY USAGE    Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1    User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed        caffeine nolibs   c     caffeine nolibs   h  Class file compaction gain  80 13192   8834956    gt  1755336       C compiling  caffeine nolibs   c     caffeine nolibs  nc o    linking      stripping  Application memory demand will be as follows     initial max  Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread
63.  useful on the host platform     clean Remove all generated files     3 4 4 Overview of Further Examples    For an overview of the available examples  see Tab  Examples that require  graphics or network support are only provided for platforms that support graphics  or network  respectively  Each example comes with a README file that provides  further information and lists the available build targets        3 5 Notations and Conventions    Notations and typographic conventions used in this manual and by the JamaicaVM  Tools in general are explained in the following sections     3 5 1 Typographic Convertions    Throughout this manual  names of commands  options  classes  files etc  are set in  this monospaced font  Output in terminal sessions is reproduced in slanted  monospaced in order to distinguish it from user input  Entities in command lines  and other user inputs that have to be replaced by suitable user input are shown in  italics    As little example  here is the description of the the Unix command line tool  cat  which outptuts the content of a file on the terminal     32 CHAPTER 3  GETTING STARTED    Use cat file to print the content of file on the terminal  For example   the content of the file song txt may be inspected thus        cat song txt   Mary had a little lamb   Little lamb  little lamb   Mary had a little lamb    Its fleece was white as snow     In situations where suitable fonts are not available     say  in terminal output      entities to be replaced by
64.  worst case execution times win   dow are based on the measured scheduling data  Consequently  they can only dis   play the worst case times that were encountered during the actual run  which may    190 CHAPTER 15  THE JAMAICA THREADMONITOR    be fully unrelated to the theoretical worst case execution time of a given thread  In  addition to this fundamental limitation  please be aware of the following detailed  limitations     Releases are the points in time when a waiting thread becomes ready  If a re   lease is caused by another thread  e g   via Java function Object  notify      this state change is immediate  However  if a release is caused by a timeout of  a call to Object  wait     Thread sleep   RealtimeThread wait   ForNextPeriod   or similar functions  the state change to ready may be de   layed if higher priority threads are running and the OS does not assign CPU time  to the waiting thread  A means to avoid this inaccuracy is to use a high priority  timer  e g   class javax realtime Timer  to wait for a release        Blocking waits within a release will result in the worst case execution time anal   ysis to treat one release as two independent releases  Therefore  the analysis is  wrong for tasks that perform blocking waits during a release  Any blocking within  native code  e g   blocking I O operations  is not affected by this  so the analysis  can be used to determine the execution times of I O operations     Chapter 16    Jamaica and the Java Native  Interface
65. 044  2   sun nio cs StreamEncoder write     PROFILE  880044  2   sun nio cs StreamEncoder write     PROFILE  720036  2   sun nio cs StreamEncoder write     PROFILE  720036  2   sun nio cs StreamEncoder write     PROFILE  720036  2   sun nio cs StreamEncoder write     PROFILE  720036  2   java nio ByteBuffer arrayOffse     PROFILE  720036  2   java nio ByteBuffer arrayOffse     PROFILE  720036  2   java nio ByteBuffer arrayOffse     PROFILE  652295  1   java lang String length  I  bo       In this small example program  it is not surprise that nearly all execution time is  spent in methods that are required for writing the output to the screen  The dom   inant function is java nio ByteBufferImpl put  which is used while  converting Java   s unicode characters to the platform   s ISO 8859 1 encoding  Also  important is the time spent in StringBuffer append  Calls to the StringBuffer meth   ods have been generated automatically by      j amaicac compiler for string con   catenation expressions using the         operator    On systems that support a CPU cycle counter  the profiling data also contains a  cumulative count of the number of cycles spent in each method  This information  is useful to obtain a more high level view on where the runtime performance was  spent        6 3  INTERPRETING THE PROFILING OUTPUT 57    The CPU cycle profiling information is contained in lines starting with the tag  PROFILE_CYCLES   A similar command line can be used to find the methods       that
66. 1   16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB    TOTAL  3328KB 343MB    68 CHAPTER 7  REDUCING FOOTPRINT AND MEMORY USAGE    Running the resulting application will print the amount of RAM memory that was  required during the execution      gt    caffeine_analyse   Sieve score   556  98   Loop score   604  2017   Logic score   733  0   String score   207  708   Float score   482  185   Method score   334  166650   Overall score   449        Application used at most 2120672 bytes for reachable objects  on the Java heap         accuracy 1                 Worst case allocation overhead using 10  reserved memory   TEE heapSize dynamic GC const GC work  TEE 7423K 6 3  TEE 6164K 7 4  TEE 5366K 8 4  ttt 4828K 9 4  TEE 4435K 10 4  TEE 3908K 12 5  TEE 3577K 14 5  TEE 3341K 16 6  TEE 3172K 18 6  TEE 3042K 20 7  TEE 2857K 24 8  TEE 2733K 28 9  TEE 2645K 32 10  TEE 2576K 36 11  TEE 2523K 40 12  TEE 2446K 48 14  TEE 2392K 56 15  TEE 2354K 64 17  TEE 2264K 96 24  TEE 2220K 128 30  TEE 2176K 192 42  TEE 2155K 256 52  TEE 2135K 384 67    Here  the application requires 2120672 bytes for the Java heap that is under the  control of the garbage collector  The minimum suggested heap size is 2135K   while a larger heap size provides better worst case allocation overhead  Nor   mally  it is a good choice to set the heap to the size associated with a dynamic    7 2  OPTIMIZING RAM MEMORY DEMAND 69    GC overhead of 20     in this example  3042K  For further information on heap  size analysi
67. 8176KB    511  16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  3328KB 343MB    The builder has now generated the executable HelloWorld      gt    HelloWorld    Hello World   Hello World   Hello World   Hello World     Hello World   Hello World    its uu      30 CHAPTER 3  GETTING STARTED    3 4 2 Target Platform    With the JamaicaVM Tools  building an application for the target platform is as  simple as for the host platform  First go to the corresponding examples directory      gt  cd user home examples platform  Then compile and build the application specifiying the target platform    gt  mkdir classes     gt  jamaicac  useTarget platform  d classes src HelloWorld  java   gt  jamaicabuilder  target platforn  cp classes  interpret HelloWorld       The target specific binary HelloWorld is generated  For instructions how to  launch this on the target operating system  please consult the documentation of  the operating system  Additional target specific hints are provided in 8 B     3 4 53 Improving Size and Performance    The application binaries in the previous two sections provide decent size opti   misation but no performance optimisation at all  The JamaicaVM Tools offer a  wide range of controls to fine tune the size and performance of a built application   These optimisations are mostly controlled through command line options of the  Jamaica Builder    While performance is not an issue for such a simple example  in order to show  the possibilities  sets of o
68. AM requirements are available in  Jamaica     RAM memory is required for three main purposes     1  Memory for the application   s data structures  such as objects or arrays allo   cated during runtime     2  Memory required to store internal data of the VM  such as representation of  classes  methods  method tables  etc     3  Memory required for each thread  such as Java and C stacks     7 2 1 Measuring RAM requirements    The amount of RAM memory required by an application can be determined by  setting the option analyse  Apart from setting this option it is important that  exactly the same arguments are used than in the final version  Here analyse is  set to    1           gt  jamaicabuilder  cp classes  interpret  analyse 1     gt  CaffeineMarkEmbeddedApp  destination caffeine_analyse  Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1   User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed       caffeine analyse   c    caffeine analyse  h  Class file compaction gain  58 882584   21665933    gt  8908472      C compiling  caffeine analyse   c      caffeine analyse  nc o    linking    stripping  Application memory demand will be as follows        initial max  Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread Java stacks  128KB    8  16KB  8176KB    51
69. CA BUILDER    14 2 3 Smart linking    Smart linking and compaction are techniques to reduce the code size and heap  memory required by the generated application  These techniques are controlled  by the following options     Option  smart    If the smart option is set  smart linking is enabled for the created application   Smart linking enables the builder to remove unused code  for example  unused  methods of a class  and to perform better optimisation  This results in smaller  binary files  smaller memory usage and faster execution  Smart linking is enabled  by default    Smart linking may not be used for applications that use Java s reflection API   including reflection via the Java Native Interface JNI  to load classes that are un   known at buildtime and therefore cannot be included into the application  This is   for example  the case for classes  which are loaded from a web server at runtime   In such situations  use   smart false to disable smart linking    Classes loaded via reflection that are known at buildtime should be included  via builder options includeClasses or includeJAR  These options selec   tively disable smart linking for the included classes     Option  closed    For an application that is closed  i e   that does not load any classes dynamically  that are not built into the application by the Builder  additional optimization may  be performed by the Builder and the static compiler  These optimizations cause  incorrect execution semantics when additional
70. DE    the task definition used by the configuration or add options to the body part  Each  option in the configuration is displayed by an input mask  allowing you to perform  various actions     e Modify options  The input masks reflect the characteristics of their asso   ciated option  e g  an option that expects a list will be displayed as a list  control  Input masks that consists only of a text field show an asterisk      after the option name when modified  Please press  Enter  to accept the  new value     e Remove options  Each input mask has a  x  control that will remove the  option from the configuration     e Disable options  Options can also be disabled instead of removed  e g  in  order to test the configuration without a specific option  Uncheck the check   box in front of an input mask to disable that option     e Show help texts and load default values  The arrow control in the upper right  corner brings up a context menu  You can show the option   s description or  load its default value  not available for all options      The values of all options are immediately validated  If a value is not valid for  a specific option  the input mask will be annotated with the text invalid and  an error message is shown  Invalid options will be ignored when you try to build  your application     Multiple configurations    It is possible to store more than one configuration in a buildfile  Click Add a  Jamaica Builder target to create a new minimal configuration  The new  co
71. DIST  char 16 2 Nu0000  uffff  int 32 4    231  poe  long 64 8    993 265       float 32 4 1 4E 45F 3 4028235E38F  double 64 8 4 9E 324   1 7976931348623157E308  Java reference   32 4                          Table D 1  Memory Demand of Primitive Types                                                 Data Structure Memory Demand  Object header  containing garbage collection state  object   z ei   12 Bytes  type  inlined monitor and memory area   Array header  containing object header  array layout in      16 Bytes   formation and array length   Java object size on heap  minimum  32 Bytes  Java array size on heap  minimum  32 Bytes  Minimum size of single heap memory chunk 64 KBytes  Garbage Collector data overhead for heap memory  For  a usable heap of a given size  the garbage collector will 6 25   allocate this proportion of additional memory for its data   Stack slot 8 Bytes  Java stack frame of normal method 4 slots  Java stack frame of synchronized method 5 slots  Java stack frame of static initializer 7 slots  Java stack frame of asynchronously interruptible method 8 slots  Additional Java stack frame data in profile mode 2 slots             Table D 2  Memory Demand of Objects  Arrays and Frames       Appendix E    Limitations    This appendix lists limitations of the Jamaica virtual machine and tools     E 1 VM Limitations       Aspect    Limit          Number of Java Threads    511       Maximum Monitor Nest Count  repeated monitor en   ter of the same monitor in neste
72. Extended range of supported graphics systems  New are         DirectFB  Linux       Windows      GF  QNX     This adds to existing support for X11  Linux   WindML  VxWorks   GDI   WindowsCE  and Maui  OS9      e The Java 2D API  a set of classes for advanced 2D graphics and imaging  is  supported on all graphics systems     e Bindings for OpenGL  OpenGL ES and OpenGL SC are available     e Improved handling of system resources such as files and sockets  Even  though a Java application may fail to correctly close or release these re   sources  the VM now tracks these and releases them on shutdown     e Full crypo support  By default  cryptographic strength is limited to 48 Bits   this is due to export restrictions  Please contact aicas for details     e Dynamic loading of native libraries  on selected platforms only      For user relevant changes between minor releases of JamaicaVM  see the release  notes  which are provided in the Jamaica installation  folder doc  file RELEASE _  NOTES     16    CHAPTER 1  PREFACE    Chapter 2    Key Features of JamaicaVM    The Jamaica Virtual Machine  JamaicaVM  is an implementation of the Java Vir   tual Machine Specification  It is a runtime system for the execution of applications  written for the Java 6 Standard Edition  It has been designed for realtime and em   bedded systems and offers unparalleled support for this target domain  Among  the extraordinary features of JamaicaVM are     e Hard realtime execution guarantees   e Support f
73. HelloWorld__ h  Class file compaction gain  58 96339   21654255    gt  8886172      C compiling    HelloWorld__ c        HelloWorld__nc o     linking   x stripping  Application memory demand will be as follows    initial max   Thread C stacks  1024KB    8  128KB  63MB    511   128KB        8 2  CONFIGURATION FOR HARD REALTIME APPLICATIONS 85    Thread Java stacks  128KB    8  16KB  8176KB    511  16KB   Heap Size  1429KB 1429KB  GC data  89KB 89KB  TOTAL  2670KB 73MB    8 2 6 Comparing dynamic mode and constant GC work mode    Which option you should choose  dynamic mode or constant garbage collection   depends strongly on the kind of application  If worst case execution time and low  jitter are the most important criteria  constant garbage collection work will usu   ally provide the better performance with smaller heap sizes  But if average case  execution time is also an issue  dynamic mode will typically give better overall  throughput  even though for equal heap sizes the guaranteed worst case execution  time is longer with dynamic mode than with constant garbage collection work    Gradual degradation may also be important  Dynamic mode and constant  garbage collection work differ significantly when the application does not stay  within the memory bounds that were fixed when the application was built    There are a number of reasons an application might be using more memory     e The application input data might be bigger than originally anticipated     e The application 
74. Is  provided by the RTSJ with the predictable execution obtained through realtime  garbage collection and a realtime implementation of the virtual machine     2 3 Minimal footprint    JamaicaVM itself occupies less than 1 MB of memory  depending on the target  platform   such that small applications that make limited use of the standard li   braries typically fit into a few MB of memory  The biggest part of the memory re   quired to store a Java application is typically the space needed for the application s  class files and related resources such as character encodings  Several measures are  taken by JamaicaVM to minimize the memory needed for Java classes     e Compaction  Classes are represented in an efficient and compact format to  reduce the overall size of the application     e Smart Linking  JamaicaVM analyzes the Java applications to detect and  remove any code and data that cannot be accessed at run time     e Fine grained control over resources such as character encodings  time zones   locales  supported protocols  etc     Compaction typically reduces the size of class file data by over 50   while smart  linking allows for much higher gains even for non trivial applications    This footprint reduction mechanism allows the usage of complex Java library  code  without worrying about the additional memory overhead  Only code that is  really needed by the application is included and is represented in a very compact  format     2 4  ROMABLE CODE 19    2 4 ROMable code  
75. JAMAICAVM HEAPSIZEINCREMENT Heap size increment in bytes  default  4M    JAMAICAVM JAVA STACKSIZE Java stack size in bytes  default 64K   JAMAICAVM NATIVE STACKSIZE Native stack size in bytes  default 64K   JAMAICAVM NUMTHREADS Maximum number of Java threads  default  10   JAMAICAVM FINALIZERPRI The Java priority of the finalizer thread  This  thread executes the finalize method of objects before their memory is  reclaimed by the GC  default  10    JAMAICAVM PRIMAP Priority mapping of Java threads to native threads    JAMAICAVM ANALYSE Enable memory analysis mode with a tolerance given  in percent  see Builder option analyse   default  0  disabled      JAMAICAVM RESERVEDMEMORY Set the percentage of memory that shold be  reserved by a low priority thread for fast burst allocation  see Builder option  reservedMemory   default  10     JAMAICAVM SCOPEDSIZE Size of scoped memory  default  0  JAMAICAVM IMMORTALSIZE Size of immortal memory  default  32768    JAMAICAVM_LAZY Use lazy class loading linkage  1  or load link all classes at  startup  0   default  1     JAMAICAVM STRICTRTSJ Use strictRTSJ rules  1  or relaxed Jamaica rules   0   default  0    JAMAICAVM PROFILEFILENAME File name for profile  default  class  prof   where class is the name of the main class     140 CHAPTER 13  THE JAMAICA VIRTUAL MACHINE COMMANDS       Standard exit codes  0   Normal termination  1   Exception or error in Java program  2  63   Application specific exit code from System exit                   
76. JamaicaVM 6 0     User Manual    Java Technology for Critical Embedded Systems    aicas GmbH    JamaicaVM 6 0     User Manual  Java Technology for Critical Embedded  Systems    Published July 8  2010      1999 2010 aicas GmbH  Karlsruhe  All rights reserved     No licenses  expressed or implied  are granted with respect to any of the technology described in  this publication  aicas GmbH retains all intellectual property rights associated with the  technology described in this publication  This publication is intended to assist application  developers to develop applications only for the Jamaica Virtual Machine    Every effort has been made to ensure that the information in this publication is accurate  aicas  GmbH is not responsible for printing or clerical errors  Although the information herein is  provided with good faith  the supplier gives neither warranty nor guarantee that the information is  correct or that the results described are obtainable under end user conditions           aicas GmbH phone  49 721 663 968 0  Haid und Neu Strake 18 fax  49 721 663 968 99  76131 Karlsruhe email info aicas com  Germany web http   www aicas com  aicas incorporated phone  1 203 359 5705    6 Landmark Square  Suite 400          Stamford CT 06901 email info aicas com  USA web http   www aicas com  aicas SARL phone  33 1 4997 1762  9 Allee de l Arche fax 133 1 4997 1700  92671 Paris La Defense email  infoGaicas com  France web http   www aicas com    Java and all Java based trademarks a
77. List     for  Iterator i   list iterator    i hasNext         Object value   i next          can be written as    ArrayList list   new ArrayList      for  Object value   list                The allocation of a temporary Iterator that is performed by the call to list   iterator    is hidden in this new syntax     Variable Argument Lists  JDK 1 5     There is still another feature of JDK 1 5 that requires implicit memory allocation   The new variable argument lists for methods is implemented by an implicit ar   ray allocation and initialization  Variable argument lists should consequently be  avoided     11 2 4 Operations Causing Class Initialization    Another area of concern for computational transparency is class initialization   Java uses static initializers for the initialization of classes on their first use   The first use is defined as the first access to a static method or static field of the  class in question  its first instantiation  or the initialization of any of its subclasses    The code executed during initialization can perform arbitrarily complex oper   ations  Consequently  any operation that can cause the initialization of a class may  take arbitrarily long for its first execution  This is not acceptable for time critical  code    Consequently  the execution of static initializers has to be avoided in time  critical code  There are two ways to achieve this  either time critical code must  not perform any statements or expressions that may cause the initiali
78. M and for compiled code     Option  object      file    file     The object option specifies object files that contain native code that has to be  linked to the destination executable  Unlike other Java implementations  Jamaica  does not access native code through shared libraries  Instead  the object files that  contain native code referenced from within Java code are linked into the destina   tion application file     170 CHAPTER 14  THE JAMAICA BUILDER    Multiple object files should be separated by the system specific path separator   colon         on Unix systems and semicolon      on Windows     14 3 Builder Extended Usage    A number of extended options provide additional means for finer control of the  Builder s operation for the more experienced user  The following sections list  these extended options and describe their effect  Default values may be obtained  by jamaicabuilder  target platform  xhelp              jamaicabuilder XdefineProperty     lt name gt   lt value gt    XdefinePropertyFromEnv       lt name gt     XjamaicaHome   path    XjavaHome   path      Xbootclasspath       classpath     XextendedGlobalCPool    XlazyConstantStrings    XlazyConstantStringsFromEnv   var     XnoMain    XnoClasses    XenableZIP    XfullStackTrace   XexcludeLongerThan   n     XlinkStatic   libraries              lt      gt    XCFLAGS       cflags     Xld   linker     XLDFLAGS      lt ldflags gt     dwarf2    XstripOptions   options      Xlibraries      lt library gt   lt library
79. PowerPC  e SuperH4  e x86    B 1 1 Configuration of VxWorks    For general information on the configuration of VxWorks  please refer to the user  documentation provided by WindRiver  For Jamaica  VxWorks should be config   ured to include the following functionality             e INCLUDE POSIX SEM    e INCLUDE LOADER          e INCLUDE SHELL       e INCLUDE SHOW ROUTINES                         e INCLUDE STANDALONE SYM TBL             Package names refer to VxWorks 6 6  names for other version vary     213    214    If VxWorks real time processes  aka RTP  are used  the following components are  also required     DE_START    APPENDIX B  INFORMATION FOR SPECIFIC TARGETS          DE_UNLOADER       U    DE     UP SCRI       ET          PI       NG       U    DE_NFS_CLIENT_ALL       DE_TELNET_CL       ENT       U    DE_TASK_UTI    DE_ROUTECMD       L             S       DE NFS MOUNT ALL    GNALS       U    DE_POS    DE                      STORY F        U       DE_NETWORK  DE_ATA    DE_RTL8169_VXB_END       U    U    DE_D    DE_TC3C905_VXB_END        LE SHELL            DE SHELL EMACS MODE                   SK UTIL          U    DE    DE    SHELL CMD          E       DE TASK SHELL CMD    DR SHELL CMD             H       STORY            U    DE          U     DEBUG SHELL CMD        LE SHELL CMI             U    DE_    DE KERNEL HARDENI          NG                         U       DE_       IPTELNETS       PWRAP_GETI          FAD       DRS    B 1  VXWORKS 215    e INCLUDE_RTP    e
80. RTSJ implementation in the Jamaica VM does not limit access to  heap objects within any threads  there is no need to execute static initializers  within ImmortalMemory  However  objects allocated in static initializers typ   ically must be accessible by all threads  Therefore they cannot be allocated in  a scoped memory area when this happens to be the current thread s allocation  environment when the static initializer is executed    The JamaicaVM executes all static initializers within heap memory  Objects  allocated by static initializers may be accessed by all threads  and they may be  reclaimed by the garbage collector  There is no memory leak if classes are loaded  dynamically by a user class loader                       Class PhysicalMemoryManager    Names and instances of class javax realtime PhysicalMemoryType   Filter that are passed to method registerFilter ofthe class javax   realtime PhysicalMemoryManager are  by the RTSJ  required to be al   located in immortal memory  Realtime garbage collection obviates this require   ment  The JamaicaVM does not enforce it either        11 4 2 Finalizers    Care needs to be taken when using Java s finalizers  A finalizer is a method that  can be redefined by any Java class to perform actions after the garbage collector    11 4  MEMORY MANAGEMENT 115    has determined that an object has become unreachable  Improper use of finalizers  can cause unpredictable results    The Java specification does not give any guarantees that an
81. Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread Java stacks  128KB    8  16KB  8176KB    511   16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  3328KB 343MB    The generated executable HelloWorld now prints the profiling information after  execution  The output may look like this            HelloWorld 10000    Hello World   Hello World   Hello World   Hello World     Hello World   Hello World   Ls d    6 1 2 Using the profiling VM    Alternatively  in simple cases  the profile can also be created using the jamaicavmp  command on the host without first building a stand alone executable        lFor better results  we run the application with the command line argument 10000 such that  startup code does not dominate    6 1  CREATING A PROFILE 49     gt  jamaicavmp HelloWorld 10000    Hello World   Hello World   Hello World   Hello World     Hello World   Hello World   fox ead    The use of jamaicavmp is subject to the following restrictions     e It can generate a profile for the host only     e Setting builder options for the application to be profiled is not possible     6 1 5 Dumping a profile via network    If the application does not exit or writing a profile is very slow on the target   you can request a profile dump with the jamaica remoteprofile com   mand  You need to set the jamaica profile request port property  when building the application or using the profiling VM to an open TCP IP port  and then request a dump remotely         gt  jamai
82. VM offers a myriad of sometimes overlapping features for real   time Java development  The realtime Java developer needs to understand these  features and when to apply them  Particularly  with realtime specific features per   taining to memory management and task interaction  the programmer needs to  understand the tradeoffs involved  This chapter does not offer cut and dried so   lutions to specific application problems  but instead offers guidelines for helping  the developer make the correct choice     11 2 Computational Transparency    In contrast to normal software development  the development of realtime code re   quires not only the correctness of the code  but also the timely execution of the  code  For the developer  this means that not only the result of each statement is im   portant  but also the approximate time required to perform the statement must be  obvious  One need not know the exact execution time of each statement when this  statement is written  as the exact determination of the worst case execution time  can be performed by a later step  however  one should have a good understanding  of the order of magnitude in time a given code section needs for execution early on  in the coding process  For this  the computational complexity can be described in    101    102 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES    categories such as a few machine cycles  a few hundred machine cycles  thousands  of machine cycles or millions of machine cycles  Side effects su
83. VM tools valid licenses are required P  License keys  are provided in key ring files  which have the suffix  aicas_key  Prior to use   keys need to be installed  This is done with the Jamaica Key Installer Utility   which is available for the supported host platforms  It is necessary to place the  Key Installer Utility and the key ring whose keys are to be installed into the same  directory  Then execute the Utility as follows      gt    JamaicaKeyInstaller platform jamaica aicas_key    This will extract the keys contained in jamaica aicas_key and add the in   dividual key files to user home    jamaica  Keys that are already installed are  not overwritten  The Utility reports which keys get installed and which tools they  enable  Installed keys are for individual tools  Of the tools documented in this  manual  the Builder  see 8 14  and the Thread Monitor  see 8 15  require keys     3 3 JamaicaVM Directory Structure    The Jamaica installation directory is called jamaica home  The environment vari   able JAMAICA should be set to this path  see the installation instructions above    After successful installation  the following directory structure as shown in Tab   1   is created  in this example for a Linux x86 system     The Jamaica API specification may be browsed with an ordinary web browser   Its format is compatible with common IDEs such as Eclipse and Netbeans  If  the Jamaica Eclipse Plug In is used  see 8 5   Eclipse will automatically use the             Some Windows 
84. XECUTION 21    Processor Architectures    JamaicaVM is highly processor architecture independent  New architectures can  be supported easily  Currently  Jamaica runs on the following processor architec   tures     e ARM  StrongARM  XScale        e ERC22  on request    e MIPS  on request    e Nios   e PowerPC   e SH 4  on request    e Sparc   e x86    Ports to any required combination of target OS and target processor can be sup   ported with little effort  Clear separation of platform dependent from platform   independent code reduces the required porting effort for new target OS and target  processors  If you are interested in using Jamaica on a specific target OS and  target processor combination or on any operating system or processor that is not  listed here  please contact aicas      2 8 Fast Execution    The JamaicaVM interpreter performs several selected optimizations to ensure op   timal performance of the executed Java code  Nevertheless  realtime and embed   ded systems are often very performance critical as well  so a purely interpreted  solution may be unacceptable  Current implementations of Java runtime systems  use just in time compilation technologies that are not applicable in realtime sys   tems  The initial compilation delay breaks all realtime constraints    The Jamaica compilation technology attacks the performance issue in a new  way  methods and classes can selectively be compiled as a part of the build pro   cess  static compilation   C code is used as
85. aVM to produce immediate results  It is therefore  tempting to go ahead and develop your code without studying this manual fur   ther    Even though immediate success can be achieved easily  we recommend that  you have a closer look at this manual  since it provides a deeper understanding of  how the different tools work and how to achieve the best results when optimizing  for runtime performance  memory demand or development time    The JamaicaVM tools provide a myriad of options and settings that have been  collected in this manual  Developing a basic knowledge of what possibilities are  available may help you to find the right option or setting when you need it  Our  experience is that significant amounts of development time can be avoided by a    13    14 CHAPTER 1  PREFACE    good understanding of the tools  Learning about the correct use of the JamaicaVM  tools is an investment that will quickly pay off during daily use of these tools    This manual has been written for the developer of software for embedded and  time critical applications using the Java programming language  A good under   standing of the Java language is expected from the reader  while a certain fa   miliarity with the specific problems that arise in embedded and realtime system  development is also helpful    This manual explains the use of the JamaicaVM tools and the specific fea   tures of the Jamaica realtime virtual machine  It is not a programming guidebook  that explains the use of the standard
86. able code                               2 3                                                           26 DynamucLmkmg         4 4 9 2448224448  iw          xw RW eet eats Ste eead    2 1  Development platforms                       gre TU D  DOR s M A oS ee ee ee ee  2 9    Tools for Realtime and Embedded System Development            Getting Started   3 1 Installation of JamaicaVM                         BLT  LandX    222 c x n om oo b ooo ee ho  no hom oko  3 1 2 Sun Solans                                              3 1 3 Windows                                pig eh Ra cqdesmeqeg  how               a de al ee    ed             341__     amp                                          3 4 2                                                    3 4 3 Improving Size and Performance                   3 4 4 Overview of Further Examples                     3    11    13  13  14  14    17  17  18  18  19  19  19  19  19  20  21  22    3 5 Notations and Conventions            3 5 1    Typographic Convertions          3 5 2 Argument Syntax                  3 5 3    Jamaica Home and User Home    4 Tools Overview  4 1 Jamaica JavaCompiler           4 2 Jamaica Virtual Machine             4 3 Jamaica Builder     Creating Target Executables             4 4 Jamaica ThreadMonitor     Monitoring Realtime Behaviour            Support for the Eclipse IDE  5 1 Plug in installation                5 2 Setting up JamaicaVM Distributions     5 3 Setting Virtual Machine Parameters     5 4 Building ap
87. ack overflow will occur and a  corresponding error reported    The stack size may be followed by the letter    K    or  M  to specify a size in  KBytes  1024 bytes  or MBytes  1048576 bytes   The minimum stack size is 1k     158 CHAPTER 14  THE JAMAICA BUILDER    Option  nativeStackSize n              The nativeStackSize option sets the stack size to be used for the native  runtime stacks of all Java threads in the built application  Each Java thread has  its own native stack  Depending on the target system  the stack is either allocated  and managed by the underlying operation system  as in many Unix systems  or  allocated from the global heap  as in some small embedded systems  When native  stacks are allocated from the global heap  stack size consequently has an important  impact on the heap memory required by an application  A small stack size is  recommended for systems with tight memory constraints  If the selected stack  size is too small  an error may not be reported because the stack usage of native  code may cause a critical failure    For some target systems  like many Unix systems  a stack size of 0 can be  selected  meaning    unlimited     In that case the stack size is increased dynamically  as needed    The stack size may be followed by the letter          or    M    to specify a size in  KBytes  1024 bytes  or MBytes  1048576 bytes   The minimum stack size is 1k  if not set to    unlimited     value of 0      Option  numThreads n    The numThreads option spec
88. ad Headers    If this option is selected  the top part of the window will be used for a fixed time  scale that does not participate in vertical scrolling  This is useful in case many  threads are displayed and the time scale should remain visible when scrolling  through these threads     Navigate Fit Width  This menu item will change the time contraction such that the whole data fits into    the current width of the window     Navigate Fit Height    This menu item will change the zoom factor such that the whole data fits into the  current height of the window     188 CHAPTER 15  THE JAMAICA THREADMONITOR    Navigate Fit Window    This menu item will change the time contraction and the zoom factor such that the  whole data fits into the current size of the data window     Tools Worst Case Execution Times    This menu item will start the execution time analysis and show the Worst Case  Execution Time window  see    15 3 5    Tools Reset Monitors    The display of monitor enter and exit events can be suppressed for selected mon   itors via a context menu on an event of the monitor in questions  This menu item  re enables the display of all monitors     15 3 3 Data Window Context Window    The data window has a context menu that appears when pressing the right mouse  button over a monitor event  This context window permits to suppress the display  of events related to a monitor  This display can be re enabled via the Tools Reset  Monitors menu item     15 3 4 Data Window Tool Tip
89. ads associated with the VM  These im   provements let the JamaicaVM integrate better with the target OS and increase  the throughput of threaded Java applications    The VM scheduler controls which thread runs within the VM at any given  time  This means it effectively protects the VM internal data structures like the  heap from concurrent modifications  The VM scheduler does not replace  but  rather supports  the operating system scheduler  This allows  for example  for a  light implementation of Java monitors instead of using heavy system semaphores    All threads created in the VM are per default attached to the VM  i e  they are  controlled by the VM scheduler   Threads that execute system calls must detach  themselves from the VM  This allows the VM scheduler to select a different thread  to be the running thread within the VM while the first thread for example blocks  on an IO request  Since it is critical that no thread ever blocks in a system call  while it is attached  all JNI code in the JamaicaVM is executed in detached mode    For the interpretation of the ThreadMonitor data  the distinction between at   tached and detached mode is important  A thread that is detached could still be  using the CPU  meaning that the thread that is shown as running within the VM  might not actually be executing any code  Threads attached to the VM may be  in the states running  rescheduling  ready  or blocked  Running means the thread  that currently executes within the context of t
90. ads do not access objects allocated on the heap are not  performed by JamaicaVM     10 3 4 Static Initializers    To permit the initialization of classes even if their first reference is performed  within ScopedMemory or ImmortalMemory within a RealtimeThread  or NoHeapRealtimeThread  and to permit the access of static fields such as  System  out from within these threads  static initializers are typically executed  within ImmortalMemory that is accessible by all threads  However  this pre   vents these objects from being reclaimed when they are no longer used  Also   it can cause a serious memory leak if dynamic class loading is used since mem   ory allocated by the static intializers of dynamically loaded classes will never be  reclaimed    Since JamaicaVM does not limit access to heap objects within any threads   there is no need to execute static initializers within ImmortalMemory  However   objects allocated in static initializers typically must be accessible by all threads  so  they cannot be allocated in a scoped memory area if this happens to be the current  thread s allocation environment when the static initializer is executed    JamaicaVM therefore executes all static initializers within heap memory  Ob   jects allocated by static initializers may be accessed by all threads  and they may                98 CHAPTER 10  THE REAL TIME SPECIFICATION FOR JAVA    be reclaimed by the garbage collector  There is no memory leak if classes are  loaded dynamically by a user cl
91. age name followed by an asterisk to exclude all classes  in the package or a package name followed by             to exclude all classes in the  package and in all sub packages of this package    Example      excludeClasses  java beans XMLEncoder java util x  java lang        excludes the class java beans XMLEncoder allclassesin java util and  all classes in the package java lang and in all sub packages of java lang  such as java lang ref       The excludeClasses option affects only the listed classes themselves   e    150 CHAPTER 14  THE JAMAICA BUILDER    Option  excludeFromCompile     method  method      The excludeFromCompile option forces exclusion of the listed methods from  compilation   Separate method names by spaces and enclose them in double quotes  7   Example            excludeFromCompile  java lang Math cos  D D  java lang Math sin D D           excludes the methods double cos  double  anddouble sin  double        The excludeFromCompile option affects only the listed methods them   selves     Option  includeJAR      file    file     The includeJAR option forces the inclusion of all classes and all resources con   tained in the specified files  Any archive listed here must be in the classpath or  in the bootclasspath  If a class needs to be included  the implementation in the  includeJAR file will not necessarily be used  Instead  the first implementation  of this class which is found in the classpath will be used This is to ensure the appli   cation behaves in t
92. aica  VM or any application that was created using the Jamaica Builder     38    CHAPTER 4  TOOLS OVERVIEW    Chapter 5  Support for the Eclipse IDE    Integrated development environments  IDEs  make a software engineer   s life eas   ier by aggregating all important tools under one user interface  aicas provides a  plug in to integrate the JamaicaVM Virtual Machine and the JamaicaVM Builder  into the Eclipse IDE  which is a popular IDE for Java     5 1 Plug in installation    The JamaicaVM plug in can be installed and updated through the Eclipse plug in  manager    The plug in requires Eclipse 3 2 or later and a Java 1 5 compatible virtual  machine  However  using the latest available Eclipse version and an up to date  virtual machine is recommended  The following instructions refer to Eclipse 3 5   Earlier versions of Eclipse differ slightly in the menu item labels    To install the plug in  select the menu item          Help  gt  Install New Software        add the aicas Update Site  whose location is http    aicas com download   eclipse plugin  and install JamaicaVM Tools  The plug in is available  after a restart of Eclipse    To perform an update  select Help  gt  Check for updates     You  will be notified of updates     5 2 Setting up JamaicaVM Distributions    Jamaica distributions must be made known to the Jamaica plug in before they can  be used within Eclipse  This is done in the global preferences dialog  usually    39    40 CHAPTER 5  SUPPORT FOR THE ECLIPSE IDE
93. ansport dt socket   The only supported transport protocol is  dt socket    address   host    port Transport address for the connection    server y n If y  listen for a debugger application to    attach  otherwise  attach to the debugger  application at the specified address   suspend y n If y  suspend this VM before main class  loads                    Table 9 1  Arguments of Jamaica s communication agent    e Information about java monitors cannot be retrieved    The Java Platform Debugger Architecture  JPDA  consists of three interfaces  designed for use by debuggers in development environments for desktop systems   The Java Virtual Machine Tools Interface  JVMTT  defines the services a VM must  provide for debugging    The Java Debug Wire Protocol  JDWP  defines the format  of information and requests transferred between the process being debugged and  the debugger front end  which implements the Java Debug Interface  JDI   The  Java Debug Interface defines information and requests at the user code level    A JPDA Transport is a method of communication between a debugger and  the virtual machine that is being debugged  The communication is connection  oriented     one side acts as a server  listening for a connection  The other side acts  as a client and connects to the server  JPDA allows either the debugger application  or the target VM to act as the server  The transport implementations of Jamaica  allows communications between processes running on different machines   
94. archive  Please follow the    installation instructions in       3 1 5 Windows    On Windows the recommended means of installation is using the interactive in   staller  which may be launched by double clicking the file    Jamaica release identification string   exe       in the Explorer  or by executing it in the CMD shell  You will be asked to pro   vide a destination directory for the installation and the locations of tools and SDK  for host and target platforms  The destination directory is referred to as jamaica   home  lt defaults to the subdirectory jamaica in Window s default program    26 CHAPTER 3  GETTING STARTED    directory     for example  C   Programs  jamaica  if an english language lo   cale is used  Defaults for tools and SDKs are obtained from the registry  The  installer will set the environment variable JAMAICA to jamaica home    An alternative installation method is to unpack the Windows zip file into a  suitable installation destination directory  For configuration of platform specific  tools  follow the instructions provided in 8 B 1 1  In order to set the JAMAICA  environment variable to jamaica home  open the Control Panel  choose System   select Advanced System Settings    choose the tab Advanced and press Envrion   ment Variables  It is also recommended to add jamaica home bin to the PATH  environment variable in order to be able to run the Jamaica executables conve   niently           3 2 Installation of License Keys    In order to use the Jamaica
95. as follows     initial max  Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread Java stacks  128KB    8  16KB  8176KB    511   16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  3328KB 343MB    8 2 3 Measuring an application s memory requirements    The build process is performed exactly as it would be without the  analyze op   tion  except that the garbage collector is told to measure the application s memory  usage with the given accuracy  The result of this measurement is printed to the  console after execution of the application          HelloWorld    Hello World   Hello World   Hello World   Hello World     Hello World   Hello World    erosut e          Application used at most 2104384 bytes for reachable objects  on the Java heap         accuracy 5       ttt   ttt Worst case allocation overhead using 10  reserved memory   TET heapSize dynamic GC const GC work   TUE 7366K 6 3   dE 6117K 7 4   TUE 5324K 8 4   TUE 4791K 9 4   TUE 4401K 10 4   ttt 3878K 12 5    82 CHAPTER 8  MEMORY MANAGEMENT CONFIGURATION    THE 3550K 14 5  THE 3315K 16 6  THE 3148K 18 6  THE 3018K 20 7  THE 2835K 24 8  THE 2712K 28 9  THE 2625K 32 10  THE 2557K 36 11  THE 2504K 40 12  THE 2427K 48 14  THE 2374K 56 15  THE 2336K 64 17  THE 2246K 96 24  TEE 2203K 128 30  THE 2159K 192 42  THE 2139K 256 52  THE 2119K 384 67    The output consists of the maximum heap memory demand plus a table of possible  heap sizes and their allocation overheads for both dynamic and constant garbage  
96. ass loader     10 3 5 Class PhysicalMemoryManager    According to the RTSJ  names and instances of class PhysicalMemoryType   Filterinpackage javax realtime thatare passed to method register   Filter of class PhysicalMemoryManager in the same package must be  allocated in immortal memory  This requirement does not exist in JamaicaVM           10 4 Strict RTSJ Semantics    When the builder option st rict RTSJ is chosen  the relaxations just described  are deactivated and strict RTSJ semantics are enforced  Applications that should  be portable to different RTSJ implementations should consequently be developed  with this options switched on when an application is built     10 4 1 Use of Memory Areas    All NoHeapRealtimeThreads of applications built in st rictRTSJ mode must  run in scoped or immortal memory  In addition  the thread object itself  the thread  logic  scheduling  release  memory and group parameters must not be allocated  in heap memory  Otherwise  a Memory AccessError is thrown on the creation of  such a thread    RealtimeThreads are free to use heap memory even in strictRTSJ mode   and they still profit from the lack of garbage collection pauses in Jamaica VM   Application code that needs to be portable to other Java implementations that are  not based on realtime garbage collection should not use heap memory for time  critical threads    Normal threads are not allowed to enter non heap memory areas in strict   RTSJ mode     10 4 2  Thread priorities    Thread p
97. at inherits these variables from the shell  the task must  be spawned with the VX PRIVATE ENV bit set  To do so  use the taskSpawn  command            taskSpawn  jamaica  0 0x01000080 0x020000 jvm HelloWorld   args     Running two Jamaica applications at the same time    In order to run two Jamaica applications at the same time  matching of common  symbols by the kernel must be switched off  This is achieved by setting the global  VxWorks variable 1dCommonMatchAL1 to false prior to loading the applica   tions       gt  ldCommonMatchAl1 20      ld    RTHelloWorld      ld    HelloWorld      sp jvm RTHelloWorld      sp jvm HelloWorld                      In the example  if 1dCommonMatchA11 were not set to 0  HelloWorld would  reuse symbols defined by RTHelloWorld    Note that this functionality is not available on all versions of VxWorks  Please  check the VxWorks kernel API reference     218 APPENDIX B  INFORMATION FOR SPECIFIC TARGETS    Restarting a Jamaica application    To restart a Jamaica application after it has terminated  it should be unloaded  with the un1d command and then reloaded  This is illustrated in the following  example         ld    HelloWorld  value   783931720   0x2eb9d948    H       sp jvm HelloWorld     Ex      unld 783931720  value 0   0x0        ld    HelloWorld   value 784003288   0x2ebaf0d8    K       sp jvm HelloWorld    es    Note that the application should not be unloaded while still running  The unld  command is optional  and the VxWorks image n
98. aware that if exten   sions of the RTSJ without sticking to restrictions imposed by the RTSJ  the code  will not run unmodified on other JVMs  To make sure code is portable  one should  use the   st rictRTSJ switch  StrictRTSJ mode can safely be used by any Java  program without modifications        11 7 5 EventHandlers    AsyncEventHandlers should be used for tasks that are triggered by some  external event  Many event handlers can be used simultaneously  however  they  should not block or run for a long time  Otherwise the execution of other event  handlers may be blocked    For longer code sequences  or code that might block  event handlers of class  BoundAsyncEventHandler provide an alternative that does not prevent the  execution of other handlers at the cost of an additional thread     11 7  SUMMARY 125    The scheduling and release parameters of event handlers should be set accord   ing to the scheduling needs for the handler  Particularly  when rate monotonic  analysis is used  an event handler with a certain minimal interarrival time  should be assigned a priority relative to any other events or  periodic  threads  using this minimal interarrival time as the period of this schedulable entity     11 7 4 Monitors    Priority Inheritance is the default protocol in the RTSJ  It is safe and easy to use   but one should take care to nest monitor requests properly and in the same order  in all threads  Otherwise  it can cause deadlocks  When used properly  Priority  Ceiling
99. ay be cleared  In JamaicaVM  the finalizer thread is responsible for  clearing soft references  The default value for this property is 1096     jamaica xprof n  If set to an integer value larger than 0 and less or equal to 1000  this  property enables the jamaicavm   s option  Xprof  If set  the property   s  value specifies the number of profiling samples to be taken per second  e g     Djamaica xprof 100 causes the profiling to make 100 samples per    second  See   13 1 2 for more details        C 2 Predefined Properties    The JamaicaVM defines a set of additional properties that contain information  specific to Jamaica     jamaica boot class path  The boot class path used by JamaicaVM  This is not set when a stand alone  application has been built using the Builder  see    14      jamaica buildnumber  The build number of the Jamaica VM     jamaica byte order  One of BIG  ENDIAN or LITTLE ENDIAN depending on the endianness  of the target system                                jamaica heapSizeFromEnv  If the initial heap size may be set via an environment variable  this is set to  the name of this environment variable     jamaica home  The JamaicaVM installation directory  This property is not set on systems  where the JamaicaVM installation is not needed  i e   when a stand alone  application has been built using the Builder  see 8 14      jamaica immortalMemorySize  The size of the memory available for immortal memory     C 2  PREDEFINED PROPERTIES 231    jamaica  maxNumTh
100. be statically  linked to the destination binary  The libraries must include the option that is  passed to the linker  Static linking creates larger executables  but may be nec   essary if the target system doesn t provide the library  Multiple libraries should be  separated using spaces and enclosed in quotation marks    Example  setting  XstaticLibraries  m pthread  causes static link   ing against 1ibm and libpthread     Option  XlinkDynamicPrefix prefix       The XLinkDynamicPrefix option specifies a prefix to link a library dynamic  to the created executable  e g    W1   Bdynamic     14 3  BUILDER EXTENDED USAGE 175    Option  XlinkStaticPrefix prefix    The XlinkStaticPrefix option specifies a prefix to link a library statically  to the created executable  e g    W1   Bstatic     Option  XlinkDynamicFlagsc switch       The XlinkDynamicFlags option specifies flags for dynamic linkage of an  executable  e g    dynamic     Option  XlinkStaticFlags switch    The XlinkStaticFlags option specify flags for dynamic linkage of an exe   cutable  e g    static     Option  XlibraryPaths     path    path     The XlibraryPaths option adds the directories in the specified paths to the  library search path  Multiple directories should be separated by the system specific  path separator  colon         on Unix systems and semicolon      on Windows   E g   to use the directories  usr local lib and  usr 1lib as library  path  the option  X1ibraryPaths  usr local lib  usr lib mustbe    speci
101. be used     Option  stopTheWorldGC    The stopTheWorlsGC option enables blocking GC  i e   no GC activity is per   formed until the heap is fully filled  Only then  a complete GC cycle is performed  at once  causing a potentially long pause for the application  During this GC cy   cle  any thread that performs heap memory allocation will be blocked  but threads  that do not perform heap allocation may continue to run    If stop the world GC is enabled via this option  even RealtimeThreads  and NoHeapRealtimeThreads may be blocked by GC activity if they al   locate heap memory  RealtimeThreads and NoHeapRealtimeThreads  that run in ScopedMemory or ImmortalMemory will not be stopped by the  GC   A stop the world GC enables a higher average throughput compared to incre   mental GC  but at the cost of losing realtime behaviour for all threads that perform  heap allocation              Option  atomicGC    The atomicGC option enables atomic GC  i e   no GC activity is performed until  the heap is fully filled  Only then  a complete GC cycle is performed at once   causing a potentially long pause for the application  During this GC cycle  all  Java threads will be blocked     14 2  BUILDER USAGE 165    When this option is set  even NoHeapRealtimeThreads will be stopped  by GC work  so all realtime guranatees will be lost   This mode permits more efficient code compared to stopTheWor1dGC since    it disables certain tracking code  write barriers  that is required for the incremental 
102. ble    Any event handler that may block should therefore have one Realtime   Thread that is assigned to it alone for the execution of its event handler  Handlers  for class BoundAsyncEventHandler provide this feature  They do not share  their thread with any other event handler and they may consequently block without  disturbing the execution of other event handlers    Due to the additional resources required for a BoundAsyncEventHandler   their use should be restricted to blocking or long running events only  The sharing  of threads used for normal AsyncEventHandlers permits the use of a large  number of event handlers with minimal resource usage     11 5 2 Synchronization    Synchronization is essential to data sharing  especially between cooperating real   time tasks  Passing data between threads at different priorities without impairing  the realtime behavior of the system is the most important concern  It is essential  to ensure that a lower priority task cannot preempt a higher priority task    The situation in Fig  depicts a case of priority inversion when using  monitors  the most common priority problem  The software problems during the  Pathfinder mission on Mars is the most popular example of a classic priority in   version error  see Michael Jones  web page  4     In this situation  a higher priority thread A has to wait for a lower priority  thread B because another thread C with even lower priority is holding a monitor  for which A is waiting  In this situation 
103. ca remoteprofile target port  DUMPING     DONE     In the above command  target denotes the IP address or host name of the target  system  By default  the profile is written on the target to a file with the name  of the main class and the suffix   prof  You can change the file name with the   file option or you can send the profile over the network and write it to the file  system  with an absolute path or relative to the current directory  of the host with  the  net option      gt  jamaica_remoteprofile  net filename target port    6 1 4 Creating a micro profile    To speed up the performance of critical sections in the application  you can use mi   cro profiles that only contain profiling information of such a section  see 8 5 22    You need to reset the profile just before the critical part is executed and dump a  profile directly after  To reset a profile  you can use the command jamaica_  remoteprofile with       reset option         gt  jamaica_remoteprofil reset  net filename target port    50 CHAPTER 6  PERFORMANCE OPTIMIZATION    6 2 Using a profile with the Builder    Having collected the profiling data  the Jamaica Compiler can create a compiled  version of the application using the profile information  This compiled version  benefits from profiling information in several ways     e Compilation is limited to the most time critical methods  keeping non   critical methods in smaller interpreted byte code format     e Method inlining prefers inlining of calls that hav
104. cah program in bytes     Chapter 17    The Numblocks Command    An important value required to calculate the worst case execution time of an allo   cation is the number of blocks required to represent the allocated object  Jamaica  VM provides the NumBlocks tool to determine this number of blocks  In this  chapter the usage of this tool is described in detail     17 1 Command Line Options  A variety of arguments can be provided to control the NumBlocks tool  The argu     ments can be provided either directly to numblocks  or by using the property file  numblocks conf  The syntax is as follows              numblocks   help    help  h   7     Xhelp    version     verbose    showSettings    saveSettings  lt file gt           lt file gt     all    classpath                lt classpath gt     bootclasspath     oe ee         lt classpath gt     numThreads  lt n gt    class1    lt len gt          classn    lt len gt         17 1  General    These are general options providing information about numblocks itself or en   abling the use of script files that specify further options    Option  help    help   h         Display the usage of the NumBlocks tool and a short description of all possible  standard command line options    197    198 CHAPTER 17  THE NUMBLOCKS COMMAND    Option  Xhelp    Display the usage of the NumBlocks tool and a short description of all possible  standard and extended command line options  Extended command line options  are not needed for normal control of the n
105. cation    Maximum number of name and type entries  references to  different methods or fields  in the global constant pool  ex  216  ceeding this value will result in a larger application   Maximum Java array Iength  Independent of the heap size   Java arrays may not have more than this number of elements   However  the array length is not restricted by the heap size  increment  i e   even a heap consisting of several increments 227     1  each of which is smaller than the memory required for a Java  array permits the allocation of arrays up to this length pro   vided that the total available memory is sufficient    Maximum number of virtual methods per Java class  includ     916                      ing inherited virtual methods  Jae  Maximum number of interface methods per Java interface 4095   including interface methods inherited from super interface    On posix systems where time_spec tv_sec is a 32 Bit Tue Jan 19    value it is not possible to wait until a time and date that is    04 14 07 2038  later than             Table E 1  JamaicaVM limitations    E 2 Builder Limitations    The static compiler does not compile certain Java methods but leaves them in  interpreted bytecode format independent of the compiler options or their signifi   cance in a profile     e Static initializer methods  methods with name  lt clinit gt   are not com   piled     E 2  BUILDER LIMITATIONS 237    A simple way to enable compilation is to change a static intializer into a  static method  wh
106. cess classes  in ZIP or JAR files     14 3  BUILDER EXTENDED USAGE 173    14 3 3 Compilation    Compilation and different optimisation techniques are used for optimal runtime  performance of Jamaica applications  These techniques are controlled using the  following options     Option  XfullStackTrace    Compiled code usually does not contain full Java stack trace information if the  stack trace is not required  as in a method with a try catch clause or a synchro   nized method   For better debugging of the application  the XfullStackTrace  option can be used to create a full stack trace for all compiled methods     Option  XexcludeLongerThan n    Compilation of large Java methods can cause large C routines in the intermediate  code  especially when combined with aggressive inlining  Some C compilers have  difficulties with the compilation of large routines  To enable the use of Jamaica  with such C compilers  the compilation of large methods can be disabled using  the option XexcludeLongerThan    The argument specified to XexcludeLongerThan gives the minimum num   ber of bytecode instructions a method must have to be excluded from compilation     Option  XlinkStatic libraries    Libraries are system  jamaica  implicit  all  or none  The resulting  binary is linked statically against those libraries  even if they were specified by  Xlibraries rather than XstaticLibraries  jamaica refers to the Ja   maica VM library  system to all other libraries  default  jamaica         Optio
107. cess memory to 32MB of RAM  Therefore  the application executable plus the amount of native stack for all threads  in the thread pool plus the amount of memory required to display graphics  must be less than 32MB     It is not possible to redirect the standard IO for processes created with  Runtime exec       WindowsCE does not support the notion of a current working directory  In  Jamaica all relative paths are interpreted as relative to root         WindowsCE does not support envrionment variables  If you have a registry  editor on your target  you can create string entries with the name of the  environment variable in             HKEY CURRENT USERNSoftwareNaicas V jamaica environment          to use the variable in Jamaica     File locking through FileChannel lock   is not supported for all file  systems on WindowsCE  If WindowsCE does not support file locking for a  given file system calls to FileChannel lock   will fail silently  In particular   the UNC networkfile systems does not support this mechanism     B 6 OS 9    B 6 1 Limitations    The current release of Jamaica for OS 9 contains the following known limitations     java net Socket connect     does not support a timeout  The value is ignored        java net Socket bind      does not throw an exception if called several times with the same address           java nio FileChannel map    is not supported     B 7  QNX 225    B 7 QNX    B 7 1 Installation    To use the QNX toolchain  ensure that the following environme
108. ch as blocking for  I O operations or memory allocation should be understood as well     The term computational transparency refers to the degree to which the compu   tational effort of a code sequence written in a programming language is obvious to  the developer  The closer a sequence of commands is to the underlying machine   the more transparent that sequence is  Modern software development tries to raise  the abstraction level at which programmers ply their craft  This tends to reduce the  cost of software development and increase its robustness  Often however  it masks  the real work the underlying machine has to do  thus reducing the computational  transparency of code     Languages like Assembler are typically completely computationally transpar   ent  The computational effort for each instruction can be derived in a straightfor   ward way  e g   by consulting a table of instruction latency rules   The range of  possible execution times of different instructions is usually limited as well  Only  very few instructions in advanced processor architectures have an execution time  of more than O  1      Compiled languages vary widely in their computational complexity  Program   ming languages such as C come very close to full computational transparency  AII  basic statements are translated into short sequences of machine code instructions   More abstract languages can be very different in this respect  Some simple con   structs may operate on large data structures  e g   s
109. code running on the Jamaica Virtual Machine    The Memory Analyzer is integrated into the Builder tool  It can be activated  by setting the command line option  analyze accuracy    Using the Memory Analyzer Tool is a three step process  First  an application  is built using the Memory Analyzer  The resulting executable file can then be ex   ecuted to determine its memory requirements  Finally  the result of the execution  can be used to fine tune the final version of the application     8 2 2 Building using the Memory Analyzer    As an example  we will build the HelloWorld example application that was pre   sented in 8  3 4  This can be done by providing the option  analyze to the  builder and giving the required accuracy of the analysis in percent  In this exam   ple  we use an accuracy of 5       gt  jamaicabuilder  cp classes  analyze 5 HelloWorld   Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf       Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1    User  EVALUATION USER  Expires  2010 06 10    Generating code for target    linux x86     optimisation  speed     8 2  CONFIGURATION FOR HARD REALTIME APPLICATIONS 81      PKG__V66c2  3114d534efc__ c   tan    HelloWorld   c    HelloWorld__ h  Class file compaction gain  58 96339   21654255    gt  8886172     C compiling    HelloWorld__ c      sl    HelloWorld  nc o    linking  x stripping  Application memory demand will be 
110. collection work  We first consider dynamic garbage collection work  since this is  the default    In this example  the application uses a maximum of 2104384 bytes of memory  for the Java heap  The specified accuracy of 596 means that the actual memory  usage of the application will be up to 5  less than the measured value  but not  higher  JamaicaVM uses the Java heap to store all dynamic data structures internal  to the virtual machine  as Java stacks  classes  etc    which explains the relatively  high memory demand for this small application     8 2 4 Fine tuning the final executable application    In addition to printing the measured memory requirements of the application  in  analyze mode Jamaica also prints a table of possible heap sizes and corresponding  worst case allocation overheads  The worst case allocation overhead is given in  units of garbage collection work that are needed to allocate one block of memory   typically 32 bytes   The amount of time in which these units of garbage collection  work can be done is platform dependent  For example  on the PowerPC processor   a unit corresponds to the execution of about 160 machine instructions    From this table  we can choose the minimum heap size that corresponds to  the desired worst case execution time for the allocation of one block of memory   A heap size of 3018K corresponds to a worst case of 20 units of garbage col   lection work  3200 machine instructions on the PowerPC  per block allocation   while a small
111. d by the path separator char         on Unix systems  can be specified  This  list will be traversed from left to right when the builder tries to load a class   Option  bootclasspath   Xbootclasspath       classpath    Specifies the default path used for loading system classes    17 1 3 Memory and threads settings  Option  numThreads n    This Builder option has an influence on the number of blocks required for some  objects  Consequently  it must be provided to numblocks for all applications that  are built with a specified number of threads     17 2 Environment Variables  The following environment variables control      numblocks command     JAMAICA NUMBLOCKS HEAPSIZE Heap size of the numblocks program in  bytes     200 CHAPTER 17  THE NUMBLOCKS COMMAND    Chapter 18  Building with Apache Ant    Apache Ant is a popular build tool in the Java world  Ant tasks for the Jamaica  Builder and other tools are available  In this chapter  their use is explained    Ant build files  normally named build xml  are created and maintained by  the Jamaica Eclipse Plug In  see 8D   They may also be created manually  To    obtain Apache Ant  and for an introduction  see the web page http    ant     Apache Ant is not provided with Jamaica  In the following sec   tions  basic knowledge of Ant is presumed     18 1 Task Declaration    Ant tasks for the Jamaica Builder and jamaicah are provided  In order to use  these tasks  taskdef directives are required  The following code should be  placed af
112. d excludeJAR  this can help you to identify which methods are included in the application    The output of this option consists of lines starting with the string INCLUDED  CLASS  INCLUDED METHOD or INCLUDED FIELD followed by the name of  a class or the name and signature of a method or field  respectively                                               Option  showExcludedFeatures    The showExcludedFeatures option will cause the Builder to display a list  of all classes  methods and fields that where removed from the built applica   tion  Any classes  methods or fields removed from the target application through  mechanisms such as smart linking will be displayed  Used in conjunction with  includeClasses  excludeClasses  includeJAR and excludeJAR  this can help you to identify which methods are excluded from the application    The output of this option consists of lines starting with the string EXCLUDED  CLASS  EXCLUDED METHOD or EXCLUDED FIELD followed by the name of  a class or the name and signature of a method or field  respectively                                      14 2 4 Compilation    Compilation and different optimisation techniques are used for optimal runtime  performance of Jamaica applications  These techniques are controlled using the  following options     Option  interpret   Xint     The interpret option disables compilation of the application  This results in a  smaller application and in faster build times  but it causes a significant slow down  of the runt
113. d synchronized  statements or nested calls to synchronized meth   ods   Exceeding this value will result in throwing  an java lang InternalError with detail message   Max  monitor nest count reached  255            255       Minimum Java heap size    64KB       Maximum Java heap size    2GB       Minimum Java heap size increment    64KB       Maximum number of heap increments  The Java heap may  not consist of more than this number of chunks  i e   when  dynamic heap expansion is used  max heap size is larger than  initial heap size   no more than this number of increments will  be performed  including the initial chunk  To avoid this limit   the heap size increment will automatically be set to a larger  value when more than this number of increments would be  needed to reach the maximum heap size           256       235       236 APPENDIX E  LIMITATIONS                      Aspect Limit   Maximum number of memory areas  instances of            javax realtime MemoryArea   Note that two in  256   stances are used for HeapMemory and ImmortalMemory   Maximum size of Java stack 64MB  Maximum size of native stack 2GB       Maximum number of constant UTFS strings  names and sig   natures of methods  fields  classes  interfaces and contents of  constant Java strings  in the global constant pool  exceeding  this value will result in a larger application    Maximum number of constant Java strings in the global con   stant pool  exceeding this value will result in a larger appli  216  
114. dic sampling  This profile is used  to provide an estimate of the methods which use the most CPU time during the  execution of an application  During each sample  the currently executing method  is determined and its sample count is incremented  independent of whether the  method is currently executing or is blocked waiting for some other event  The  total number of samples found for each method are printed when the application  terminates  Note that compiled methods may be sampled incorrectly since they  do not necessarily have a stack frame  We therefore recommend to use Xprof  only for interpreted applications     13 1 3 Environment variables used by JamaicaVM    Next to the command line options  JamaicaVM also permits the specification of  options via environment variables  8 lists the environment variables and their  meanings     13 2 jamaicavm slim    jamaicavm slimis a variant of      jamaicavm command that does not have  the standard library built in  Instead  it has to load all standard library classes that  are required by the application from the target specific rt   jar provided in the  JamaicaVM installation    Compared to jamaicavm  jamaicavm slim is significantly smaller in  size  jamaicavm slim may start up more quickly for small applications  but  it will require more time for larger applications  Also  since jamaicavm con   tains standard library classes that were pre compiled and optimized by the Ja   maica builder tool  see 8 14   jamaicavm slim will perfo
115. e SpecificatonforJava                  109   11 32 Java Native                                  111     ee ee ee ee 112   11 4 Memory                                          112  11 4 1 Memory Management         5                    113   11 4 2 F  nalzers   zx Sais ee eet  So RRC uU   Ek ae ee eH o 114  Mee 115  eee ee E OST TT eee F 116  pain ea acter 117          eh tenes        Went We trees     118  11 5 1 Schedulable Entities                       118        eo ee ee ee we eS 120   11 6 Libraries                           RRR x 30x 3X 6 EEE HO 123                     123                               use 124   ee ac Seve a oe Be e N wu Me we A 124   11 7 3 EventHandlers                          124   11 7 4 Monitors                             125        Tools Reference 127  129  p Rok Be eiui lead  ER ro bee See d 129    12 1 1 Clasppathopions        leen 129    CONTENTS    12 4 2 Compliance options                          12 1 3 Warning options                          12 1 4 Debug options                           12 1 5 Otheroptions      ese ee Gee eee eae ERI    12 2 Environment Variables                             13 The Jamaica Virtual Machine Commands     do Chae eae Aen        eon en           whee                           T  TOM  DIVI aa be ee fas DG         13 3                                                  13 3 1 Additional extended options of jamaicavmp             13 4                                                   13 4 1 Additional options of ja
116. e asynchronous events     e asynchronous flow of control     thread termination  and  e physical memory access     With this  the RTSJ also covers areas that are not directly related to realtime ap   plications  However  these areas are of great importance to many embedded real   time applications such as direct access to physical memory  e g   memory mapped  I O  or asynchronous mechanisms  Thread Scheduling To enable the develop   ment of realtime software in an environment with a garbage collector that stops  the execution of application threads in an unpredictable way  new thread classes  RealtimeThread and NoHeapRealtimeThread are defined  These thread  types are unaffected or at least less heavily affected by garbage collection activ   ity  Also  at least 28 new priority levels  logically higher than the priority of the  garbage collector  are available for these threads    Memory Management In order for realtime threads not to be affected by garbage  collector activity  they need to use memory areas that are not under the con   trol of the garbage collector  New memory classes  ImmortalMemory and  ScopedMemory  provide these memory areas  One important consequence of  the use of special memory areas is  of course  that the advantages of dynamic  memory management are not fully available to realtime threads    Synchronization In realtime systems with threads of different priority levels   priority inversion situations must be avoided  Priority inversion occurs when a  t
117. e but at time of first use of any constant  string  This saves Java heap memory and startup time since constant strings that  are never touched will not be created  However  this has the effect that accessing  a constant Java string may cause an OutOfMemoryError     Option  XlazyConstantStringsFromEnv var    Causes the creation of an application that reads its X1azyConstantStrings  setting from the specified environment variable  If this variable is not set  the  value of boolean option XlazyConstantStrings will be used  The value of  the environment variable must be 0 for  XlazyConstantStrings false       1 for  XlazyConstantStrings true     Option                    The XnoMain option builds a standalone VM  Do not select a main class for the  built application  Instead  the first argument of the argument list passed to the  application will be interpreted as the main class     Option  XnoClasses    The XnoClasses option does not include any classes in the built application   Setting this option is only needed when building the jamaicavmcommand itself     Option  XenableZIP       The XenableZIP option enables ZIP and JAR support in the generated binary   This makes binaries significantly larger  Set this this option only if you are build   ing a virtual machine  see the XnoMain option  and the application application  executed on the target system might access ZIP and JAR files in the class path at  runtime    Independently of this option  the Jamaica Builder can always pro
118. e command line options  optimize size or   optimize speed  respectively  Note that speed is normally the default     For comparision  we build the caffeine example optimising for size      gt  jamaicabuilder  cp classes                gt   useProfile CaffeineMarkEmbeddedApp prof     gt   optimize size CaffeineMarkEmbeddedApp     gt   destination caffeine useProfilel0 size       Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1    User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    size        PKG__V744a379db03fd860__ c   bee J     caffeine_useProfilel0_size__ c     caffeine useProfilelO0 size   h  Class file compaction gain  58 83032   21684433    gt  8927412       C compiling    caffeine_useProfilel0_size__ c       zie     caffeine useProfilelO0 size            linking    stripping              To check the default  invoke jamaicabuilder  help or inspect the builder status mes   sages     7 1  CODE SIZE VS  RUNTIME PERFORMANCE 65    Application memory demand will be as follows     initial max  Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread Java stacks  128KB    8  16KB  8176KB    511   16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  3328KB 343MB     gt  ls  s caffeine_useProfilel0_size  12675936 caffeine_useProfilel0_size    The resulting pe
119. e priority and the length of the period of this peri   odic thread need to be provided  A call to waitForNextPeriod   causes the  thread to wait after the completion of one activation for the start of the next period   An introduction to the RTSJ with numerous further examples is given in the book  by Peter Dibble  2     The RTSJ provides a solution for realtime programming  but it also brings new  difficulties to the developer  The most important consequence is that applications  have to be split strictly into two parts  a realtime and a non realtime part  The  communication between these parts is heavily restricted  realtime threads cannot  perform memory operations such as the allocation of objects on the normal heap  which is under the control of the garbage collector  Synchronization between  realtime and non realtime threads is heavily restricted since it can cause realtime  threads to be blocked by the garbage collector     96 CHAPTER 10  THE REAL TIME SPECIFICATION FOR JAVA    10 2 Realtime Garbage Collection    In JamaicaVM  a system that supports realtime garbage collection  this strict sep   aration into realtime and non realtime threads is not necessary  The strict splitting  of an application is consequently not required  Threads are activated depending  only on their priorities    The realtime garbage collector performs its work predictably within the appli   cation threads  It is activated when memory is allocated  The work done on an  allocation must be preemp
120. e relies on some internal features in the boot classes   Thus it is in general not possible to replace the boot classes by those of a different  virtual machine or even by those of another version of the Jamaica virtual machine  or even by those of a different Java virtual machine     Option  Xms   ms  size   The Xms option sets initial Java heap size  the default setting is 2M  This option  takes precedence over a heap size set via an environment variable    Option  Xmx   mx  size   The Xmx option sets maximum Java heap size  the default setting is 256M  This  option takes precedence over a maximum heap size set via an environment vari   able    Option    Xmi   mi size   The Xmi option sets heap size increment  the default setting is 4M  This option  takes precedence over a heap size increment set via an environment variable   Option  Xss   ss  size   The Xss option sets stack size  native and interpreter   This option takes prece   dence over a stack size set via an environment variable    Option  Xjs   js  size    The X js option sets interpreter stack size  the default setting is 64K  This option  takes precedence over a java stack size set via an environment variable     136 CHAPTER 13  THE JAMAICA VIRTUAL MACHINE COMMANDS    Option  Xns   ns  size    The Xns option sets native stack size  set default setting is 64K  This option takes  precedence over a native stack size set via an environment variable     Option  Xprof    Collect simple profiling information using perio
121. e shown to be executed  most frequently during the profiling run     e Profiling information also collects information on the use of reflection  so  an application that cannot use smart linking due to reflection can profit from  smart linking even without manually listing all classes referenced via reflec   tion     6 2 1 Building with a profile    The builder option  useProfile is used to select the generated profiling data         gt  jamaicabuilder  cp classes  useProfile HelloWorld prof HelloWorld  Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1    User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed                V591866ffa60dffcb  c   Ixus     HelloWorld   c     HelloWorld   h  Class file compaction gain  58 833664   21672755    gt  8921879      C compiling    HelloWorld__ c                  HelloWorld__nc o     linking     stripping  Application memory demand will be as follows     initial max  Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread Java stacks  128KB    8  16KB  8176KB    511   16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB    TOTAL  3328KB 343MB    6 3  INTERPRETING THE PROFILING OUTPUT 51    Due to the profile guided optimizations performed by the compiler  the runtime  performance of the application built using a profile a
122. ead objects all share the same priority range  The lowest possible  thread priority for all of these threads is defined in package java lang  class  Thread by field MIN PRIORITY  The highest possible priority is can be ob   tained by querying instance   getMaxPriority   class Priority   Scheduler  package javax realtime                    114 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES    Runtime checks for NoHeapRealtimeThread    Since even NoHeapRealtimeThreads are immune to interruption by garbage  collector activities  JamaicaVM does not restrict these threads from accessing ob   jects allocated on the normal heap  Runtime checks that typically ensure that  these threads do not access objects allocated on the heap can be disabled in the  JamaicaVM  The result is better overall system performance     Static Initializers    In order to permit the initialization of classes even when their first reference is per   formed within ScopedMemory or ImmortalMemory within a Realtime   ThreadorNoHeapRealtimeThread  and to permit the access of static fields  such as System out from within these threads  static initializers are typically  executed within ImmortalMemory that is accessible by all threads  However   this prevents these objects from being reclaimed when they are no longer in use   This can result in a serious memory leak when dynamic class loading is used  since memory allocated by the static initializers of dynamically loaded classes  will never be reclaimed    Since the 
123. ed for disk  FTP or NFS access   simply enter the following command on the target shell         ld    filename    Here  filename is the complete filename of the created application    The main entry point for an application built with the Jamaica Builder is the  name specified by the Builder option destination with the prefix    jvm      The name    jvm    may also be used  If the option dest ination is not specified   the name of the class file containing the main    method is used  For example     in the VxWorks target shell the HelloWorld application may be started with         sp jvm HelloWorld   args     B 1  VXWORKS 217    The example shows how to pass arguments to the process even though the Hel   loWorld application does not use the arguments    Note  even if the Builder generates a file with the specified name  it may be  renamed later  because the name of the main entry point is read from the symbol  table included in the object file    Optional parameters  like classpathorXbootclasspath may be passed  to the application as a single C argument string with text enclosed in          double  quotes   Multiple arguments in the string are separated by spaces  The start code  of the created application parses this string and passes it as a standard Java string  array to the main method     Setting environment variables    Environment variables may be set in the VxWorks shell via the putenv com   mand       gt  putenv   VARIABLE value       In order to start a user task th
124. eeds to be configured to include  it by adding INCLUDE  UNLOADER to the configuration as suggested in                  B 1 4 Starting an application  RTP     If real time processes  aka RTP  are used  the dynamic library 1ibc so must be  renamed to 1ibc so 1 and added to the folder of the executable  This library  is located in the WorkBench installation    SWIND_USR 11ib architecture   architecture variant   common  1e   libc so  where architecture is  for example  pent ium and architecture variant is  for ex     ample  PENTIUM  in case of an x86 architecture   To start the application  please use the following shell command            rtpSp  Filename     If you would like to specify command line parameters  add them as space seper   ated list in the following fashion         rtpSp  filename argl arg2 arg3     The rtpSp command will pass environment variables from the shell to the spawned  process     B 1  VXWORKS 219    B 1 5 Linking the application to the VxWorks kernel image    The built application may also be linked directly to the VxWorks kernel image  for  example for saving the kernel and the application in FLASH memory  In the Vx   Works kernel a user application can be invoked enabling the VxWorks configura   tion define INCLUDE_USER_APPL and defining the macro USER_APPL_INIT  when compiling the kernel  see VxWorks documentation and the file usrConfig   c   The prototype to invoke the application created with the Builder is                          int jvm main con
125. eineMarkEmbeddedApp pro      gt  CaffeineMarkEmbeddedApp  destination caffeine_useProfilel0  Reading configuration from                7 1  CODE SIZE VS  RUNTIME PERFORMANCE 63      usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1   User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed               Vf71376adaaf8ea99 __ c   scu    caffeine useProfilelO0   c    caffeine useProfilelO0   h  Class file compaction gain  58 83032   21684433    gt  8927412      C compiling    caffeine_useProfilel0__ c     Lx    caffeine useProfilelO0  nc o    linking  x stripping  Application memory demand will be as follows           initial max  Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread Java stacks  128KB    8   16KB  8176KB    511   16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  3328KB 343MB     gt  ls  s caffeine_useProfilel0  12778336 caffeine useProfilelO    The resulting application size is only slightly larger than the interpreted version   but the runtime performance is nearly the same as that of the fully compiled ver     sion as presented in 8     gt    caffeine useProfilel10  Sieve score   10583  98   Loop score   33002  2017   Logic score   50558  0   String score   10105  708   Float score   12747  185   Method score   7357  166650   Overall score   15993    When a profi
126. en for each file or directory by suffixing with         encoding       e g   X java utf8      Option    Joption    This option is ignored     Option  X    The X option prints non standard options and exits     12 2 Environment Variables    The following environment variables control jamaicac     JAMAICAC MIN             2   Initial heap size of the jamaicac command it   self in bytes  Setting this to a larger value will improve the jamaicac  performance     JAMAICAC HEAPSIZE Maximum heap size of      jamaicac command itself  in bytes  If the initial heap size is not sufficient  it will increase its heap  dynamically up to this value  To compile large applications  you may have  to set this maximum heap size to a larger value     JAMAICAC JAVA STACKSIZE Java stack size of the jamaicac command  itself in bytes     132 CHAPTER 12  THE JAMAICA JAVA COMPILER    JAMAICAC NATIVE STACKSIZE Native stack size of the jamaicac com   mand itself in bytes     Chapter 13    The Jamaica Virtual Machine  Commands    The Jamaica virtual machine provides a set of commands that permit the execution  of Java applications by loading a set of class files and executing the code  The  command                    lauches the standard Jamaica virtual machine  Its variants  jamaicavm_slim  jamaicavmp and jamaicavdi provide special features  like debug support     13 1 jamaicavm    The jamaicavm is the standard command to execute non optimized Java appli   cations in interpreted mode     jamaicavm  option
127. er and a client   A typical server program creates some remote objects  makes references to  these objects accessible  and waits for clients to invoke methods on these  objects  A typical client program obtains a remote reference to one or more  remote objects on a server and then invokes methods on them  RMI provides  the mechanism by which the server and the client communicate and pass  information back and forth     Like any other Java application  a distributed application built by using Java  RMI is made up of interfaces and classes  The interfaces declare methods   The classes implement the methods declared in the interfaces and  perhaps   declare additional methods as well  In a distributed application  some im   plementations might reside in some Java virtual machines but not others   Objects with methods that can be invoked across Java virtual machines are  called remote objects     An object becomes remote by implementing a remote interface  which has  the following characteristics     e A remote interface extends the interface java  rmi Remote     e  n addition to any application specific exceptions  each method sig   nature of the interface declares java rmi RemoteExceptionin  its throws clause      Using RMI to develop a distributed application involves these general steps     1  Designing and implementing the components of your distributed ap   plication     2  Compiling sources   3  Making classes network accessible     4  Starting the application     First  de
128. er heap size of  for example  2504K can only guarantee a worst case    8 2  CONFIGURATION FOR HARD REALTIME APPLICATIONS 83    execution time of 40 units of garbage collection work  that is  6400 PowerPC   instructions  per block allocation    If we find that for our application 14 units of garbage collection work per  allocation is sufficient to satisfy all realtime requirements  we can build the final  application using a heap of 3550K            gt  jamaicabuilder  cp classes  heapSize 3550K  maxHeapSize 3550K     gt  HelloWorld  Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1   User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed       PKG__V66c2f3114d534efc__ o  reusing existing file for package    Dou    HelloWorld   c    HelloWorld   h  Class file compaction gain  58 96339   21654255    gt  8886172     C compiling    HelloWorld__ c       HelloWorld  nc o    linking  x stripping  Application memory demand will be as follows        initial max  Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread Java stacks  128KB    8  16KB  8176KB    511   16KB   Heap Size  3550KB 3550KB  GC data  221KB 221KB  TOTAL  4923KB 75MB    Note that both options  heapSize and maxHeapSize  are set to the same  value  This creates an application that has the same initial 
129. et a list of all possible values  invoke the Builder with  help     Option  setLocales     locale  locale       The set Locales option can be used to choose the set of locales to be included  in the target application  This involves date  currency and number formats  Lo   cales are specified by a lower case  two letter code as defined by ISO 639   Example   setLocales  de en  will include German and English lan   guage resources  All country information of those locales  e g  Swiss currency   will also be included   To get a list of all possible values  invoke the Builder with  help     Option  setTimeZones      timezone  timezone      The setTimeZones option can be used to choose the set of time zones to be  included in the target application  By default all time zones are built in   Examples   set TimeZones Europe Berlin will include the time zone  of Berlin only    set TimeZones Europe will include all European time zones   setTimeZones  Europe Berlin America Detroit  includes time  zones for Berlin and Detroit                       14 2  BUILDER USAGE 153    See the folder jamaica home target platform 1ib zi for the available  time zones     Option  setProtocols     protocol  protocol      The setProtocols option can be used to choose the set of protocols to be  included in the target application    Example   setProtocols  ftp http  will include handlers for FTP  and HTTP protocols    To get a list of all possible values  invoke the Builder with  help     Option  cdc    T
130. ets  thus take an unbounded  amount of time     Originally  Java was a language that was very close to C in its syntax with  comparable computational complexity of its statements  Only a few exceptions  where made  Java has evolved  particularly in the area of class libraries  to ease  the job of programming complex systems  at the cost of diminished computational  transparency  Therefore a short tour of the different Java statements and expres   sions  noting where a non obvious amount of computational effort is required to  perform these statements with the Java implementation Jamaica VM  is provided  here     11 2 1 Efficient Java Statements    First the good news  Most Java statements and expressions can be implemented  in a very short sequence of machine instructions  Only statements or constructs  for which this is not so obvious are considered further     11 2  COMPUTATIONAL TRANSPARENCY 103    Dynamic Binding for Virtual Method Calls    Since Java is an object oriented language  dynamic binding is quite common   In the JamaicaVM dynamic binding of Java methods is performed by a simple  lookup in the method table of the class of the target object  This lookup can  be performed with a small and constant number of memory accesses  The total  overhead of a dynamically bound method invocation is consequently only slightly  higher than that of a procedure call in a language like C     Dynamic Binding for Interface Method Calls    Whereas single inheritance makes normal meth
131. fied     Option  Xstrip f  ool    The Xstrip option uses the specified tool to remove debug information from  the generated binary  This will reduce the size of the binary file by removing  information not needed at runtime     Option  XnoRuntimeChecks    The XnoRuntimeChecks option disables runtime checks for compiled Java  code  This option deactivates runtime checks to obtain better runtime perfor   mance  This may be used only for applications that do not cause any runtime  checks to fail  Failure to run these checks can result in crashes  memory cor   ruption and similar disasters  When untrusted code is executed  disabling these  checks can cause vulnerability through attacks that exploit buffer overflows  type  inconsistencies  etc    The runtime checks disabled by this option are  checks for use of null point   ers  out of bounds array indices  out of bounds string indices  array stores that are    176 CHAPTER 14  THE JAMAICA BUILDER    not compatible with the array element type  reference assignments between in   compatible memory areas  division by zero and array instantiation with negative  array size  These runtime checks usually result in throwing one of the following  exceptions        NullPointerException ArrayIndexOutOfBoundsException          StringIndexOutOfBoundsException ArrayStoreException  IllegalAssignmentError ArithmeticException  NegativeArraySizeException             When deactivated  the system will be in an undefined state if any of these condi   t
132. g                                 16 2 The Jamaicah Command                  16 2 1 General             lll          16 2 3 Environment Variables                    17        Numblocks Command    MD DER          17 1 1 General             lll  nuc  T     17 2 Environment Variables                     18 Building with Apache Ant    18 1 Task Declaration                      18 2 Task                                   IV Additional Information  A FAQ     Frequently Asked Questions    Mac pep  TM       A Died Go hie eh Be Beye 2 a  Lucus SUP Sere EU Sas Be NNUS    A 6 VxWorksTargetl         llle    CONTENTS    B    E    CONTENTS 9  Information for Specific Targets 213        VXxWOtFKS  za oe             OR           eae eee 213   B 1 1 Configuration of VxWorks                    213   Eurum 215  B 1 3 Starting an application DKM                  216  B 1 4 Starting an application                          218  2 1219       1   __1                                         219   B 1 7 Additnonalnotes                         220      2         5                                220  B 2  Installation                            220  _ RENDER ENS 221   ee Gs td EE 221  ar      eee 221  B 3 1 Installation                            222   B 3 2 Linker Directives File                        222  MD 223  B 4 Widows                                 223  B 4 1 Lamitations      223   B 5 WindowsCEH               Re 224     5 1 Lamitations       0    224                 224  B 61 Lamitations     
133. have to set the property jamaica   profile groups to select one or more profiling groups  The default value  is builder to collect data used by the builder  You can set the property to the  values builder  memory  speed  all or a comma separated combination of  those  Example      gt  jamaicavmp  cp classes     gt   Djamaica profile groups builder speed     gt  HelloWorld       The format of the profile file is likely to change in future versions of Jamaica  Builder     52 CHAPTER 6  PERFORMANCE OPTIMIZATION    6 3 1 Format of the profile file    Every line in the profiling output starts with a keyword followed by space sepa   rated values  The meaning of these values depends on the keyword    For a better overview  the corresponding values in different lines are aligned as  far as possible and words and signs that improve human reading are added  Here  for every keyword the additional words and signs are omitted and the values are  listed in the same order as they appear in the text file              Keyword  BEGIN PROFILE DUMP Groups  all       Values    1  unique dump ID                Keyword  END PROFILE DUMP Groups  all  Values    1  unique dump ID    Keyword  HEAP REFS Groups  memory  Values  1  total number of references in object attributes  2  total number of words in object attributes    3  relative number of references in object attributes    Keyword  HEAP USE Groups  memory  Values  1  total number of currently allocated objects of this class  2  number of blocks
134. he Eclipse Plug In   The following example shows an Ant target for executing the Jamaica Builder       target name  build app      lt jamaicabuilder jamaica   usr local jamaica  gt                     lt target value  linux x86        classpath value  classes   gt    lt classpath value  extLib jar   gt    lt interpret value  true  enabled  false   gt    lt heapSize value  32M   gt    lt Xlibraries value  extLibs  append  true   gt    lt XdefineProperty value  window size 800x600  gt    lt main value  Application   gt    lt  jamaicabuilder gt    lt  target gt     This is equivalent to the following command line      usr local jamaica bin jamaicabuilder  target linux x86   classpath classes extLib jar   heapSize 32M   Xlibraries t extLibs  XdefineProperty window size 800x600  Application                Note that some options take arguments that contain the equals sign  For example   the argument to XdefineProperty is of the form property value  As shown  in the example  the entire argument should be placed in the value attribute liter   ally  Ant pattern sets and related container structures are currently not supported  by the Jamaica Ant tasks     Part IV    Additional Information    203    Appendix A  FAQ     Frequently Asked Questions    Check here first when problems occur using JamaicaVM and its tools     A 1 General Information    Q  I use Eclipse to develop my Java applications  Is there a plug in available  which will help me to use JamaicaVM and the Builder from within
135. he VM  Rescheduling is a sub state  of the running thread  The running thread state is changed to rescheduling when  another thread becomes more eligible to execute  This happens when a thread of  higher priority becomes ready either by unblocking or attaching to the VM  The  running thread will then run to the next synchronization point and yield the CPU  to the more eligible thread  Ready threads are attached threads which can execute  as soon as no other thread is more eligible to run  Attached threads may block    186 CHAPTER 15  THE JAMAICA THREADMONITOR    for a number of reasons  the most common of which are calls to Thread sleep   Object wait  and entering of a contended monitor     15 3 1 Data Window Navigation    The data window permits easy navigation through the displayed scheduler data   Two main properties can be changed  The time resolution can be contracted or  expanded  and the total display can be enlarged or reduced  zoom in and zoom  out   Four buttons on the top of the window serve to change these properties     Selection of displayed area    The displayed area can be selected using the scroll bars or via dragging the con   tents of the window while holding the left mouse button     Time resolution    The displayed time resolution can be changed via the buttons    expand time    and     contract time    or via holding down the left mouse button for expansion or the  middle mouse button for contraction  Instead of the middle mouse button  the  control key 
136. he cdc option forces the inclusion of all standard library code within the CDC  configuration  This    Connected Device Configuration  is intended for use in small  connected devices    Providing this option forces the Builder to include all classes  fields  methods  and constructors that form part of the CDC configuration    The resulting application will hence be able to access all code in the CDC  configuration through dynamically loaded classes or the reflection API even if  this code would otherwise not be included in the application     Option  cldc    The cldc option forces the inclusion of all standard library code within the  CLDC configuration  This    Connected Limited Device Configuration  is intended  for use in very small connected devices    Providing this option forces the Builder to include all classes  fields  methods  and constructors that form part of the CLDC configuration    The resulting application will hence be able to access all code in the CLDC  configuration through dynamically loaded classes or the reflection API even if this  code would otherwise not be included in the application     Option  incrementalCompilation    If the incrementalCompilation option is set to t rue  C code is split into  several files for incremental compilation  The generated code is split into one file  per package  This is the default behavior  If this option is set to false  all C code  is put into one single  potentially large C source file     154 CHAPTER 14  THE JAMAI
137. he finalizer thread priority to a low value if your system has enough  idle time     e  f your application uses allocation bursts with sufficient CPU idle time in  between two allocation bursts  set the amount of reserved memory to fit  with the largest allocation burst     e  f your application does not have idle time with intermittent allocation bursts   set the amount of reserved memory to 0      80 CHAPTER 8  MEMORY MANAGEMENT CONFIGURATION    e Enable the GC thread if your system has idle time that can be used for  garbage collection     8 2 Configuration for hard realtime applications    For predictable execution of memory allocation  more care is needed when select   ing memory related options  No dynamic heap size increments should be used if  the break introduced by the heap size expansion can harm the realtime guarantees  required by the application  Also  the heap size must be set such that the implied  garbage collection work is tolerable    The memory analyzer tool is used to determine the garbage collector settings  during a runtime measurement  Together with the numblocks command  see  8 17   they permit an accurate prediction of the time required for each memory al   location  The following sections explain the required configuration of the system     8 2 1 Usage of the Memory Analyzer tool    The Memory Analyzer is a tool for fine tuning an application s memory require   ments and the realtime guarantees that can be given when allocating objects within  Java 
138. he same way as it would if it were called with the jamaicavm  or java command    Despite its name  the option accepts directories as well  Multiple archives  or    66 0 99    directories  should be separated by the system specific path separator  colon         ec 99       on Unix systems and semicolon      on Windows     Option  excludeJAR      file    file     The excludeJAR option forces the exclusion of all classes and resources con    tained in the specified files  Any class and resource found will be excluded from   the created application  Use this option to load an entire archive at runtime   Despite its name  the option accepts directories as well  Multiple archives  or    oo 0 99    directories  should be separated by the system specific path separator  colon         ee  99       on Unix systems and semicolon      on Windows     Option  lazy    Jamaica VM by default uses static linking of all Java classes  This means that all  classes that are referenced from the main class will be loaded before execution  of the application starts  This early loading and linking of classes ensures that    14 2  BUILDER USAGE 151    during the execution of the Java application  no further class loading and linking  will be required  ensuring the predictable execution of statements that can cause  class loading in a traditional Java environment    The statements that may cause loading and linking of classes are the same  statements that may cause the execution of static initalizers of
139. he use of final local variables  any private fields that are accessed  from within an inner class require the call to a hidden access method since these  accesses would otherwise not be permitted by the virtual machine     11 2  COMPUTATIONAL TRANSPARENCY 105    11 2 3 Statements Causing Implicit Memory Allocation    Thus far  only execution time has been considered  but memory allocation is also  a concern for safety critical systems  In most cases  memory allocation in Java  is performed explicitly by the keyword new  However  some statements per   form memory allocations implicitly  These memory allocations do not only re   quire additional execution time  but they also require memory  This can be fa   tal within execution contexts that have limited memory  e g   code running in a  ScopedMemory or ImmortalMemory as itis required by the Real Time Spec   ification for Java for NoHeapRealtimeThreads  A realtime Java programmer  should be familiar with all statements and expressions which cause implicit mem   ory allocation           String Concatenation    Java permits the composition of strings using the plus operator  Unlike adding  scalars such as int or float values  string concatenation requires the allocation    of temporary objects and is potentially very expensive   As an example  the instruction    rnt              Object thing           String msg    x is   x     thing is     thing   will be translated into the following statement sequence     THE    2     Object th
140. heap can be used for shared memory communication between  all threads  Any high priority task can access objects on the heap even while  a lower priority thread accesses the same objects or even while a lower priority  thread allocates memory and performs garbage collection work  In the latter case   the small worst case execution time of an increment of garbage collection work  ensures a bounded and small thread preemption time  typically in the order of a  few microseconds     11 4  MEMORY MANAGEMENT 117    Synchronization The use of Java monitors in synchronized methods and  explicit synchronized statements enables atomic accesses to data structures   These mechanisms can be used equally well to protect accesses that are performed  in high priority realtime tasks and normal non realtime tasks  Unfortunately  the  standard Java semantics for monitors does not prevent priority inversion that may  result from a high priority task trying to enter a monitor that is held by another task  of lower priority  The stricter monitor semantics of the RTSJ avoid this priority  inversion  All monitors are required to use priority inheritance or the priority  ceiling protocol  such that no priority inversion can occur when a thread tries to  enter a monitor  As in any realtime system  the developer has to ensure that the  time that a monitor is held by any thread must be bounded when this monitor  needs to be entered by a realtime task that requires an upper bound for the time  required t
141. heap size and maxi   mum heap size  i e   the heap size is not increased dynamically  This is required  to ensure that the maximum of 14 units of garbage collection work per unit of  allocation is respected during the whole execution of the application  With a dy   namically growing heap size  an allocation that happens to require increasing the  heap size will otherwise be blocked until the heap size is increased sufficiently   The resulting application will now run with the minimum amount of memory  that guarantees the selected worst case execution time for memory allocation  The  actual amount of garbage collection work that is performed is determined dynam   ically depending on the current state of the application  including  for example   its memory usage  and will in most cases be significantly lower than the described  worst case behavior  so that on average an allocation is significantly cheaper than    84 CHAPTER 8  MEMORY MANAGEMENT CONFIGURATION    the worst case allocation cost     8 25 Constant Garbage Collection Work    For applications that require best worst case execution times  where average case  execution time is less important  Jamaica also provides the option to statically  select the amount of garbage collection work  This forces the given amount of  garbage collection work to be performed at any allocation  without regard to the  current state of the application  The advantage of this static mode is that worst case  execution times are lower than using
142. hread of high priority is blocked by waiting for a monitor that is owned by a  thread of a lower priority  The RTSJ provides the alternatives priority inheritance    and the priority ceiling protocol to avoid priority inversion    The RTSJ offers powerful features that enable the development of realtime  applications  The following program in shows an example how the RTSJ can be  used in practice                      Small demonstration of a periodic thread      Java         import javax realtime  x   public class HelloRT     public static void main String    args         priority for new thread  min 10            10 1  REALTIME PROGRAMMING WITH THE RTSJ 95    int pri    PriorityScheduler instance   getMinPriority     10   PriorityParameters prip   new PriorityParameters  pri         period  20ms      RelativeTime period    new RelativeTime 20    ms     0     ns x                   release parameters for periodic thread       PeriodicParameters perp    new PeriodicParameters  null  period  null  null  null  null            create periodic thread       RealtimeThread rt   new RealtimeThread prip  perp                 public void run       int n 1   while  waitForNextPeriod    amp  amp   n lt 100         System out printin  Hello         ntt                 start periodic thread      rt start       In this example  a periodic thread is created  This thread becomes active every  20ms and writes output onto the standard console  A RealtimeThreadis used  to implement this task  Th
143. ich will be compiled  That is  replace a static initializer    class A         static          lt initialisation code gt             by the following code   class A     static     init            private static void init                lt initialisation code gt             e Methods with bytecode that is longer than the value provided by builder  option XexcludeLongerThan are not compiled     e When option lazy is set  which is the default   methods that reference a  class  field or method that is not present at build time are not compiled  The  referenced class will be loaded lazily by the interpreter     238 APPENDIX E  LIMITATIONS    Appendix F    Internal Environment Variables    Additional debugging output can be activated through environment variables if an  application was built with the internal option  debug t rue  This option and its  environment variables are used for debugging Jamaica itself and are not normally  relevant for users of JamaicaVM     JAMAICA DEBUGLEVEL Defines the debug level of an application that was  built with the option debug  A level of 0 means that only a small amount of  debug output is printed  a level of 10 means that very detailed debug output  is printed     Note that at a debug level of 10 a simple HelloWorld application will pro   duce thousands of lines of debug output  A good choice is a level of about 5     JAMAICA DEBUGCALLNATIVE Defines a string that gives the name of a native  method  Any call to that method is printed in additio
144. icient idle time should  therefor run with the maximum amount of reserved memory set to 0     The priority default of the memory reservation thread is the Java priority 1  with the scheduler instructed to give preference to other Java threads that run  at priority 1  ie   with a priority micro adjustment of  1   The priority can  be changed by setting the Java property jamaica reservation thread   priority toan integer value larger than or equal to 0  If set  the memory reser   vation thread will run at the given Java priority  A value of 0 will result at a Java  priority 1 with micro adjustment    1  i e   the scheduler will give preference to  other threads running at priority 1        8 1 5 Using a GC thread    In JamaicaVM  the garbage collection work is by default performed in the ap   plication threads  so there is no need for a dedicated garbage collection thread   However  in an application that provides idle CPU time  one might wish to use  this idle time to take load from the main threads and perform garbage collection  work during idle time  JamaicaVM permits this by enabling the use of a garbage  collection thread  GC thread     The GC thread is by default not activated  It can be activated by setting a Java  system property jamaica gcthread  pri  The value of this property must  be the desired thread priority the GC thread should run at  Typically  the lowest  Java thread priority 1 is the best value to use an application s idle time    Since the application may 
145. ics of threads for realtime systems  These  threads can use a priority range that is higher than that of all normal Java Threads  with at least 28 unique priority levels  The default scheduler uses these priori   ties for fixed priority  preemptive scheduling  In addition to this  the new thread  classes can use the new memory areas ScopedMemory and ImmortalMemory  that are not under the control of the garbage collector    As previously mentioned  threads of class NoHeapRealt imeThreads are  not permitted to access any object that was allocated on the garbage collected  heap  Consequently  these threads do not suffer from garbage collector activity as  long as they run at a priority that is higher than that of any other schedulable object  that accesses the garbage collected heap  In the Jamaica VM Java environment   the memory access restrictions present in NoHeapRealtimeThreads are not  required to achieve realtime guarantees  Consequently  the use of NoHeapReal   timeThreads is neither required nor recommended    Apart from the extended priority range  RealtimeThreads provide fea   tures that are required in many realtime applications  Scheduling parameters for  periodic tasks  deadlines  and resource constraints can be given for Realtime   Threads  and used to implement more complex scheduling algorithms  For  instance  periodic threads in the JamaicaVM use these parameters  In the Ja   maicaVM Java environment  normal Java threads also profit from strict fixed pri   orit
146. ictRTSd is set  names and instances of class PhysicalMemory   TypeFilter in package javax realtime that are passed to method  registerFilter of class PhysicalMemoryManager in the same pack   age must be allocated in immortal memory as required by the RTSJ        10 5 Limitations of RTSJ Implementation    The following methods or classes of the RTSJ are not fully supported in Ja   maicaVM 6 0     e Class VTPhysicalMemory       e Class LTPhysicalMemory       e Class ImmortalPhysicalMemory          e In class AsynchronouslyInterruptedException the deprecated  method propagate    is not supported     100 CHAPTER 10  THE REAL TIME SPECIFICATION FOR JAVA    Cost monitoring is supported and cost overrun handlers will be fired on a cost  overrun  However  cost enforcement is currently not supported  The reason is that  stopping a thread or handler that holds a lock is dangerous since it might cause  a deadlock  RTSJ cost enforcement is based on the CPU cycle counter  This is  available on x86 and PPC systems only  so cost enforcement will not work on  other systems     Chapter 11    Guidelines for Realtime  Programming in Java    11 1 General    Since the timeliness of realtime systems is just as important as their functional  correctness  realtime Java programmers must take more care using Java than other  Java users  In fact  realtime Java implementations in general and the JamaicaVM  in particular offer a host of features not present in standard Java implementations    The Jamaica
147. ifies the initial number of Java threads supported  by the destination application  These threads and their runtime stacks are gener   ated at startup of the application  A large number of threads consequently may  require a significant amount of memory    The minimum number of threads is two  one thread for the main Java thread  and one thread for the finalizer thread     Option  maxNumThreads n    The maxNumThreads options specifies the maximum number of Java threads  supported by the destination application  If the maximum number of threads is  larger than the values specified for numThreads  threads will be added dynam   ically    Adding new threads requires unfragmented heap memory  It is strongly rec   ommended to use  maxNumThreads only in conjunction with maxHeapSize set  to a value larger than heapSize  This will permit the VM to increase the heap  when memory is fragmented    The absolute maximum number of threads for the Jamaica VM is 511     14 2  BUILDER USAGE 159    Option  numJniAttachableThreads n    The numJniAttachableThreads specifies the initial number of Java thread  structures that will be allocated and reserved for calls to the JNI Invocation API  functions  These are the functions JNI AttachCurrentThread and JNI    AttachCurrentThreadAsDaemon  These threads will be allocated on VM  startup  such that no additional allocation is required on a later call to JNI  AttachCurrentThreadorJNI AttachCurrentThreadAsDaemon    Even if this option is set to zero  i
148. ilarly  weak  soft and phantom references rely on the presence of a final   izer  If the resources available on the target system do not permit the use of  a finalizer thread  the application may execute finalize   method ex   plicitly by frequent calls to Runtime  runFinalization     This will  also permit the use of weak  soft and phantom references even if no finalizer  thread is present        4  Setting the number of threads    The number of threads available for the application can be set using option  numThreads  The default setting for this option is two  which is enough  for the finalizer thread and the main thread of the application     If the finalizer thread is deactivated and no new threads are started by the  application  the number of threads can be reduced to one by using the setting   numThreads l     Note that if profiling information was collected and is provided via the  useProfile option  the number of threads provided to the numTh reads  option will be checked to ensure it is at least the the number of threads that  were required during the profiling run  If not  a warning message with the  minimum number of threads during the profiling run will be displayed  This  information can be used to adjust the number of threads to the minimum re   quired by the application     5  Disabling time slicing    On non realtime systems that do not strictly respect thread priorities  Ja   maica uses one additional thread to allow time slicing between threads  On  realti
149. ime performance    If none of the options interpret  compile  or useProfile is spec   ified  then the default compilation will be used  The default means that a pre   generated profile will be used for the system classes  and all application classes  will be compiled fully  This default usually results in good performance for small  applications  but it causes extreme code size increase for larger applications and  it results in slow execution of applications that use the system classes in a way  different than recorded in the system profile     156 CHAPTER 14  THE JAMAICA BUILDER    Option  compile    The compile option enables static compilation for the created application  All  methods of the application are compiled into native code causing a significant  speedup at runtime compared to the interpreted code that is executed by the virtual  machine  Use compilation whenever execution time is important  However  it  is often sufficient to compile about 10 percent of the classes  which results in  much smaller executables of comparable speed  You can achieve this by using the  options profile and useProfile instead of compile     Option  inline n    When methods are compiled  via one of the options compile  useProfile   orinterpret false  this option can be used to set the level of inlining to be  used by the compiler  Inlining typically causes a significant speedup at runtime  since the overhead of performing method calls is avoided  Nevertheless  inlining  causes duplicatio
150. imeThread to run in their own memory area not under the con   trol of the garbage collector  Instead  any thread can use and access the normal  garbage collected heap    Nevertheless  any thread can make use of the new memory areas such as  LTMemory or ImmortalMemory if the application developer wishes to do so           10 3  RELAXATIONS IN JAMAICAVM 97    Since these memory classes are not controlled by the garbage collector  alloca   tions do not require garbage collector activity and may be faster or more pre   dictable than allocations on the normal heap  However  great care is required in  these memory areas to avoid memory leaks  since temporary objects allocated in  scoped or immortal memory will not be reclaimed automatically     10 3 2 Thread Priorities    In JamaicaVM  RealtimeThread  NoHeapRealtimeThread and normal  Thread objects all share the same priority range  The lowest possible thread  priority for all of these threads is MIN PRIORITY which is defined in pack   age java lang  class Thread  The the highest possible priority may be ob   tainded by querying instance   getMaxPriority  inpackage javax   realtime class PriorityScheduler                    10 3 3 Runtime checks for NoHeapRealtimeThread    Even NoHeapRealtimeThread objects will be exempt from interruption by  garbage collector activities  JamaicaVM does not  therefore  prevent these threads  from accessing objects allocated on the normal heap  Runtime checks that typi   cally ensure that these thre
151. in point  e g   after a timeout or on a certain user input  The easiest  means to terminate an application is via a call to System  exit     Otherwise   all threads that are not daemon threads need to be terminated    To request a remote profile  the property jamaica profile request  port has to be set to a port number  Then  a request to write the profile can be  sent via the command       jamaicavm com aicas jamaica lang Profile host port    See     C  for more information on this mechanism    Profiling information is always appended to the profiling file  This means  that profiling information from several profiling runs of the same application  e g   using different input data  will automatically be written into a single profiling  file  To fully overwrite the profiling information  e g   after a major change in the  application  the profiling file must be deleted manually     138 CHAPTER 13  THE JAMAICA VIRTUAL MACHINE COMMANDS    The collection of profiling information requires additional CPU time and mem   ory to store this information  It may therefore be necessary to increase the memory  size  Also expect poorer runtime performance during a profiling run     13 3 1 Additional extended options of jamaicavmp  Option  XprofileFilename filename    This option selects the name of the file to which the profile data is to be written   If this option is not provided  the default file name is used  consisting of the main  class name and the suffix   prof     13 4 jamaicavmdi 
152. ing           StringBuffer tmp sb   new StringBuffer     tmp sb append  x is       tmp sb append x     tmp sb append   thing is       tmp sb append thing toString       String msg   tmp sb toString       The code contains hidden allocations of a StringBuffer object  of an internal  character buffer that will be used within this StringBuffer  atemporary string  allocated for thing toString     and the final string returned by        sb   toString   gt     Apart from these hidden allocations  the hidden call to thing toString     can have an even higher impact on the execution time  since method toString  can be redefined by the actual class of the instance referred to by thing and can  cause arbitrarily complex computations     106 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES    Array Initialization    Java also provides a handy notation for array initialization  For example  an array  with the first 8 Fibonacci numbers can be declared as    Inti tibs    1  14 2  3  5 8  13  21 47    Unlike C  where such a declaration is converted into preinitialized data  the Java  code performs a dynamic allocation and is equivalent to the following code se   quence     int fib   new int 8    fib  fib  fib  fib  fib  fib  fib  fib                        1  1    2    3  5      8     13     21                                              Initializing arrays in this way should be avoided in time critical code  When pos   sible  constant array data should be initialized within the static initiali
153. ing data among cooperat   ing tasks  This interaction requires synchronization to ensure data integrity  There  are implications on scheduling of threads and synchronization beyond memory  access issues     11 5 1 Schedulable Entities    The RTSJ introduces new scheduling entities to Java  RealtimeThread and  NoHeapRealtimeThread are thread types with clearer semantics than nor   mal Java threads of class Thread and additional scheduling possibilities  Events  are the other new thread like construct used for transient computations  To save  resources  mainly operating system threads  and thus memory and performance    AsyncEvents can be used for short code sequences instead  They are easy to  use because they can easily be triggered programmatically  but they must not be  used for blocking  Also  there are BoundAsyncEvents which each require  their own thread and thus can be used for blocking  They are as easy to use  as normal AsyncEvents  but do not use fewer resources than normal threads   AsyncEventHandlers are triggered by an asynchronous event  AII three exe   cution environments  RealtimeThreads  NoHeapRealtimeThreads and  AsyncEventHandlers  are schedulable entities  1      they all have release pa   rameters and scheduling parameters that are considered by the scheduler        11 5  SCHEDULING AND SYNCHRONIZATION 119    RealtimeThreads and NoHeapRealtimeThreads    The RTSJ includes new thread classes Realt imeThreads and NoHeapReal   timeThreads to improve the semant
154. ions occurs     Option  XavailableTargets    The XavailableTargets option lists all available target platforms of this Ja   maica distribution     14 3 4 Profiling    Profiling can be used to guide the compilation process and to find a good trade off  between fast compiled code and smaller interpreted byte code  This is particularly  important for systems with tight memory and CPU resources     Option  XprofileFilename name    The XprofileFilename option sets name of file for profiling data  If profiling  is enabled output is written to this file  If a profile filename is not specified then  the profile data is written a the file with the name of the destination  see option  destination  with the extension   prof added     14 3 5 Native code    Native code is code written in a different programming language than Java  typ   ically C or C     This code can be called from within Java code using the Java  Native Interface  JNI   Jamaica internally uses a more efficient interface  the Ja   maica Binary Interface  JBI   for native calls into the VM and for compiled code     Option  XenableDynamicJNILibraries          The XenableDynamicJNILibraries option activates support for loading  JNI libraries at runtime  This feature is currently implemented for the architec        14 3  BUILDER EXTENDED USAGE 177    tures x86 and ARM  ABI calling convention without FPU support  On other sys   tems JNI libraries must be linked at build time     Option  XloadJNIDynamic    class method   class
155. is performed on an allocation never exceeds the amount allowed  to ensure timely execution of the application s realtime code    Using analyze can cause a significant slowdown of the application  The ap   plication slows down as the tolerance is reduced  1      the lower the value specified  as an argument to analyze  the slower the application will run    In order to configure the application heap  a version of the application must  be built using the option analyze and  in addition  the exact list of arguments  used for the final version  The heap size determined in a test run can then be  used to build a final version using the preferred heap size with desired garbage  collection overhead  To reiterate  the argument list provided to the Builder for this  final version must be the same as the argument list for the version used to analyze  the memory requirements  Only the heapSize option of the final version must  be set accordingly and the final version must be built without setting analyze     Option  analyseFromEnv   analyzeFromEnv  var    The analyseFromEnv option enables the application to read the amount of  analyze accuracy of the garbage collector from the environment variable specified  within  If this variable is not set  the value specified using  analyze n will be  used  Setting the environment variable to    0    will disable the analysis and cause  the garbage collector to use dynamic garbage collection mode     Option  constGCwork n    The constGCwork option 
156. is required per unit of allocation increases as the size of reserved memory is  increased  For a detailed output of the effect of using reserved memory  run the  application with option  analyse set together with the desired value of reserved  memory     Option  reservedMemoryFromEnv var    The reservedMemoryFromEnv option enables the application to read the per   centage of reserved memory from the environment variable specified within  If  this variable is not set  the value specified using  reservedMemory n will be  used See option reservedMemory for more information on the effect of this  option        166 CHAPTER 14  THE JAMAICA BUILDER    14 2 7 RTSJ settings    The following options set values that are relevant for the Real Time Specifica   tion for Java extensions through classes javax realtime   that are provided by Ja   maicaVM     Option  strictRTSJ    The Real Time Specification for Java  RTSJ  defines a number of classes in the  package javax realtime  These classes can be used to create realtime threads  with stricter semantics than normal Java threads  In particular  these threads  can run in their own memory areas  scoped memory  that are not part of the  Java heap  such that memory allocation is independent of garbage collector in   tervention  It is even possible to create threads of class javax realtime   NoHeapRealtimeThread that may not access any objects stored on the Java  heap    In Jamaica VM  normal Java Threads do not suffer from these restrictions 
157. itions of new  features  or applet execution     2 7 Supported Platforms  During development special care has been taken to reduce porting effort of the    JamaicaVM to a minimum  JamaicaVM is implemented in C using the GNU C  compiler  Threads are based on native threads of the operating system       2 7  Development platforms    Jamaica is available for the following development platforms  host systems          POSIX threads under many Unix systems     20 CHAPTER 2  KEY FEATURES OF JAMAICAVM    e Linux  e SunOS Solaris    e Windows    2 7 2 Target platforms    With JamaicaVM  application programs for a large number of platforms  target  systems  can be built  The operating systems listed in this section are supported  as target systems only  You may choose any other supported platform as a devel   opment environment on which the Jamaica Builder runs to generate code for the  target system   Realtime Operating Systems   e INTEGRITY   e Linux RT   e OS 9  on request    e PikeOS   e QNX    RTEMS  on request   e ThreadX  on request   e WinCE   e VxWorks    Non Realtime Operating Systems    Applications built with Jamaica on non realtime operating systems may be inter   rupted non deterministically by other threads of the operating systems  However   Jamaica applications are still deterministic and there are still no unexpected in   terrupts within Jamaica application themselves  unlike with standard Java Virtual  Machines     e Linux  e SunOS Solaris    e Windows    2 8  FAST E
158. ive Interface with Jamaica  This example simply writes a  value to a hardware register using a native method  We use the file JNITest   java  which contains the following code        public class JNITest    static native int write HW Register int address        191    192 CHAPTER 16  JAMAICA AND THE JAVA NATIVE INTERFACE  JNI     int value      public static void main String args       int value        value   write HW Register 0xfc000008 0x10060    System out println  Result    value              Jamaica provides a tool  jamaicah  for generating C header files that con   tain the function prototypes for all native methods in a given class  Note that  jamaicah operates on Java class files  so the class files have to be created first  using jamaicac as described in     12  The header file for JNITest  java is       created by the following sequence of commands      gt  jamaicac JNITest java   gt  jamaicah JNITest       Reading configuration from     usr local jamaica etc jamaicah conf            JNITest h  header     This created the include file JNITest h                 DO NOT EDIT THIS FILE   it is machine generated      finclude  lt jni h gt      Header for class JNITest x            ifndef Included JNITest   define Included JNITest   ifdef _ cplusplus   extern  C             fendif     Class  JNITest     Method  write HW Register       Signature   II I x    ifdef _ cplusplus  extern  C   fendif       JNIEXPORT jint JNICALL Java JNITest write        lRegister JNI     ifdef
159. ize may be succeeded by the letter    K    or    M     to specify a size in  KBytes  1024 bytes  or MBytes  1048576 bytes    The minimum required heap  size for a given application can be determined using option analyze     Option  maxHeapSize 7              The maxHeapSize option sets      maximum heap size to the specified size  given in bytes  If themaximum heap size is larger than the heap size  the heap  size will be increased dynamically on demand    The maximum heap size may be succeeded by the letter  K  or  M  to specify  a size in KBytes  1024 bytes  or MBytes  1048576 bytes   The minimum value is  0  for no dynamic heap size increase      Option  heapSizeIncrement r                The heapSizeIncrement option specifies the steps by which the heap size  can be increased when the maximum heap size is larger than the heap size    The maximum heap size may be succeeded by the letter  K  or  M  to specify  a size in KBytes  1024 bytes  or MBytes  1048576 bytes   The minimum value is  64k     Option  javaStackSize n K M     The javaStackSize option sets the stack size to be used for the Java runtime  stacks of all Java threads in the built application  Each Java thread has its own  stack which is allocated from the global Java heap  The stack size consequently  has an important impact on the heap memory required by an application  A small  stack size is recommended for systems with tight memory constraints  If the stack  size is too small for the application to run  a st
160. l heap demand of the application is of  no importance for the remaining system  Setting initial heap size and maximum  heap size to the same value has two main consequences  First  as has been seen  in 8 8 1 1 above  setting the initial heap size to a higher value avoids the overhead  of dynamically expanding the heap and reduces the amount of garbage collection  work during startup  Second  JamaicaVM s memory management code contains  some optimizations that are only applicable to a non increasing heap memory  space  so overall memory management overhead will be reduced if the same value  is chosen for the initial and the maximum heap size     8 1 3 Finalizer thread priority    Before the memory used by an object that has a finalize method can be re   claimed  this finalize method needs to be executed  A dedicated thread  the  FinalizerThread executes these finalize methods and otherwise sleeps  waiting for the garbage collector to find objects to be finalized    In order to prevent the system from running out of memory  the Finalizer   Thread must receive sufficient CPU time  Its default priority is therefore set to  10  the highest priority a Java thread may have  Consequently  any thread with a  lower priority will be preempted whenever an object is found to require finaliza   tion    Selecting a lower finalizer thread priority may cause the finalizer thread to  starve if a higher priority thread does not yield the CPU for a longer period of  time  However  if it can be g
161. lder argument Xinclude            How can I set properties  using  Dname value  for an application that was    built using the builder        A  For commands like jamaicavm  parsing of arguments like  Dname value    stops at the name of the main class of the application  After the application  has been built  the main class is an implicit argument  so there is no direct    210    APPENDIX     FAQ     FREQUENTLY ASKED QUESTIONS    way to provide additional options to the VM  However  there is a way out  of this problem  the Builder option  XnoMain removes the implicit argu   ment for the main class  so jamaicavm   s normal argument parsing is used  to find the main class  When launching this application  the name of the  main class must then be specified as an argument  so it is possible to add  additional VM options such as  Dname value before this argument            When I run the Builder an error    exec fail    is reported when the interme     diate C code should be compiled  The exit code is 69  What happened     A  An external C compiler is called to compile the intermediate C code  The    compiler command and arguments are defined in etc jamaica conf   If the compiler command can not be executed the Builder terminates with  an error message and the exitcode 69  see list of exit codes in the appendix    Try to use the verbose output with the option  verbose and check if the  printed compiler command call can be executed in your command shell  If  not check the parameter
162. le is used to guide the compiler  by default 10  of the methods  executed during the profile run are compiled  This results in a moderate code  size increase compared with fully interpreted code and typically results in a run   time performance very close to fully compiled code  Using the builder option  percentageCompiled  this default setting can be adjusted to any value be   tween 0  and 100   Note that setting the value to 100  is not the same as    64 CHAPTER 7  REDUCING FOOTPRINT AND MEMORY USAGE    setting the option compile  see     7 1 2   since the percentage value only refers  to those methods executed during the profiling run  Methods not executed during  the profiling run will not be compiled when useProfile is used    Entries in the profile can be edited manually  for example to enforce compila   tion of a method that is performance critical  For example  the profile generated  for this example contains the following entry for the method size    of class  java util Vector        PROFILE  64  0    oo      java util Vector size  I    To enforce compilation of this method even when percentageCompiled is  not set to 100   the profiling data can be changed to a higher value  e g      PROFILE  1000000  0   java util Vector size  I       Selecting C compiler optimization level    Enabling C compiler optimizations for code size or execution speed can have an  important effect on the the size and speed of the application  These optimiza   tions are enabled via setting th
163. leaving of the  monitor at all since the code sequence is guaranteed to be executed atomically due  to the fact that it does not contain a synchronization point     11 6 Libraries    The use of a standard Java libraries within realtime code poses severe difficulties   since standard libraries typically are not developed with the strict requirements  on execution time predictability that come with the use in realtime code  For  use within realtime applications  any libraries that are not specifically written and  documented for realtime system use cannot be used without inspection of the  library code    The availability of source code for standard libraries is an important prerequi   site for their use in realtime system development  Within the JamaicaVM  large  parts of the standard Java APIs are taken from OpenJDK  which is an open source  project  The source code is freely available  so that the applicability of certain  methods within realtime code can be checked easily     11 7 Summary    As one might expect  programming realtime systems in Java is more complicated  than standard Java programming  A realtime Java developer must take care with  many Java constructs  With timely Java development using JamaicaVM  there are  instances where a developer has more than one possible implementation construct  to choose from  Here  the most important of these points are recapitulated     124 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES    11 7 1 Efficiency    All method calls and i
164. lication domains are layered on top of these configurations  e g  Mobile  Information Device Profile  MIDP  on CLDC  and Personal Profile on CDC    The Jamaica VM supports both base configurations  Smaller Java configura   tions are interesting not only on systems with hardware limitations  but also for  certification  The vast number of classes in J2SE would make any JVM certifica   tion daunting  Again  the choice between J2SE and J2ME is a trade off between  flexibility on the one hand and leanness and robustness on the other  A safety   critical version of JamaicaVM may well support a safety critical profile for CDC  in the future     11 4 Memory Management    In a system that supports realtime garbage collection  RTSJ s strict separation  into realtime and non realtime threads is not necessary  The strict splitting of an  application is consequently not required  Threads are activated only depending on  their priorities  as depicted in Fig    The realtime garbage collector performs its work predictably within the appli   cation threads  It is activated when memory is allocated  The work done on an  allocation must be preemptible  so that more urgent threads can become active    The implementation of a realtime garbage collector must solve a number of  technical challenges  Garbage collector activity must be performed in very small  single increments of work  In the JamaicaVM  one increment consists of process   ing and possibly reclaiming only 32 bytes of memory  On ever
165. lows     104 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES    ArrayList lt String gt  list   new ArrayList lt String gt       list add 0   some string      String str   list get  0     Generics still require type casts  but these casts are hidden from the developer   This means that access to list using list get  0  in this example in fact  performs the type cast to String implicitly causing additional runtime over   head  However  since type casts are performed efficiently and in constant time in  JamaicaVM  the use of generics can be recommended even in time critical code  wherever this appears reasonable for a good system design     11 2 3 Non Obvious Slightly Inefficient Constructs    A few constructs have some hidden inefficiencies  but can still be executed within  a short sequence of machine instructions     final Local Variables    The use of final local variables is very tempting in conjunction with anonymous  inner classes since only variables that are declared final can be accessed from  code in an anonymous inner class  An example for such an access is shown in the  following code snippet     final int data   getData       new RealtimeThread new PriorityParameters  pri        public void run       for                x   data          All uses of the local variable within the inner class are replaced by accesses to a  hidden field  In contrast to normal local variables  each access requires a memory  access     Accessing private Fields from Inner Classes    As with t
166. ludeFilename file    Specify the name of the include file to be included in stubs     Option  version    Prints the version of the jamaicah tool and exits     Option  showSettings    Options of jamaicah currently in use are written to standard output in property  file format  To make these the default settings  write the output into jamaica   home etc jamaicah conf     196 CHAPTER 16  JAMAICA AND THE JAVA NATIVE INTERFACE  JNI     Option  saveSettings file   Options of jamaicah currently in use are written to the specified file in property  file format    Option  configuration file    The set of options used to build the application are read from the provided file   The format used to define options must be identical to the default configuration  file jamaica home etc jamaicah conf  With this option given  the other  default configuration files  i e  user home    jamaica jamaicah conf and  jamaica home   et c   jamaicah conf  are ignored     16 2 2 Classes  files  and paths  Option  classpath   cp      classpath    Specifies default path used for loading classes     Option  bootclasspath   Xbootclasspath      classpath    Specifies default path used for loading system classes     Option  classname     class  class      Generate header files for the listed classes  Multiple items must be separated by  spaces and enclosed in double quotes     16 2 3 Environment Variables    The following environment variables control jamaicah     JAMAICA JAMAICAH HEAPSIZE Heap size of the jamai
167. maicavmdi                13 5 Environment Variables                           13 6  Exitcod  s     oho oec i we         RC Re ee Re        0    14 The Jamaica Builder    14 1 How the Builder tool                                  14 2 Builder Usage    4 2x 2 2 ee ee de Rom RO ed ew UR ed os eS  14 2 1 Generi        x03 BORG a      SG ee HEY    GOES ES RE HRSG EHH aS HRS  14 2 3 5                                         tb he Dike ees ee See Deus  doth Me had Meee he Oe Oe a he Se  LA X xA G                 SRE              142 7 RVSWseunes  s 2 ee ede er dee ed wee            4 2 5 ProBhngl vos ace aes om eee Dew EORR Ems    14 2 9                                                TUM ME  14 3 1  General s 2 se        See SERA      EER Ewe  pee So ee her a          a es St me         14 3 3 Compilation                            14 3 4 Profiling                                14 3 5                                              14 3 6 Miscellaneous                           14 4 Environment Variables                           14 5 Bxitcodes    o 2h Sn we ee eS eR eee ESR EER              130  130  131  131  131    133  133  134  134  136  136  137  138  138  138  138  141    15 The Jamaica ThreadMonitor    15 1 Run time system configuration               15 2 Control Window                               rp cx  Ln  TIME  da oe ee  oe     15 3 4 Data Window Tool Tips                15 3 5 Worst Case Execution Time Window    16 Jamaica and the Java Native Interface  JNI     16 1 Usin
168. mand line options and environment variables are possible  the  command line settings have precedence  To inspect the relevant command line  options  issue     gt  jamaicavm  Xhelp    Option  xhelp   X     The xhelp option prints a short help summary on the extended options of Ja   maicaVM     13 1 2 JamaicaVM Extended Options    JamaicaVM supports a number of extended options  Some of them are supported  for compatibility with other virtual machines  while some provide functionality  that is only available in Jamaica   Please note that the extended options may  change without notice  Use them with care     13 1  JAMAICAVM 135    Option  Xbootclasspath path    The Xbootclasspath option sets bootstrap search paths for class files  The  argument must be a list of directories or JAR ZIP files separated by the platform  dependent path separator char      on Unix Systems  5  on Windows   Note that  the jamaicavm command has all boot and standard API classes built in  The  boot classpath has the built in classes as an implicit first entry in the path list   so it is not possible to replace the built in boot classes by other classes which  are not built in  However  the boot class path may still be set to add additional  boot classes  For commands jamaicavm slim  jamaicavmp  etc  that do  not have any built in classes  setting the boot classpath will force loading of the  system classes from the directories provided in this path  However  extreme care is  required  The virtual machin
169. me garbage col   lection technology  Realtime garbage collection obviates the need to make a strict  separation of realtime and non realtime code  Combined with static memory deal   location that automatically replaces some dynamic memory allocations  dynamic  allocations in realtime code may even be eliminated completely  Using RTSJ  with realtime garbage collection provides necessary realtime facilities without the  cumbersomeness of having to segregate a realtime application     11 3 2 Java Native Interface    Both the need to use legacy code and the desire to access exotic hardware may  make it advantageous to call foreign code out of a JVM  The Java Native Inter   face  JNI  provides this access  JNI can be used to embed code written in other  languages than Java   usually C   into Java programs    While calling foreign code through JNI is flexible  the resulting code has sev   eral disadvantages  It is usually harder to port to other operating systems or hard   ware architectures than Java code  Another drawback is that JNI is not very high   performing on any Java Virtual Machine  The main reason for the inefficiency is  that the JNI specification is independent of the Java Virtual Machine  Significant  additional bookkeeping is required to insure that Java references that are handed  over to the native code will remain protected from being recycled by the garbage  collector while they are in use by the native code  The result is that calling JNI  methods is usually ex
170. me systems  this thread can be used to enforce round robin scheduling  of threads of equal priorities     On systems with tight memory demand  the thread required for time slicing  can be deactivated by setting the size of the time slice to zero using the  option  timeSlice O0ns     In an application that uses threads of equal priorities  explicit calls to the  method Thread yield   are required to permit thread switches to an   other thread of the same priority if the time slicing thread is disabled     72    CHAPTER 7  REDUCING FOOTPRINT AND MEMORY USAGE    Note that the number of threads set by option  numThreads does not in   clude the time slicing thread  Unlike when disabling the finalizer thread   which is a Java thread  when the time slicing thread is disabled  the argu   ment to  numThreads should not be changed       Disabling memory reservation thread    The memory reservation thread is a low priority thread that continously  tries to reserve memory up to a specified threshold  This reserved memory  is used by all other threads  As long as reserved memory is available no  GC work needs to be done  This is especially efficient for applications that  have long pause times with little or no activity that are preempted by sudden  activities that require a burst of memory allocation     On systems with tight memory demand  the thread required for memory  reservation can be deactivated by setting  reservedMemory 0          Disabling signal handlers    The default handler
171. mmand  line are read from configuration files in the following manner     e The default target is read from jamaica home   et c   jamaica conf  This  file should not contain any other information     e If the builder option  configuration is used  the remaining options are  read from the file specified with this options     e Otherwise  if the file user home    jamaica jamaica conf exists  and  is non empty   the remaining options are read from there     e Otherwise jamaica home   target  platform  etc  jamaica conf the  target specific configuration file  is used     The full command line syntax for the Builder tool is as follows                    jamaicabuilder help    help   h        Xhelp    Xhelp     version    verbose  lt n gt     showSettings    saveSettings   file     configuration  lt file gt     classpath   cp       lt classpath gt     enableassertions   ea     main  lt class gt     jar   file      includeClasses      lt class gt   lt package gt            lt class gt   lt package gt      14 2  BUILDER USAGE          xcludeClas   lt class gt   lt pack   excludeFrom    ses   age             Compile        includeJAR        2    fil    e                   xcludeJAR     lazyFromEnv             lt fil    lt var gt        e gt     lazy              tmpdir   nam   setFonts     setGraphics   setLocales       2     resourc            lt name gt        lt font gt   lt font gt         lt system gt            lt locale gt   lt      ocale gt                setTimeZon    mezon 
172. module using MULTI  See the MULTI and INTEGRITY documen   tation on how to connect to your target and load modules     B 3 2 Linker Directives File    The files INTEGRITY BSP default ld and INTEGRITY INTEGRITY   1d are the default linker directives files used when building an INTEGRITY ap   plication  Alternate linker directives files can be specified by the user by adding  the option   T file to the XLDFLAGS integrity    in the Jamaica configura   tion file  For example  some INTEGRITY installations include the file flash ld   an alternate to default ld that is appropriate for a flash build  The default linker  directives files have comments which describe the various sections in the map                                         Custom Linker Directives File    It may be necessary for the user to create a new linker directives file  For example   the size of the run time heap for the AddressSpace may need to be increased    B 4  WINDOWS 223    or decreased  Create a new linker directives file by first copying the default ld   for KernelSpace  or INTEGRITY ld  for virtual AddressSpaces  to a new file   e g   myapplication ld  Starting with the default file as a template ensures that  necessary sections will not be left out in the new file by mistake  For example  a   heap section is needed in order for the KernelSpace to support C C   dynamic  memory allocation  e g   malloc and new   If the default  heap is too small  it can  be made larger in myapplication ld  The KernelSpace
173. monitoring accuracy  num   This integer property specifies the resolution of the cost monitoring that is  used for RTSJ s cost overrun handlers  The accuracy is given in nanosec   onds  the default value is 5000000  i e   an accuracy of 5ms  The accuracy  specifies the maximum value the actual cost may exceed the given cost bud   get before a cost overrun handler is fired  A high accuracy  a lower value   causes a higher runtime overhead since more frequent cost budget checking  is required  See also 8 10 5  Limitations of the RTSJ implementation     jamaica cpu mhz   num  This integer option specifies the CPU speed of the system JamaicaVM ex   ecutes on  This number is used on systems that have a CPU cycle counter  to measure execution time for the RTSJ   s cost monitoring functions  If the    221    228    APPENDIX C  PROPERTIES THAT CONTROL THE VM    CPU speed is not set and it could not be determined from the system  e g    on Linux via reading file  proc cpuinfo   the CPU speed will be mea   sured on VM startup and a warning will be printed  An example setting for  a system running at 1 8GHz would be  Djamaica cpu mhz 1800 90        jamaica err to file    If a file name is given  all output sent to System err will be redirected to this  file     jamaica err to null    If set to true  all output sent to System err will be ignored  This is useful for  graphical applications if textual output is very slow  The default value for  this property is false     jamaica fontsprope
174. n  Xcc cc    The Xcc option specifies the C compiler to be used to compile intermediate C  code that is generated by the Jamaica Builder     Option    XCFLAGS      cflags    The XCFLAGS option specifies the cflags for the invocation of the C compiler   Note that for optimisations the compiler independent option  optimise should  be used     174 CHAPTER 14  THE JAMAICA BUILDER    Option     X1d linker   The X1d option specifies the linker to be used to create a binary file from the  object file generated by the C compiler    Option     XLDFLAGS      ldflags    The XLDFLAGS option specifies the Idflags for the invocation of the C linker        Option  dwarf2    The dwarf2 option generates a DWARF2 version of the application  DWARF2  symbols are needed for tracing Java methods in compiled code  Use this option  with WCETA tools and binary debuggers     Option  XstripOptions options    The XstripOptions option specifies the strip options for the invocation of the  stripper  See also option Xst rip     Option  Xlibraries      library  library      The X1ibraries option specifies the libraries that must be linked to the desti   nation binary  The libraries must include the option that is passed to the linker   Multiple libraries should be separated using spaces and enclosed in quotation  marks  E g    Xlibraries  m pthread  causes linking against 1ibm and  libpthread     Option  XstaticLibraries     library  library     The XstaticLibraries option specifies the libraries that must 
175. n is built  smart linking is used to reduce the set of standard  classes that become part of the application  However  due to the large set of library  classes that are available  this still results in a fairly large application  In this  example compilation is turned off            gt  jamaicabuilder  cp classes CaffeineMarkEmbeddedApp  interpret     gt   destination caffeine interpret   Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf       Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1    User  EVALUATION USER  Expires  2010 06 10    Generating code for target    linux x86     optimisation    speed                  caffeine_interpret__ c    caffeine_interpret__ h   Class file compaction gain  58 882584   21665933    gt  8908472     C compiling    caffeine_interpret__ c       59    60 CHAPTER 7  REDUCING FOOTPRINT AND MEMORY USAGE         caffeine_interpret__nc o    linking  x stripping  Application memory demand will be as follows     initial max  Thread C stacks  1024KB    8  128KB  63MB    511  128KB   Thread Java stacks  128KB    8  16KB  8176KB    511  16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  3328KB 343MB    The size of the created binary may be inspected  for example  with a shell com   mand to list directories  We use 1s  which is available on Unix systems  On  Windows  use dir instead      gt  ls  s caffeine interpret  12558788 caffeine interpret
176. n no default handler for POSIX signal  SIGQUIT  Ct r1       will be created  The default handler that is used when  this property is not set prints the current thread states via a call to com   aicas jamaica lang Debug dump ThreadStates          C 1  PROPERTIES SET BY THE USER 229    jamaica no sig term handler  If this boolean property is set  then no default handler for POSIX signal  SIGTERM  default signal sent by     11  will be created  The default han   dler that is used when this property is not set prints           terminate     to System err and calls System exit  130         jamaica out to file  If a file name is given  all output sent to System out will be redirected to this  file     jamaica out to null  If set to true  all output sent to System out will be ignored  This is useful  for graphical applications if textual output is very slow  The default value  for this property is false     jamaica profile groups   groups  To analyze the application  additional information can be written to the pro   file file  This can be done by specifing one or more  comma separated   groups with that property  The follwing groups are currently supported   builder  default   memory  speed  all  See 8 6 for more details     jamaica profile request port             When using the profiling version of JamaicaVM  jamaicavmp or an ap   plication built with      profile true    then this property may be set  to an integer value larger than 0 to permit an external request to dump the  p
177. n of additional resources in the created application   A resource is additional data  such as image files  sound files etc   that can be  accessed by the Java application  Within the Java application  the resource data  can be accessed using the resource name specified as an argument to resource     152 CHAPTER 14  THE JAMAICA BUILDER    To load the resource  a call to Class getResourceAsStream  name  can  be used    If a resource is supposed to be in a certain package  the resource name must  include the package name  Any         must be replaced by          E g   the resource ABC  from package foo bar can be added using   resource foo bar ABC    The Builder uses the class path provided through the option classpath  to search for resources  Any path containing resources that are provided using  resource must therefore be added to the path provided to classpath    This option expects a list of resource files that are separated using the platform  dependent path separator character  e g            Option  setFonts     font  font      The setFonts option can be used to choose the set of TrueType fonts to be  included in the target application  The font families sans  serif  mono are  supported  If no fonts are required  it can be set to none  To use TrueType fonts   a graphics system must be set     Option  setGraphics system    The setGraphics option can be used to set the graphics system used by the  target application  If no graphics is required  it can be set to none   To g
178. n of code and hence might increase the binary size of the appli   cation  In systems with tight memory resources  inlining may therefore not be  acceptable   Eleven levels of inlining are supported by the Jamaica compiler ranging from  0  no inlining  to 10  aggressive inlining      Option  optimise   optimize   type    The optimise option enables to specify optimisations for the compilation of  intermediate C code to native code in a platform independent manner  where type  is one of none  size  speed  and all  The optimisation flags are only given  to the C compiler if the application is compiled without the debug option        Option  target platform    The target option specifies a target platform  For a list of all available platforms  of your Jamaica VM Distribution  use XavailableTargets     14 2 5 Memory and threads    Configuring heap memory and threads has an important impact not only on the  amount of memory required by the application but on the runtime performance  and the realtime characteristics of the code as well  The Jamaica Builder therefore  provides a number of options to configure memory and application threads     14 2  BUILDER USAGE 157    Option  heapSize n             The heapSize option sets the heap size to the specified size given in bytes   The heap is allocated at startup of the application  It is used for static global  information  such as the internal state of the Jamaica Virtual Machine  and for the  garbage collected Java heap    The heap s
179. n to other debug output   Printing of these calls requires a minimum debug level of 5  If the variable  is not set or set to          any native call will be printed     JAMAICA DEBUGCALLJAVA Defines a string that gives the name of a Java  class or method  Any call to the specified method or to a method defined in  the specified class will be printed in addition to the other debug output     Printing of these calls requires a minimum debug level of 5  If the vari   able is not set or set to      any call is printed  E g   setting JAMAICA    DEBUGCALLJAVA to java lang String length will print any call  to the method java lang String length             239    240 APPENDIX F  INTERNAL ENVIRONMENT VARIABLES    Bibliography     1  Greg Bollella  James Gosling  Benjamin Brosgol  Peter Dibble  Steve Furr   and Mark Turnbull  The Real Time Specification for Java  Addison Wesley   2000      2  Peter C  Dibble  Real Time Java Platform Programming  Prentice Hall  2002      3  James Gosling  Bill Joy  Guy Steele  and Gilad Bracha  The Java Language  Specification  Addison Wesley  Boston  Mass   third edition  2005      4  Mike Jones  What really happened on Mars  URL   microsoft com  mbj Mars  Pathfinder   1997      5  Sheng Liang  Java Native Interface  Programmer   s Guide and Specification   Addison Wesley  1999      6  Tim Lindholm and Frank Yellin  The Java Virtual Machine Specification   Addison Wesley  second edition  1999      7  C  L  Liu and J  W  Wayland  Scheduling algorithms
180. name    XprofileFilenameFromEnv    Xss  135    XstaticLibraries   174     Xstrip    XstripOptions   174     INDEX    
181. nchroniza   tion thread will use priority 104  There will be 40 priority levels available for  RealtimeThread threads    Note  If no round robin scheduling is needed for threads of equal priority and  the timeslice is set to zero   t imeSlice 0   the synchronization thread is not  required and an additional priority is available for the real time threds              Option  priMapFromEnv var    The priMapFromEnv option creates an application that reads the priority map   ping of Java threads to native threads from the environment variable var  If this  variable is not set  the mapping specified using  priMap jp sp  jp sp  will  be used     14 2 6 GC configuration    The following options provide ways to analyze the application s memory demand  and to use this information to configure the garbage collector for the desired real   time behavior     14 2  BUILDER USAGE 163    Option  analyse   analyze  tolerance    The analyse option enables memory analyze mode with tolerance given in per   cent  In memory analyze mode  the memory required by the application during  execution is determined  The result is an upper bound for the actual memory re   quired during a test run of the application  This bound is at most the specified  tolerance larger than the actual amount of memory used during runtime    The result of a test run of an application built using analyze can then be used  to estimate and configure the heap size of an application such that the garbage col   lection work that 
182. nfiguration from    usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1   User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed               Vfed7ce88el8ealli4  c   eed    JNITest__ c    JNITest__ h  Class file compaction gain  58 963017   21653991    gt  8886145     C compiling    JNITest__ c       194 CHAPTER 16  JAMAICA AND THE JAVA NATIVE INTERFACE  JNI             mcpu   is deprecated  Use     mtune     or     march     instead     JNITest  nc o    linking      stripping  Application memory demand will be as follows     initial max  Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread Java stacks  128KB    8  16KB  8176KB    511   16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  3328KB 343MB    The created application can be executed just like any other executable      gt    JNITest  Result  65632  Now we could write the value 65632 into memory address fc000008    16 2 The Jamaicah Command    To control the jamaicah tool  a variety of arguments can be provided  The argu   ments can be provided directly to jamaicah  or using the property file jamaicah   conf    The syntax is as follows        jamaicah help    help  h        Xhelp    jni    de  directory      o  lt file gt     includeFilename  lt file gt     version    showSettings    saveSettings  lt file gt     configura
183. nfiguration will be displayed in a new page in the editor  A configuration can be  removed on the Overview page by clicking remove after the configuration   s  name        Multiple distributions    The plug in uses task definitions  taskdefs in Ant   s terminology  to link the con   figurations in a buildfile to a Jamaica distribution  Each Jamaica buildfile needs  at least one of these taskdefs  however you can setup more to be used within the  buildfile    The section Configured Jamaica tasks shows the known task defini   tions and lets you add new or remove existing ones     5 4  BUILDING APPLICATIONS WITH JAMAICA BUILDER 43    Task definitions can be unbound  meaning that the definition references a Ja   maica distribution that is currently not available or not yet known to the plug in   In such a case  you can create a new taskdef with the same name as the unbound  one     Ant properties    Ant properties provide a text replacement mechanism within Ant buildfiles  The  editor supports Ant propertied   in option values  This is especially useful in con   junction with multiple configurations in one buildfile  when you create Ant prop   erties for option values that are common to all configurations     Launch built application    The editor provides a simple way to launch the built application when it has been  built for the host target platform  If the wizard did not already generate a tar   get named with a  run  prefix  click Create new launch application  target to add
184. nse keys in  the folder   jamaica inside the user s home directory  The user s home directory  is referred to as user home  On Unix systems this is usually  home user  on  Windows systems  the user s home directory usually resides inside the Documents  and Settings folder     for example  C  NDocuments and Settings user           34    CHAPTER 3  GETTING STARTED    Chapter 4    Tools Overview    The JamaicaVM tool chain provides all the tools required to process Java source  code into an executable format on the target system  Fig  4 1 provides an overview  over this tool chain     4 1 Jamaica Java Compiler    JamaicaVM uses Java source code files  see the Java Language Specification  3    as input to first create platform independent Java class files  see the Java Vir   tual Machine Specification  6   in the same way classical Java implementations  do  JamaicaVM provides its own Java bytecode compiler  jamaicac  to do this  translation  For a more detailed description of jamaicac see 8 12    We recommend using jamaicac  However  it is also possible to use your  favorite Java source to bytecode compiler  including JDK s javac command   as long as you ensure that the bootclasspath is set properly to the Jamaica boot  classes  These are located in the following JAR file     jamaica home   target  platform 1ib rt jar    In addition  please note that JamaicaVM 6 0 uses Java 6 compatible class files and  requires a Java compiler capable of interpreting Java 6 compatible class file
185. nt variables are set  correctly  should be done during QNX installation      e ONX HOST  e g   C  Programs QNX632 host win32 x86   e ONX TARGET  e g   C  Programs QNX632 target qnx6     For QNX 6 4  and higher  the linker must be in the system path  On Linux  you  can set this with the PATH environment variable     export PATH SPATH  opt QNX640 host linux x86 usr bin    B 8 RedHawk Linux    B 8  Running an application    To use the realtime capabilities of Jamaica under RedHawk Linux  the CPU and  the thread scheduling must be configured before running an application built with  Jamaica  Example configuration  system with 4 CPUs      shield  p 2  i 2  1 2          d 3          Enable FIFO scheduling in Jamaica        export JAMAICA SCHEDULING FIFO                   The application is then started with     run  b 2 Application       226 APPENDIX B  INFORMATION FOR SPECIFIC TARGETS    Appendix C    Properties that Control the VM    This appendix lists the predefined properties in Jamaica  These properties con   trol the Jamaica VM commands as well as applications created with the Jamaica  Builder     C 1 Properties Set by the User    The standard libraries that are delivered with JamaicaVM can be configured by  setting specific Java properties  A property is a string value that has an assigned  value  The property is passed to the Java code via the JamaicaVM option          Dname value    or  when using the Builder  via option       XdefinePropert y  name value    jamaica cost 
186. nterface calls are performed in constant time  They are  almost as efficient as C function calls  so do not avoid them except in places  where one would avoid a C function call as well    When accessing final local variables or private fields from within inner  classes in a loop  one should generally cache the result in a local variable for  performance reasons  The access is in constant time  but slower than normal local  variables    Using the String operator   causes memory allocation with an execution time  that is linear with regard to the size of the resulting String  Using array initializa   tion causes dynamic allocations as well    For realtime critical applications  avoid static initializers or explicitly call the  static initializer at startup  When using a java compiler earlier than version 1 5  the  use of classname   class causes dynamic class loading  In realtime applications   this should be avoided or called only during application startup  Subsequent usage  of the same class will then be cached by the JVM     11 7 2 Memory Allocation       The RTSJ introduces new memory areas such as ImmortalMemoryArea and  ScopedMemory  which are inconvenient for the programmer  and at the same  time make it possible to write realtime applications that can be executed even on  virtual machines without realtime garbage collection    In JamaicaVM  it is safe  reliable  and convenient to just ignore those restric   tions and rely on the realtime garbage collection instead  Be 
187. nv  lt var gt              constGCwor    analyseFrom    Env  lt var gt       Env  k  lt n gt           stopTheWorldGC        reservedMemory  lt percentage gt       strictRTSJ        oryFromEnv   var           StrictRTSJEF   immortalMem   immortalMem     scopedMemor     scopedMemor   physicalMem   profile      percentageC   useProfile     m  m                         rom     orySize  lt n gt     Env  lt var gt      K M          orySizeFrom  ySize  lt n gt   ySizeFromE  oryRanges    XprofileF  ompiled  lt n gt        lt file gt   lt                 lenameFrom    Env  lt var gt     M            file            lt range gt   lt range gt    Env  lt var gt       146 CHAPTER 14  THE JAMAICA BUILDER         object      lt file gt   lt file gt   classi       classn     The following special syntax is accepted     e To add values to an existing option in the configuration  e g    include   use the following syntax   include  myIncludePath  The value  from the configuration is prepended with the value provided on the com   mand line        e To read values for an option that accepts a list of values  e g    include   from a file instead from the command line or configuration file  use this syn   tax   include  file or  include   file  This reads the values  from file line by line  Empty lines and lines starting with the character        comment  are ignored     Options that permit lists of arguments can be set by either providing a single list   or by providing an instance of the option
188. o be de   bugged on an  embedded  device  localhost must be replaced by the network  address of the device        89    90 CHAPTER 9  DEBUGGING SUPPORT    9 2 Configuring the IDE to Connect to Jamaica    Before being able to debug a project  the code needs to compile and basically run   Before starting a debugging session  the debugger must be configured to connect  to the VM by specifying the VM   s host address and port  Normally  this is done  by setting up a debug configuration    In Eclipse 3 5  for example  select the menu item       Run  gt  Debug Configurations        In the list of available items presented on the left side of the dialog window  see  Fig   9 1   choose a new configuration for a remote Java application  then    e configure the debugger to connect to the VM by choosing connection type  socket attach and    e enter the VM   s network address and port as the connection properties host  and port        Clicking on Debug attaches the debugger to the VM and starts the debugging ses   sion  If the VM   s communication agent is set to suspending the VM before loading  the main class  the application will only run after instructed to do so through the  debugger via commands from the Run menu  In Eclipse  breakpoints may be set  conveniently by double clicking in the left margin of the source code    For instructions on debugging  the documentation of the used debugger should  be consulted     in Eclipse  for example  though the Help menu    The Jamaica Eclipse
189. o deny access to type X      129    130 CHAPTER 12  THE JAMAICA JAVA COMPILER    Option  bootclasspath path    This option is similar to the option classpath  but specifies locations for sys   tem classes     Option  sourcepath path    The sourcepath option specifies locations for application sources  The path is  a list of directories  For further details  see option classpath above     Option  extdirs dirs    The ext dirs option specifies location for extension zip jar files  where path is  a list of directories     Option  d directory    The d option sets the destination directory to write the generated class files to  If  omitted  no directory is created     12 1 2 Compliance options  Option  source version    Provide source compatibility for specified version  e g  1 6  or 6 or 6 0      Option  target version    Generated class files for a specific VM version  e g  1 6  or 6 or 6 0      12 1 3 Warning options  Option  deprecation    The deprecation option checks for deprecation outside deprecated code     Option  nowarn    The nowarn option disables all warnings     12 2  ENVIRONMENT VARIABLES 131    12 1 4 Debug options  Option  g    The g option without parameter activates all debug info     Option  g none    The g option with none disables debug info     Option  g   lines  vars  source     The g option is used to customize debug info     12 1 5 Other options   Option  encoding encoding   The encoding option specifies custom encoding for all sources  May be overrid   d
190. o obtain this monitor     Standard Data Structures    The strict separation of an application into a realtime and non realtime part that  is required when the Real Time Specification for Java is used in conjunction with  a non realtime garbage collector makes it very difficult to have global data struc   tures that are shared between several tasks  The Real Time Specification for Java  even provides special data structures such as WaitFreeWriteQueue that en   able communication between tasks  These queues do not need to synchronize and  hence avoid running the risk of introducing priority inversion  In a system that  uses realtime garbage collection  such specific structures are not required  High  priority tasks can share standard data structures such as java util Vector  with low priority threads        11 4 5 Memory Management Guidelines       The JamaicaVM provides four options for memory management  Immortal   Memory  ScopedMemory  static memory deallocation  and realtime dynamic  garbage collection on the normal heap  They may all be used freely  The choice  of which to use is determined by what the best trade off between external require   ments  compatibility  and efficiency for a given application   ImmortalMemory is in fact quite dangerous  Memory leaks can result from  improper use  Its use should be avoided unless compatibility with other RTSJ  JVMs is paramount or heap memory is not allowed by the certification regime  required for the project    ScopedMemory is 
191. oaderS 1 run      PROFILE CYCLES  255459907 com aicas jamaica lang SigIntH     PROFILE CYCLES  235701127 sun net www ParseUtil fileToEn     PROFILE CYCLES  233656888 java lang Class getDeclaredFie          The cumulative cycle count shows more clearly that the main method is running  most of the time during the profiling run  the next dominating methods are print  and println of class java io  PrintStreamP    The cumulative cycle counts can now be used as a basis for a top down opti   mization of the application execution time        Since main calls only println  one would expect the cumulative time spent in print 1n  to exceed the time spent in print  While this is actually the case for the calls from main  there  are however calls to print performed during startup of the virtual machine while executing the  static initializer of class java lang System  so that the total cumulative time in print is  higher than the time spent in printin    58    CHAPTER 6  PERFORMANCE OPTIMIZATION    Chapter 7    Reducing Footprint and Memory  Usage    In this section we give an example of how to achieve optimal runtime perfor   mance for your Java application while reducing the code size and RAM memory  demand to a minimum  As example application we use Pendragon Software   s em   bedded CaffeineMark  tm  3 0  The class files for this benchmark are part of the  JamaicaVM Tools installation  See 3 4     7 1 Code Size vs  Runtime Performance    7 1 4 Using Smart Linking    When an applicatio
192. od calls easy to implement effi   ciently  calling methods via an interface is more challenging  The multiple inher   itance implicit in Java interfaces means that a simple dispatch table as used by  normal methods can not be used  In the JamaicaVM the time needed to find the  called method is linear with the number of interfaces implemented by the class     Type Casts and Checks    The use of type casts and type checks is very frequent in Java  One example is the  following code sequence that uses an instanceof check and a type cast        Object o   vector elementAt  index       if  o instanceof Integer   sum   sum     Integer o  intValue       These type checks also occur implicitly whenever a reference is stored in an array  of references to make sure that the stored reference is compatible with the actual  type of the array  Type casts and type checks within the JamaicaVM are per   formed in constant time with a small and constant number of memory accesses   In particular  instanceof is more efficient than method invocation     Generics  JDK 1 5     The generic types  generics  introduced in JDK 1 5 avoid explicit type cases that  are required using abstract data types with older versions of Java  Using generics   the type cast in this code sequence    ArrayList list   new ArrayList      list add 0   some string     String str    String  list get 0      is no longer needed  The code can be written using a generic instance of Array   List that can only hold strings as fol
193. onal  target specific installation hints please check     B     3 1  Linux  Unpack and Install Files    The default is a system wide installation of Jamaica  Super user privileges are re   quired  If the rpm package manager is available  this is the recommended method      gt  rpm  i Jamaica release identification string   rpm    Otherwise  unpack the compressed tape archive file and run the installation script  as follows      gt  tar xfz Jamaica release identification string   tar   gz   gt    Jamaica install    This will install the Jamaica tools in the following directory  which is referred to  as jamaica home      usr local jamaica version build    In addition  the symbolic link  usr 10cal jamaica is created  which points  to jamaica home  and symbolic links to the Jamaica executables are created in   usr bin  so it is not necessary to extend the PATH environment variable    In order to deinstall the Jamaica tools  depending on the used installation  method  either use the erase option of rpm or the provided deinstallation script  Jamaica remove    If super user privileges are not available  the tools may alternatively be in   stalled locally in a user s home directory      gt  tar xfz Jamaica release identification string   tar   gz     tar xf Jamaica ss    This will install the Jamaica tools in usr  10cal Jamaica version  build rel   ative to the current working directory  Symbolic links to the executables are cre   ated in usr  bin  so they will not be on the default 
194. ons also cover other areas of  great importance to many embedded realtime applications  such as direct access  to physical memory  e g   memory mapped I O  or asynchronous mechanisms    Currently  RTSJ is available for the Jamaica VM and for TimeSys JTime  JVMs  from other vendors are likely to follow in the future     Thread Scheduling in the RTSJ    Ensuring that Java programs can execute in a timely fashion was a main goal  of the RTSJ  To enable the development of realtime software in an environment  with a garbage collector that stops the execution of application threads in an un   predictable way  see Fig   L 1 1   the new thread classes RealtimeThread and    110 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES       Thread time  GC   User 1   User 2 EH     m       Figure 11 1  Java Threads in a classic JVM are interrupted by the garbage collec   tor thread    Thread       time    rtl   rt2  GC  User 1  User 2          Figure 11 2  RealtimeThreads can interrupt garbage collector activity    NoHeapRealtimeThread were defined  These thread types are unaffected   or at least less severely affected  by garbage collection activity  Also  at least 28  new priority levels  logically higher than the priority of the garbage collector  are  available for these threads  as illustrated in Fig     Memory Management    For realtime threads not to be affected by garbage collector activity  these threads  need to use memory areas that are not under the control of the garbage collector   New
195. or the Real Time Specification for Java  Version 1 0 2  e Minimal footprint   e ROMable code   e Native code support   e Dynamic linking   e Supported platforms   e Fast execution    e Powerful tools for timing and performance analysis    2 4 Hard Realtime Execution Guarantees    JamaicaVM is the only implementation that provides hard realtime guarantees  for all features of the languages together with high performance runtime effi   ciency  This includes dynamic memory management  which is performed by the  JamaicaVM garbage collector     17    18 CHAPTER 2  KEY FEATURES OF JAMAICAVM    All threads executed by the JamaicaVM are realtime threads  so there is no  need to distinguish realtime from non realtime threads  Any higher priority thread  is guaranteed to be able to preempt lower priority threads within a fixed worst case  delay  There are no restrictions on the use of the Java language to program real   time code  Since the JamaicaVM executes all Java code with hard realtime guar   antees  even realtime tasks can use the full Java language  1 e   allocate objects   call library functions  etc  No special care is needed  Short worst case execution  delays can be given for any code     2 2 Real Time Specification for Java support    JamaicaVM provides an industrial strength implementation of the Real Time Spec   ification for Java Specification  RTSJ  V1 0 2  see  1   for a wide range of real   time operating systems available on the market  It combines the additional AP
196. path for executables     Configure Platform Specific Tools    In order for the Jamaica Builder to work  platform specific tools such as the C  compiler and linker and the locations of the libraries  SDK  need to be speci   fied  This is done by editing the appropriate configuration file  named jamaica   conf  for the target  and possibly also the host     The precise location of the configuration file depends on the platform     3 1  INSTALLATION OF JAMAICAVM 25    jamaica home   target  platform   etc   jamaica conf    For the full Jamaica directory structure  please refer to 85 3  Note that the config   uration for the host platform is also located in a target directory   The following properties need to be set appropriately in the configuration files                       Property Value   Xcc   platform C compiler executable  Xld  platform Linker executable  Xstrip  platform Strip utility executable  Xinclude  platform Include path  XlibraryPaths  platform   Library path       Environment variables may be accessed in the configuration files through the no   tation    VARIABLE   For executables that are on the standard search path  envi   ronment variable PATH   it is sufficient to give the name of the executable     Set Environment Variables       The environment variable JAMATCA must be set to jamaica home  On bash    gt  export JAMAICA jamaica home  On csh      gt  setenv JAMAICA jamaica home    3 1 2 Sun Solaris    The release for Solaris is provided as compressed tape 
197. pensive    An additional disadvantage of the use of native code is that the application of  any sort of formal program verification of this code becomes virtually intractable    Nevertheless  because of its availability for many JVMs  JNI is the most popu   lar Java interface for accessing hardware  It can be used whenever Java programs    112 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES    need to embed C routines that are not called too often or are not overly time   critical  If portability to other JVMs is a major issue  there is no current alternative  to JNI  When portability to other operating systems or hardware architectures is  more important  RTDA or RTSJ is a better choice for device access     11 3 3 Java 2 Micro Edition    Usually when one refers to Java  one thinks of the Java 2 Standard Edition  J2SE    but this is not the only Java configuration available  For enterprise applications   Sun Microsystems has defined a more powerful version of Java  Java 2 Enterprise  Edition  J2EE   which supports Web servers and large applications  There is also  a stripped down version of Java for embedded applications  Java 2 Micro Edition   J2ME   This is interesting for timely Java development on systems with limited  resources    J2ME is in fact not a single Java implementation  but a family of implementa   tions  At its base  JAME has two configurations  Connected Device Configuration   CDC  and Connected Limited Device Configuration  CLDC   Profiles for partic   ular app
198. plications with Jamaica Builder                  5    5 4 1  5 4 2    Getting started            Jamaica Buildfiles            II Tools Usage and Guidelines    6 Performance Optimization  6 1 Creating aprofile                7    S LI    Creating a profiling application    6 1 2 Using the profiling VM          6 4 3 Dumping a profile via network    6 1 4 Creating a micro profile        6 2 Using a profile with the Builder          6 2 1    Building with a profile            6 2 2 Building with multiple profiles    6 3 Interpreting the profiling output          6 3 1    Format of the profile file           63 2 Example                 Reducing Footprint and Memory Usage  7 1 Code Size vs  Runtime Performance       7 1 1    Using Smart Linking            7 1 2 Using Compilation          7 2 Optimizing RAM Memory Demand       1 2 1    Measuring RAM requirements    CONTENTS    35  35  35  36  37    39  39  39  40  40  40  41    45    47  47  47  48  49  49  50  50  51  51  52  56    CONTENTS 5    7 2  Memory for an Application   s Data Structures          69  Herc ir HD re ee 69   7 2 4 Memory Required for                           70   7 2 5 Memory Required for Line Numbers              73   75  IT 75  8 1 1 Initial heap size  cs ce cee Re wo Rn Rn 75   bee he Si ame oo te A ite acts A hte ge 76   8 1 3 Finalizer thread priority                     76   8 1 4 Reserved memory                        77   8 1 5 UsimgaGCthread                       78  n 78  8 1 7 Recommendations   
199. plus the left mouse button can also be used     Zoom factor    The size of the display can be changed via the buttons    zoom in    and    zoom out     or via holding down shift in conjunction with the left mouse button for enlarge   ment or in conjunction with the right mouse button for shrinking  Instead of shift  and the middle mouse button  the shift and the control key plus the left mouse  button can also be used     15 3 2 Data Window Menu    The data window   s menu offers the following actions     File Open       This menu item will open a file requester to load previously recorded sched   uler data that was saved through the data window   s    File Save as       menu item     see   15 3 2    15 3  DATA WINDOW 187    File Save as      This menu item permits saving the displayed scheduler data  such that it can later  be loaded through the control window s    File Open       menu item  see   15 2 1  File Close    Select this menu item will close the data window  but it will leave all other win   dows open     File Quit    Select this menu item will close all windows of the ThreadMonitor tool and quit  the application     Options Grid   Selecting this option will display light grey vertical grid lines that facilitate relat   ing a displayed event to the point on the time scale    Options Thread Headers   If this option is selected  the left part of the window will be used for a fixed list of  thread names that does not participate in horizontal scrolling    Options Thre
200. port for the Jamaica Builder tool  In the  context of this tool  the term    build    is used to describe the process of translating  compiled Java class files into an executable file  Please note that in Eclipse s  terminology     build    means compiling Java source files into class files     5 4 1 Getting started    In order to build your application with Jamaica Builder  you must create a Jamaica  Buildfile  A wizard is available and can be found in Eclipse s  New  dialog  File     New    Other      Select a Jamaica distribution and target platform and  specify your application s main class name    After finishing the wizard  the newly created buildfile is opened in a graphical  editor containing an overview page  a configuration page and a source page  You  can review and modify the Jamaica Builder configuration on the second page  or    5 4  BUILDING APPLICATIONS WITH JAMAICA BUILDER 41       in order to start the build process  click Invoke Ant on this target on  the Overview page     5 4 2 Jamaica Buildfiles    This section gives a more detailed introduction to Jamaica Buildfiles and the  graphical editor to edit them easily     Concepts    Jamaica Buildfiles are build files understood by Apache Ant   See  ant apache org   These build files mainly consist of targets containing a  sequence of tasks which accomplish a functionality like compiling a set of Java  classes  Many tasks come included with Ant  but tasks may also be provided by  a third party  Third party task
201. presents data sent by the scheduler in the  Jamaica run time system  and is invoked with the jamaica_threadmonitor  command  When ThreadMonitor is started  it presents the user a control window     see Fig  15 1      15 1 Run time system configuration    The event collection for ThreadMonitor in the Jamaica run time system is con   trolled by two system properties     e jamaica scheduler events port       e jamaica scheduler events port blocking    To enable the event collection in the JamaicaV M  a user sets the value of one of  these properties to the port number to which the ThreadMonitor GUI will connect  later  If the user chooses the blocking property  the VM will stop after the  bootstrapping and before the main method is invoked  This enables a developer to  investigate the startup behavior of an application      gt  jamaicavm  cp classes  Djamaica scheduler events port 2712       HelloWorld       accepting Scheduler Events Recording requests on port  2712  Hello World   Hello World   Hello World     181    182 CHAPTER 15  THE JAMAICA THREADMONITOR    Hello World   Hello World   Hello World    s     When event collection is enabled  the requested events are written into a buffer  and sent to the ThreadMonitor tool by a high priority periodic thread  The amount  of buffering and the time periods can be controlled from the GUI     15 2 Control Window    The ThreadMonitor control window is the main interface to control recording  scheduler data from applications running 
202. ptimisations for both speed and application size are pro   vided with the HelloWorld example  These are provided in an ant buildfile  In  order to use the buildfile  type ant build target where build target is one of the  build targets of the example  For example      gt  ant HelloWorld    will build the unoptimised HelloWorld example  In order to optimise for speed   use the build target He 1 LoWorld_profiled  in order to optimise for applica   tion size  use He11oWorld micro  The following is the list of all build targets  available for the HelloWorld example           HelloWorld Build an application in interpreted mode  The generated binary is  HelloWorld     HelloWorld profiled Build a statically compiled application based on a  profile run  The generated binary is He11oWorld profiled        HelloWorld micro Build an application with optimized memory demand   The generated binary is He11oWorld  micro        3 5  NOTATIONS AND CONVENTIONS 31                               Example Demonstrates Platforms  HelloWorld Basic Java all  RTHelloWorld Real time threads  RTSJ  all  SwingHelloWorld   Swing graphics with graphics  caffeine CaffeineMark  tm  benchmark all  test_JNI Java Native Interface all   net Network and internet with network  rmi Remote method invocation with network          Table 3 2  Example applications provided in the target directories    classes Convert Java source code to byte code   all Build all three applications   run Run all three applications     only
203. r  when using the builder  via the builder option maxHeapSize        Q  When the built application terminates I see some output like WARNING   termination of thread 7 failed  Whatis wrong     A  Attermination of the application the JamaicaVM tries to shutdown all running  threads by sending some signal  If a thread is stuck in a native function   e g   waiting in some OS kernel call  the signal is not received by the thread  and there is no response  In that case the Jamaica VM does a hard kill of  the thread and outputs the warning  Generally  the warning can simply be  ignored  but be aware that a hard kill may leave the OS in an unstable state   or that some resources  e g   memory allocated in a native function  can be  lost  Such hard kills can be avoided by making sure no thread gets stuck in  a native function call for a long time  e g   more than 100ms      Q  Does JamaicaVM include tools like rmic and rmiregistry to develop  RMI applications     A  The rmiregistry tool is included in Jamaica VM and can be executed like  this        jamaicavm sun rmi registry RegistryImpl       JamaicaVM 3 0 added support for the dynamic generation of stub classes at  runtime  obviating the need to use the Java Remote Method Invocation  Java  RMD stub compiler rmic to pregenerate stub classes for remote objects           Remote Method Invocation  RMI     Q  How can I use RMI     A 3  REMOTE METHOD INVOCATION  RMI  207    A  RMI applications often comprise two separate programs  a serv
204. r security reasons  system properties used by the VM  cannot be changed     14 3 2 Classes  files and paths    These options allow to specify classes and paths to be used by the builder     Option  XjamaicaHome path    The XjamaicaHome option specifies the path to the Jamaica directory  The  Jamaica home path can also be set with the environment variable JAMATCA_  HOME        Option  XjavaHome path    The XjamaicaHome option specifies the path to the Jamaica directory  The  Jamaica home path can also be set with the environment variable JAMAICA    HOME        Option  Xbootclasspath      classpath    The Xbootclasspath specifies path used for loading system classes     Option  XextendedGlobalCPool    Jamaica VM If set to true  the global constant pool can take up to Ox7FFFFFF   31bit  UTF8 strings  The default is false  OXFFFF  16bit   Please note that this  extension breaks runtime annotation and jvmti debugging     172 CHAPTER 14  THE JAMAICA BUILDER    Option  XlazyConstantStrings    Jamaica VM by default allocates all String constants at class loading time such  that later accesses to these strings is very fast and efficient  However  this approach  requires code to be executed for this initialization at system startup and it requires  Java heap memory to store all constant Java strings  even those that are never  touched by the application at run time  Setting option  XIazyConstantStrings causes the VM to allocate strings   constants lazily  i e   not at class loading tim
205. rcentage of methods that are to be compiled is given as an argument to the op   tion percentageCompiled  It must be between 0 and 100  Selecting 100  causes compilation of all methods executed during the profiling run  i e   methods  that were not called during profiling will not be compiled     Option  useProfile     file    file     The useProfile option instructs the builder to use profiling information col   lected using profile to restrict compilation to those methods that were most  frequently executed during the profiling run  The percentage of methods to be  compiled is 10 by default  unless percent ageCompiled is set to a different  value    It is possible to use this option in combination with the option profile   This may be useful when the fully interpreted application is too slow to obtain a  meaningful profile  In such a case one may achieve sufficient speed up through an  initial profile  and use the profiled application to obtain a more precise profile for  the final build    Multiple profiles should be separated by the system specific path separator          0 99 oe 0 99       colon         on Unix systems and semicolon      on Windows     14 2 9 Native code    Native code is code written in a different programming language than Java  typ   ically C or C     This code can be called from within Java code using the Java  Native Interface  JNI   Jamaica internally uses a more efficient interface  the Ja   maica Binary Interface  JBI   for native calls into the V
206. re registered trademarks of Oracle America  Inc  All other  brands or product names are trademarks or registered trademarks of their respective holders   ALL IMPLIED WARRANTIES ON THIS PUBLICATION  INCLUDING IMPLIED  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE   ARE LIMITED IN DURATION TO NINETY  90  DAYS FROM THE DATE OF THE  ORIGINAL RETAIL PURCHASE OF THIS PRODUCT    Although aicas GmbH has reviewed this publication  aicas GmbH MAKES NO WARRANTY  OR REPRESENTATION  EITHER EXPRESSED OR IMPLIED  WITH RESPECT TO THIS  PUBLICATION  ITS QUALITY  ACCURACY  MERCHANTABILITY OR FITNESS FOR A  PARTICULAR PURPOSE  AS A RESULT  THIS PUBLICATION IS PROVIDED AS IS  AND  YOU  THE PURCHASER  ARE ASSUMING THE ENTIRE RISK AS TO ITS QUALITY AND  ACCURACY    IN NO EVENT WILL aicas GmbH BE LIABLE FOR DIRECT  INDIRECT  SPECIAL   INCIDENTAL  OR CONSEQUENTIAL DAMAGES RESULTING FROM ANY DEFECT OR  INACCURACY IN THIS PUBLICATION  even if advised of the possibility of such damages     THE WARRANTIES SET FORTH ABOVE ARE EXCLUSIVE AND IN LIEU OF ALL  OTHERS  ORAL OR WRITTEN  EXPRESSED OR IMPLIED     Contents    I Introduction    1    Preface  1 1 Intended Audience of This Book                 002     L2  Contacting aas     ix           o x RUE R3      SLE GED  13 What is New in JamaicaVM 6 01                       2 Key Features of JamaicaVM    3    2   Hard Realtime Execution Guarantees                     TM T  2 3 Minimal footprint    ue x on ow Romx EROR OSS XOU ROS  25  ROM
207. readsFromEnv  If the maximum number of threads may be set via an environment variable   this is set to the name of this environment variable     jamaica  numThreadsFromEnv  If the initial number of threads may be set via an environment variable  this  is set to the name of this environment variable     jamaica release  The release number of the JamaicaVM     jamaica scopedMemorySize  The size of the memory available for scoped memory     jamaica strictRTSJ  Boolean property  Value depends on the setting of the     st rict RTSJ op   tion that was used when building the application  See   for more de   tails     jamaica version  The version number of the Jamaica VM     232 APPENDIX C  PROPERTIES THAT CONTROL THE VM    Appendix D    Heap Usage for Java Datatypes    This chapter contains a list of in memory sizes of datatypes used by JamaicaVM   For datatypes that are smaller than one machine word  only the smallest mul   tiple of eight Bits that fits the dataype will be occupied for the value  I e   several  values of types boolean  byte  short and char may be packed into a single machine  word when stored in an instance field or an array   Tab   D 1 shows the usage of heap memory for primitive types  Tab   D 2 shows  the usage of heap memory for objects  arrays and frames     233                                        234 APPENDIX D  HEAP USAGE FOR JAVA DATATYPES  Datatype Memory Demand   Min Value Max Value  Bits Bytes  boolean 8 1      byte 8 1    2        short 16 2    21   
208. red the maximum execution time started  A mouse click on this cell  will cause this position to be displayed in the center of the data window  the worst case execution time window was created from  This column will  display    N A    in case no Worst case execution time was displayed for this  thread       Releases is the number of releases that of the given thread that where found  during the recording  See below for a definition of a release     Average time is the average execution time for one release of this thread  See  below for a definition of execution time     Comment will display important additional information that was found during  the analysis  E g   in case the data the analysis is based on contains over   flows  i e  periods without recorded information  these times cannot be cov   ered by this analysis and this will be displayed here     Definitions    Release of a thread T is a point in time at which a waiting thread T becomes  ready to run that is followed by a point in time at which it will block again waiting  for the next release  Le   a release contains the time a thread remains ready until  it becomes running to execute its job  and it includes all the time the thread is  preempted by other threads or by activities outside of the VM     Execution Time of a release is the time that has passed between a release and  the point at which the thread blocked again to wait for the next release     Limitations    The worst case execution times displayed in the
209. rformance depends strongly on the C compiler that is employed  and may even show anomalies such as better runtime performance for the version  optimized for smaller code size      gt    caffeine_useProfilel0  Sieve score   10583  98   Loop score   33002  2017   Logic score   50558  0   String score   10105  708   Float score   12747  185   Method score   7357  166650   Overall score   15993     gt    caffeine_useProfilel0_size  Sieve score   10138  98    Loop score   33136  2017   Logic score   58124  0    String score   10140  708   Float score   13134  185   Method score   6984  166650   Overall score   16212    Using Full Compilation  Full compilation can be used when no profiling information is available and code    size or built time is not an important issue     1 Fully compiling an application leads to very poor turn around times and may  require significant amounts of memory during the C compilation phase  We  recommend compilation be used only through profiling as described above     To compile the complete application  the option compile must be set         gt  jamaicabuilder  cp classes  compile CaffeineMarkEmbeddedApp     gt   destination caffeine compiled    66 CHAPTER 7  REDUCING FOOTPRINT AND MEMORY USAGE    Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1   User  EVALUATION USER  Expires  2010 06 10   Genera
210. ribed in       gt    caffeine   Sieve score   10576  98   Loop score   41677  2017   Logic score   50617  0   String score   9861  708   Float score   12807  185   Method score   7357  166650   Overall score   16574    Compilation via Profiling    Generation of a profile for compilation is a powerful tool for creating small ap   plications with fast turn around times  The profile collects information on the  runtime behavior of an application  guiding the compiler in its optimization pro   cess and in the selection of which methods to compile and which methods to leave  in compact bytecode format    To generate the profile  we first have to create a profiling version of the ap   plications using the builder option profile  see 8 l6  or using the command  jamaicavmp           jamaicavmp CaffeineMarkEmbeddedApp  Sieve score   250  98    Loop score   214  2017    Logic score   241  0    String score   1367  708    Float score   217  185    Method score   181  166650    Overall score   297   Start writing profile data into file    CaffeineMarkEmbeddedApp prof     Write threads data     Write invocation data      Done writing profile data    This profiling run also illustrates the runtime overhead of the profiling data col   lection  the profiling run is significantly slower than the interpreted version    Now  an application can be compiled using the profiling data that was stored  in file Ca  feineMarkEmbeddedApp prof      gt  jamaicabuilder  cp classes      gt   useProfile Caff
211. riorities for normal Java threads must be in a range specified in pack   age java lang class Thread  The minimal priority is MIN PRIORITY        maximal priority MAX PRIORITY    RealtimeThreads and NoHeapRealtimeThreads share the priority  range defined in javax realtime class PriorityScheduler  and which                               10 5  LIMITATIONS OF RTSJ IMPLEMENTATION 99    may be obtained by querying method instance    getMinPriority     and instance   getMaxPriority       10 4 3 Runtime checks for NoHeapRealtimeThread    If st rictRTSd is set  runtime checks on all memory read operations  1      ac   cesses to static and instance fields and accesses to reference array elements  are  checked to ensure that no object on the garbage collected heap is touched by a  NoHeapRealtimeThread    These runtime checks are required by classical Java implementations with a  non realtime garbage collector  They may impose an important runtime overhead  on the application     10 4 4 Static Initializers    When st rictRTS J is set  static initializers are executed within immortal mem   ory  This means that all objects allocated by static initializers are accessible by  all threads  Care is required since any allocations performed within static initial   izers of classes that are loaded dynamically into a system will never be recycled   Dynamic class loading consequently poses a severe risk of introducing a memory  leak into the system     10 4 5 Class PhysicalMemoryManager    When str
212. rm memory allocation may  however  continue execution even while  the stop the world garbage collector is running    The builder option  st op TheWor1dGC enables the stop the world garbage  collector  Alternatively  the builder option  constGCwork  1 may be used  or   constGCworkFromEnv var with the environment variable var set to  1    JamaicaVM additionally provides an atomic garbage collector that requires  stopping of all threads of the Java application during a stop the world garbage  collection cycle  This has the disadvantage that even threads that do not allocate  heap memory will have to be stopped during the GC cycle  However  it avoids  the need to track heap modifications performed by threads running parallel to the  garbage collector  so called write barrier code   The result is a slightly increased  performance of compiled code    Specifying the builder option  atomicGC enables the atomic garbage col   lector  Alternatively  the builder option  constGCwork  2 may be used  or  specify  constGCworkFromEnv var with the environment variable var set to  24   Please note the use of the memory reservation thread or the GC thread should  be disabled when stop the world or atomic GC is used     8 1 7 Recommendations    In summary  to obtain the best performance in your soft realtime application  fol   low the following recommendations     e Set initial heap size as large as possible   e Set initial heap size and maximum heap size to the same value if possible     e Set t
213. rm standard library  code more slowly    The options  arguments and environment variables accepted by jamaicavm_  slim        the same as the options of the jamaicavm command  See   13 1 for  the detailed list     13 3  JAMAICAVMP 137    13 3 jamaicavmp    jamaicavmp is a variant of jamaicavm slim that collects profiling informa   tion  This profiling information can be used when creating an optimized version  of the application using option  useProfile file of the Jamaica builder com   mand  see   14     The profiling information is written to a file whose name is the name of the  main class of the executed Java application with the suffix   prof  The following  run of the HelloWorld application available in the examples  see 8B 4  shows how  the profiling information is written after the execution of the application      gt  jamaicavmp  cp classes HelloWorld    Hello World   Hello World   Hello World   Hello World     Hello World   Hello World   leas  Start writing profile data into file    HelloWorld prof     Write threads data     Write invocation data     Done writing profile data    Profiling information is written after the termination of the application  This re   quires an additional mechanism for applications which are not self terminating   There are two possible approaches  adding an explicit termination mechanism to  the application or requesting a profile dump remotely    For an explicit termination  the application needs to be rewritten to terminate  at a certa
214. rofile information at any point in time  See 8 6 for more details     jamaica reservation thread priority n   If set to an integer value larger than or equal to 0  this property instructs  the virtual machine to run the memory reservation thread at the given Java  priority  A value of 0 will result at a Java priority 1 with micro adjustment   1  i e   the scheduler will give preference to other threads running at prior   ity 1  By default  the priority of the reservation thread is set to 0  1      Java  priority 1 with micro adjustment  1   The priority may be followed by a    or     character to select priority micro adjustment  1 or   1  respectively   Setting this property  e g   to 10  will run the memory reservation thread  at a priority higher than all normal Java threads  but lower than all RTSJ  threads  See 8 8 1 4 for more details     jamaica scheduler events port  This property defines the port where the ThreadMonitor can connect to re   ceive scheduler event notifications     230 APPENDIX C  PROPERTIES THAT CONTROL THE VM    jamaica scheduler events port blocking  This property defines the port where the ThreadMonitor can connect to re   ceive scheduler event notifications  The Jamaica runtime system stops be   fore entering the main method and waits for the ThreadMonitor to connect     jamaica softref minfree  Minimum percentage of free memory for soft references to survive a GC  cycle  If the amount of free memory drops below this threshold  soft refer   ences m
215. rties   resource    This property specifies the name of a resource that instructs Jamaica VM  which fonts to load  The default value is the resource com aicas  jamaica   awt fonts properties  The property may be set to a user defined re   source file to change the set of supported fonts  The specified file itself is a  property file that maps font names to resource file names     jamaica gcthread pri mn    If set to an integer value larger than or equal to 0  this property instructs the  virtual machine to launch a garbage collection thread at the given Java pri   ority  A value of 0 will result in a Java priority 1 with micro adjustment     1   i e   the scheduler will give preference to other threads running at priority  1  By default  a GC thread is not used  See 8 8 1 5 for more details     jamaica loadLibrary ignore error    This property specifies whether every unsuccessful attempt to load a native  library dynamically via System loadLibrary   should be ignored by the VM  at runtime  If set to true and System loadLibrary   fails  no UnsatifiedLink   Error will be thrown at runtime  The default value for this property is false     jamaica no sig int handler    If this boolean property is set  then no default handler for POSIX signal  SIGINT  Ctr1 C  will be created  The default handler that is used when  this property is not set prints           break     to System err and calls  System exit  130      jamaica no sig quit handler       If this Boolean property is set  the
216. run other Java threads at priority 1  the property  may be set to 0  which results in a GC thread Java priority 1 and the scheduler set  to give preference to other Java threads running at priority 1    The GC thread uses this idle time to perform garbage collection work so that  the amount of free memory is larger and the application threads can on average  perform allocations faster  However  additional CPU time is taken from any other  applications on the system that may run at lower priorities    Even when a GC thread is used  not all of the available CPU time is necessarily  used by the Java application  The GC thread will periodically stop its activity  when only a little memory was reclaimed during a GC cycle  Lower priority  threads may therefore still obtain some CPU time even if a GC thread is used     8 1 6 Stop the world Garbage Collection    For applications that do not have any realtime constraints  but that require the  best average time performance  Jamaica VM s builder provides options to disable  realtime garbage collection  and to use a stop the world garbage collector instead     8 1  CONFIGURATION FOR SOFT REALTIME APPLICATIONS 79    In stop the world mode  no garbage collection work will be performed un   til the system runs out of free memory  Then  all threads that perform memory  allocation will be stopped to perform garbage collection work until a complete  garbage collection cycle is finished and memory was reclaimed  Any thread that  does not perfo
217. runs the garbage collector in static mode  In static  mode  for every unit of allocation  a constant number of units of garbage collection  work is performed  This results in a lower worst case execution time for the  garbage collection work and allocation and more predictable behavior  compared  with dynamic mode  because the amount of garbage collection work is the same  for any allocation  However  static mode causes higher average garbage collection  overhead compared to dynamic mode    The value specified is the number for units of garbage collection work to be    164 CHAPTER 14  THE JAMAICA BUILDER    performed for a unit of memory that is allocated  This value can be determined  using a test run built with  analyze set    A value of    0    for this option chooses the dynamic GC work determination  that is the default for Jamaica VM    A value of   1  enables    stop the world GC  see option stopTheWorldGC  for more information    A value of   2  enables a atomic GC  see option at omicGC for more infor   mation    The default setting chooses dynamic GC  the amount of garbage collection  work on an allocation is then determined dynamically depending on the amount  of free memory     Option  constGCworkFromEnv var    The constGCworkFromEnv option enables the application to read the amount  of static garbage collection work on an allocation from the environment variable  specified within  If this variable is not set  the value specified with the option   constGCwork will 
218. s       class  args      jamaicavm  jar  options       jarfile  args        The jamaicavm permits a number of options followed by a class name or a  Java archive file if option  jar is present  The class uses dots  7  as package  separators and does not include the  class extension  i e   to execute the Java  application whose main class in in file com mycompany MyClass class   or com mycompany MyClass class on Windows systems   the class ar   gument must be com mycompany MyClass  An optional      can be used to  explicitly separate the options from the class or jar file argument     133    134 CHAPTER 13  THE JAMAICA VIRTUAL MACHINE COMMANDS    13 1 4 JamaicaVM Options  Option  classpath   cp  path    The classpath option sets search paths for class files  The argument must be  a list of directories or JAR ZIP files separated by the platform dependent path  separator char      on Unix Systems          on Windows      Option    Dname value       The D option sets a system property with a given name to a given value  The  value of this property will be available to the Java application via functions such  as System getProperty       Option  version    The version option prints version of JamaicaVM     Option  help         The help option prints a short help summary on the usage of JamaicaVM and  lists the default values is uses  These default values are target specific  The default  values may be overridden by command line options or environment variable set   tings  Where com
219. s     4 0 Jamaica Virtual Machine    The command jamaicavm provides a version of the Jamaica virtual machine   It can be used directly to quickly execute a Java application  It is the equivalent  to the java command that is used to run Java applications with SUN s JDK  A  more detailed description of the jamaicavm and similar commands that are part  of Jamaica will be given in 8 13     35    36 CHAPTER 4  TOOLS OVERVIEW      java  jamaicac  gt     class jamaicavm    jamaicabuilder    gt  executable    Figure 4 1  The Jamaica Toolchain    The jamaicavm first loads all class files that are required to start the ap   plication  It contains the Jamaica Java interpreter  which then executes the byte  code commands found in these class files  Any new class that is referenced by a  byte code instruction that is executed will be loaded on demand to execute the full  application    Applications running using the jamaicavm command are not very well op   timized  There is no compiler that speeds up execution and no specific measures  to reduce footprint are taken  We therefore recommend using the Jamaica builder  presented in the next section and discussed in detail in    14 to run Java applications  with Jamaica VM on an embedded system     4 3 Jamaica Builder     Creating Target Executables    In contrast to      jamaicavm command  jamaicabuilder does not execute  the Java application directly  Instead  the builder loads all the classes that are part  of a Java application and package
220. s    When pointing onto a thread in the data window  a tool tip appears that display in   formation on the current state of this thread including its name  the state  running   ready  etc   and the thread   s current priority     15 3 5 Worst Case Execution Time Window    Through this window  the ThreadMonitor tool enables the determination of the  maximum execution time that was encountered for each thread within recorded  scheduler data  If the corresponding menu item was selected in the data window   see 8 15 3 2   execution time analysis will be performed on the recorded data and  this window will be displayed    The window shows a table with one row per thread and the following data  given in each column     Thread   gives the Jamaica internal number of this thread  Threads are numbered  starting at 1  One Thread number can correspond to several Java threads in  case the lifetime of these threads does not overlap     15 3  DATA WINDOW 189    Thread Name will present the Java thread name of this thread  In case several  threads used the same thread id  this will display all names of these threads  separated by vertical lines     Worst case execution time presents the maximum execution time that was en   countered in the scheduler data for this thread  This column will display     N A    in case no releases where found for this thread  See below for a  definition of execution time     Occurred at gives the point in time within the recording at which the release that  requi
221. s and the Builder option  analyze  see    8 2     7 2 2 Memory for an Application   s Data Structures    To optimize the memory required for point 1  the application   s data structures   care is required by the application developer to allocate little memory and to make  efficient use of it    One important prerequisite to keeping application RAM demand low is that  the Java implementation introduces only a small amount of memory overhead  into every object  This is particularly important since Java applications typically  allocate many small objects    The per object memory overhead in Jamaica is relatively small  Typically  three machine words are required for internal data such as the garbage collection  state  the object   s type information  a monitor for synchronisation and memory  area information  see     10  for details on memory areas      7 2 3 Memory for API libraries    The amount of memory required for internal data structures using an application  built using Jamaica is very low since only essential data that needs to be modified  at runtime is stored in RAM  Most data that is constant will be read directly from  the application data that can be stored in ROM    Nevertheless  the amount of memory required for internal data depends on the  size of the application including all library class files that may be required at run  time  Library classes such as character encodings or network protocols are not  needed by all applications so they do not necessarily need
222. s caffeine_nolibs_js_fP_tS_nL  3291812 caffeine nolibs js fP tS nL    JamaicaVM copies the line number information to RAM on startup  such that also  the RAM demand without line number information is significantly lower  In this  case  the demand dropped from 471K with line number information to only 347K  without this information     Chapter 8    Memory Management  Configuration    JamaicaVM provides the only efficient hard realtime garbage collector available  for Java implementations on the marked today  This chapter will first explain  how this garbage collection technology can be used to obtain the best results for  applications that have soft realtime requirements before explaining the more fine   grained tuning required for realtime applications     8 1 Configuration for soft realtime applications    For most non realtime applications  the default memory management settings of  JamaicaVM perform well  The heap size is set to a small starting size and is  extended up to a maximum size automatically whenever the heap is not sufficient  or the garbage collection work becomes too high  However  in some situations   some specific settings may help to improve the performance of a soft realtime  application     8 1 1 Initial heap size    The default initial heap size is a small value  The heap size is increased on demand  when the application exceeds the available memory or the garbage collection work  required to collect memory in this small heap becomes too high  This means
223. s file compaction gain  80 13536   8835298    gt  1755100      C compiling    caffeine_nolibs_js_fP_tS__ c       caffeine nolibs js fP tS nc o    linking    stripping  Application memory demand will be as follows     initial max  Thread C stacks  128KB    1  128KB  63MB    511   128KB   Thread Java stacks  4096B    1 4096B   2044KB    511 4096B    Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  2308KB 337MB     gt  ls  s caffeine nolibs js fP tS  3569804 caffeine nolibs js fP tS    These additional options have little effect on the application size itself compared to  the earlier version  However  the RAM demand of the application can be reduced  to 2308K instead of 3328K for the version with larger Java stack  finalizer thread  and time slicing thread     7 23 5 Memory Required for Line Numbers    An important advantage of programming in the Java language compared to other  languages are the accurate error messages one obtains  Run time exceptions con   tain a complete stack trace with line number information on where the problem  occured  This information  however  needs to be stored in the application and be  available at runtime    After the debugging of an application is finished  you may want to reduce the  applications memory demand by removing this information  The builder option  XignoreLineNumbers can be set to disable this information  Continuing the  example from the previous section  one can further reduce the application size and  RAM demand by setting this
224. s for the POSIX signals can be turned off by setting  properties with the option XdefineProperty  The POSIX signals are  SIGINT  SIGQUIT and SIGTERM  The properties are described in 8  d  To turn off the signal handlers  the properties jamaica no sig int _  handler  jamaica no sig quit  handler and jamaica no  sig term handler have to be set to t rue        Applying this to our example application  we can reduce the Java stack to 4K     deactivate the finalizer thread  set the number of threads to 1  disable the time  slicing thread and the memory reservation thread and turn of the signal handlers      gt    gt    gt    gt    gt    gt    gt    gt        jamaicabuilder  cp classes  interpret  setLocales none       setProtocols none  setGraphics none  setFonts none     javaStackSize 4K  finalizerPri 0  numThreads 1    timeSlice 0ns  reservedMemory 0    XdefineProperty  jamaica no sig int handler true    jamaica no sig quit handler true    jamaica no sig term handler true      CaffeineMarkEmbeddedApp  destination caffeine nolibs js fP tS                Reading configuration from    usr local jamaica 6 0 1 etc jamaica conf      Reading configuration from    usr local jamaica 6 0 1 target linux x86 etc jamaica conf      Jamaica Builder Tool 6 0 Release 1    User  EVALUATION USER  Expires  2010 06 10   Generating code for target    linux x86     optimisation    speed        caffeine_nolibs_js_fP_tS__ c     caffeine_nolibs_js_fP_tS__ h    7 2  OPTIMIZING RAM MEMORY DEMAND 73    Clas
225. s for the compiler in etc jamaica conf and  the PATH environment variable     Q  Can I build my own VM as an application which expects the name of the main    class on the command line like JamaicaVM does     A  With the Builder a standalone VM can be built with the option  XnoMain     If this option is specified  the Builder does not expect a main class while  compiling  Instead  the built application expects the main class later after  startup on the command line  Some classes or resources can be included in  the created VM  e g   a VM can be built including all classes of the selected  API except the main program with main class     A 5 Fonts    Q  How can I change the mapping from Java fonts to native fonts     A  The mapping between Java font names and native fonts is defined in the    font  properties file  Each target system provides this file with useful  default values  An application developer can provide a specialized version  for this file  To do this the new mapping file must exist in the classpath  at build time  The file must be added as a resource to the final application  by adding  resource t path where path is a path relative to a classpath  root  Setting the system property  jamaica fontproperties  with the option   XdefineProperty jamaica fontproperties path will pro   vide the graphics environment with the location of the mapping file        A 6  VXWORKS TARGET 211        Why do fonts appear different on host and target     A  Jamaica relies on the targe
226. s must be defined within the buildfile by a task  definition  taskdef   Ant tasks that invoke the Jamaica Builder and other tools  are part of the JamaicaVM tools  See     18  for the available Ant tasks and further  details on the structure of the Jamaica Buildfiles    The Jamaica specific tasks can be parameterized similarly to the tools they  represent  We define the usage of such a task along with a set of options as a  configuration    We use the term Jamaica Buildfile to describe an Ant buildfile that defines at  least one of the Jamaica specific Ant tasks and contains one or many configura   tions    The benefit of this approach is that configurations can easily be used outside of  Eclipse  integrated in a build process and exchanged or stored in a version control  system     Using the editor    The editor for Jamaica Buildfiles constists of three or more pages  The first page  is the Overview page  On this page  you can manage your configurations  task  definitions and Ant properties  More information on this can be found in the  following paragraphs  The pages after the Overview page represent a configu   ration  The last page displays the XML sourecode of the buildfile  Normally  you  should not need to edit the source directly     Configure Builder options    A configuration page consists of a header section and a body part  Using the con   trols in the header  you can request the build of the current configuration  change    42 CHAPTER 5  SUPPORT FOR THE ECLIPSE I
227. s several dis   advantages  An embedded system might not provide the necessary file system  device and file system services  Instead  it is preferable to have all files relevant  for an application in a single executable file  which may be stored in read only  memory  ROM  within an embedded system    The Builder provides a way to create a single application out of a set of class  files and the Jamaica virtual machine     14 1 How the Builder tool works    Fig   14  illustrates the process of building a Java application and the JamaicaVM  into a single executable file  The Builder takes a set of Java class files as input  and by default produces a portable C source file which is compiled with a native  C compiler to create an object file for the target architecture  The build object file  is then linked with the files of the JamaicaVM to create a single executable file  that contains all the methods and data necessary to execute the Java program     14 2 Builder Usage    The builder is a command line tool  It is named jamaicabuilder  A variety  of arguments control the work of the Builder tool  The arguments can be given  directly to the Builder via command line  or by using configuration files  Options    143    144 CHAPTER 14  THE JAMAICA BUILDER      class         gt    C source file    Y       jamaicabuilder    profiling data p        object file    executable    lt     Figure 14 1  The Builder tool  given at the command line take priority  Options not specified at the co
228. s shown usually exceeds the  performance of a fully compiled application  Furthermore  the memory footprint  is significantly smaller and the modify compile run cycle time is usually signif   icantly shorter as well since only a small fraction of the application needs to be  compiled  It is not necessary to re generate profile data after every modification     6 2 2 Building with multiple profiles    You can use several profiles to improve the performance of your application   There are two possibilities to specify profiles that behave in a different way    First you can just concatenate two profile files or dump a profile several times  into the same file which will just behave as if the profiles were recorded sequen   tially  You can add a profile for a new feature this way    If you want to favor a profile instead  e g  a micro profile for startup or a  performance critical section as described in 8  6 1 4  you can specify the profile  with another  useProfile option  In this case  all profiles are normalized  before they are concatenated  so highly rated methods in a short run micro profile  are more likely to be compiled     6 3 Interpreting the profiling output    When running in profiling mode  the VM collects data to create an optimized ap   plication but can also be interpreted manually to find find memory leaks or time  consuming methods  You can make Jamaica collect information about perfor   mance  memory requirements etc    To collect additional information  you 
229. s them together with the Jamaica runtime sys   tem  Java interpreter  class loader  realtime garbage collector  JNI native interface   etc   into a stand alone executable  This stand alone executable can then be exe   cuted on the target system without needing to load the classes from a file system  as is done by      jamaicavm command  but can instead directly proceed execut   ing the byte codes of the application s classes that were built into the stand alone  executable    The builder has the opportunity to perform optimizations on the Java applica   tion before it is built into a stand alone executable  These optimizations reduce  the memory demand  smart linking  bytecode compaction  etc   and increase its    4 4  JAMAICA THREADMONITOR     MONITORING REALTIME BEHAVIOUR37    runtime performance  bytecode optimizations  profile guided compilation  etc     Also  the builder permits fine grained control over the resources available to the  application such as number of threads  heap size  stack sizes and enables the user  to deactivate expensive functions such as dynamic heap enlargement or thread  creation at runtime  A more detailed description of the builder is given in sig    4 4 Jamaica ThreadMonitor     Monitoring Realtime  Behaviour    The JamaicaVM ThreadMonitor enables to monitor the realtime behaviour of ap   plications and helps developers to fine tune the threaded Java applications running  on Jamaica run time systems  These run time systems can be either the Jam
230. safer  but it is generally inefficient due to the runtime  checks required by its use  When a memory check fails  the result is a runtime  exception  which is also undesirable in safety critical code  In many cases  static          118 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES    memory de allocation can do the same job without the runtime checks  Escape  analysis ensures that the checks are not needed and that no memory related ex   ception is ever thrown by the corresponding memory access  Therefore  static  memory deallocation is generally a better solution than ScopedMemory    When static memory deallocation is not applicable  one can always fall back  on the realtime garbage collector  It is both safe and relatively efficient  Still  any heap allocation has an associated garbage collection time penalty  Realtime  garbage collection makes an allocating thread pay the penalty up front    One important property of the JamaicaVM is that any realtime code that runs  at high priority and that does not perform memory allocation is guaranteed not to  be delayed by garbage collection work  This important feature holds for standard  RTSJ applications only under the heavy restrictions that apply to NoHeapReal   timeThreads     11 5 Scheduling and Synchronization    As the reader may have already noticed in the previous sections  scheduling and  synchronization are closely related  Scheduling threads that do not interact is  quite simple  however  interaction is necessary for shar
231. st char  commandLine       where main is the name of the main class or the name specified via the Builder  option destination  To link the application with the VxWorks kernel image  the macro USER           INIT should be set to something like this                 extern int jvm main  const char x   jvm main  args     where args is the command line  as a C string  which should be passed to the  application     B 1 6 Limitations    The current release of Jamaica for the VxWorks OS has the following limitations   e java lang Runtime exec   is not implemented    e The following realtime signals are not available        SIGSTKFLT  SIGURG  SIGXCPU  SIGXFSZ  SIGVTALRM  SIGPROF   SIGWINCH  SIGIO  SIGPWR  SIGSYS  SIGIOT   SIGUNUSED   SIGPOLL  SIGCLD                                                                                e Jamaica does not allow an application to set the resolution of the clock  in javax realtime RealtimeClock  The resolution of the clock  depends on the frequency of the system ticker  see sysClkRateGet     and sysClkRateSet      If a higher resolution for the realtime clock is  needed the frequency of the system ticker must be increased  Care must  be taken when doing this  because other programs running on the system  may change their behavior and even fail  In addition  under VxWorks 5 4  the realtime clock must be informed about changes of the system ticker rate  with the function clock setres     The easiest way to do this is to add  the following into a s
232. stalled    In the Jamaica configuration file jamaica home etc jamaica conf the path  of the Board Support Package  BSP  installation must be adjusted  The following  examples show the changes needed for an rtems i386 release     B 3  INTEGRITY 221    e Change the include path property include rtems    in the config file  jamaica home   et c   jamaica conf to the include path of the BSP  E g    BSP INSTALL DIR i386 rtems pc686 lib include                e Change the  B option of the property XCFLAGS rtems    to the path of  your BSP library directory  E g   BSP  INSTALL DIR i386 rtems   pc686 1ib                      e Change the  B option of the property XLDF LAGS  rtems x to the path of  your BSP library directory  E g   BSP  INSTALL DIR i386 rtems   pc686 1lib                      2 2 RTEMS Configuration    A RTEMS application should be configured using macros like              define CONFIGURE APPLICATION NEEDS CONSOLE DRIVER                   These definitions may be made in the file jamaica home  target  rtems     include jamaica target configuration h     B 2 3 Running an application    The Builder generates a bootable image of the application  How this image is  loaded and run depends on the BSP  An application built for the target 1386 rtems  with the pc686 BSP can  for example  be loaded and run using the GRUB boot   loader           INTEGRITY    INTEGRITY from GreenHills Software is a secure  royalty free Real Time Op   erating System intended for use in embedded sy
233. stems that require maximum re   liability  The JamaicaVM is available for INTEGRITY and the following target  hardware    e ARM   e Blackfin    e PowerPC    227 APPENDIX B  INFORMATION FOR SPECIFIC TARGETS    B 3 1 Installation   The INTEGRITY version of Jamaica is installed as described in section Installa   tion  see 83 1   In addition  the following steps are required    Configuration with INTEGRITY and BSP installed    The path of the Board Support Package  BSP  installation in the Jamaica config   uration file jamaica home   et c   jamaica conf must be adjusted     e Check the include path property include integrity   in jamaica   home   etc   jamaica conf  It must be set to the INTEGRITY include  path  default is  usr local integrity INTEGRITY include                    e Check the property XCFLAGS integrity   for appropriate values  By  default  the compiler generates code to run on the INTEGRITY PPC simula   tor  isimppc   The value of option  bspname may be changed accordingly  to your BSP           e Check the property XLDFLAGS integrity   for appropriate values   By default  the linker generates an INTEGRITY kernel of your applica   tion  i e   it can be run directly using isimppc  This is defined through    integrity option kernel  Changing theoptionto   integrity  option dynamic creates a dynamic downloadable module of the ap   plication  To run such a module  start isimppc with a provided kernel   isimppc  usr local integrity sim800 kernel  Then down   load the 
234. t JAMAICA BUILDER HEAPSIZE 1536MB    Q  When I build an application which contains native code it seems that some    A           fields of the class files can be accessed with the function Get FieldID     from the native code  but some others not  What happened to those fields     If an application is built  the Builder removes from classes all unreferenced    methods and fields  If a field in a class 1s only referenced from native code  the Builder can not detect this reference and protect the field from the smart   linking process  To avoid this use the includeClasses option with the  class containing the field  This will instruct the Builder to fully include the  specified class es      Q  When I build an application with the Builder I get some warning like the    A     following     WARNING  Unknown native interface type of class  name    name h    assume JNI calling convention       Is there something wrong     In general  this is not an error  The Builder outputs this warning when it is not    able to detect whether a native function is implemented using JNI  the stan   dard Java native interface  see chapter 8116       JBI     Jamaica specific  more  efficient native interface used by the  Jamaica  boot classes   Usually this  means the appropriate header file generated with some prototype tool like  jamaicah is not found or not in the proper format  To avoid this warning   recreate the header file with jamaicah and place it into a directory that is  passed via the bui
235. t graphics system to render true type fonts  Since  that renderer is generally a different one than on the host system it is possi   ble that the same font is rendered differently     A 6 VxWorks Target    Q  When I load a built application I get errors of the dynamic linker Undefined  symbol      A  This linker error occurs when the VxWorks system is configured without one  or more of the following function sets listed in  Configuration of VxWorks     Please check your VxWorks configuration  INCLUDE   statements   intarget config all configAll hin your VxWorks installation  directory  Probably you have to recompile a new VxWorks kernel image     Q  How can I pass parameters to an application under VxWorks     A  Because of the C like syntax of the VxWorks command shell  parameters to  an application have to be passed as a string  An application can simply  be started by jvm        or classname       where classname is the  value specified via the  destination option of the Jamaica Builder        isa  space separated list of arguments which should be passed to the application     just like a command line      212 APPENDIX A  FAQ     FREQUENTLY ASKED QUESTIONS    Appendix B    Information for Specific Targets    This appendix contains target specific documentation and descriptions     B 1 VxWorks    VxWorks from Wind River Systems is a real time operating system for embedded  computers  The JamaicaVM is available for VxWorks 5 4 to 6 7 and the following  target hardware     e 
236. t still will be possible to use these functions   However  then these threads will be allocated dynamically when needed    Since non fragmented memory is required for the allocation of these threads   a later allocation may require heap expansion or may fail due to fragmented mem   ory  It is therefore recommended to pre allocate these threads    The number of JNI attachable threads that will be required is the number of  threads that will be attached simultaneously  Any thread structure that will be  detached via JNI_DetachCurrentThread will become available again and  can be used by a different thread that calls JNI AttachCurrentThread or  JNI AttachCurrentThreadAsDaemon                                                        Option  threadPreemption n    Compiled code contains special instructions that permit thread preemption  These  instructions have to be executed often enough to allow a thread preemption time  that is sufficient for the destination application  As the instructions cause an over   head in code size and runtime performance one would want to generate this code  as rarely as possible    The threadPreemption option enables setting of the maximum number  of intermediate instructions that are permitted between the execution of thread  preemption code  This directly affects the maximum thread preemption time of  the application  One intermediate instruction typically corresponds to 1 2 machine  instructions  There are some intermediate instructions  calls  arra
237. tartup script for VxWorks    220 APPENDIX B  INFORMATION FOR SPECIFIC TARGETS    sysClkRateSet  1000   timeSpec malloc  8        timeSpect0     0    x  timeSpect 4     1000000  clock_setres  0 timeSpec   free  timeSpec        This example sets the system ticker frequency to 1000 ticks per second and  the resolution of the realtime clock to Ims     B 1 7 Additional notes    e Object files  because applications for VxWorks  DKM only  are usually  only partially linked  missing external functions and missing object files  cannot be detected at build time  If native code is included in the application  with the option ob ject  Jamaica cannot check at build time if all needed  native code is linked to the application  This is only possible in the final  linker step when the application is loaded on the target system     B 2 RTEMS    RTEMS  Real Time Executive for Multiprocessor Systems  is a commercial grade  real time operating system designed for deeply embedded systems  It is a free  open source solution that supports multiprocessor systems  RTEMS is designed  to support applications with the most stringent real time requirements while being  compatible with open standards  The JamaicaVM is available for RTEMS 4 6 and  the following target hardware     e Intel x86    e ERC32  LEON    B 2  Installation   The RTEMS Version of Jamaica is installed as described in section Installation   see 813 1   In addition  the following steps are required    Configuration with RTEMS and BSP in
238. ter the opening project tag of the build file       taskdef name  jamaicabuilder   classpath  jamaica home l1ib JamaicaTools jar   classname  com aicas jamaica tools ant JamaicaTask          taskdef name  jamaicah   classpath  jamaica home   1ib JamaicaTools jar   classname  com aicas jamaica tools ant JamaicahTask    gt                 The task names are used within the build file to reference these tasks  They may  be chosen arbitrarily for stand alone build files  For compatibility with the Eclipse  Plug In  the names jamaicabuilder and jamaicah should be used     18 2 Task Usage    All Jamaica Ant tasks require the attribute jamaica  which must be set to jamaica   home  the root directory of the Jamaica installation     201    202 CHAPTER 18  BUILDING WITH APACHE ANT    Tool options are specified as nested elements  For each tool option  option   a corresponding option element is available in the Ant task of that tool  These  option elements accept the attributes shown in the following table  All attributes  are optional        Attribute   Description Required          value Option argument For options that re   quire an argument   enabled   Whether the option is passed to the tool    No  default t rue   append   Value is appended to the value stored in   No  default false   the tool   s configuration file     syntax                           Although Ant buildfiles are case insensitive  the precise spelling of the option  name should be preserved for compatibility with t
239. termine your application architecture  including which components  are local objects and which components are remotely accessible  This step  includes     e Defining the remote interfaces  A remote interface specifies the meth   ods that can be invoked remotely by a client  Clients program to re   mote interfaces  not to the implementation classes of those interfaces   The design of such interfaces includes the determination of the types  of objects that will be used as the parameters and return values for  these methods  If any of these interfaces or classes do not yet exist   you need to define them as well     208 APPENDIX     FAQ     FREQUENTLY ASKED QUESTIONS    e Implementing the remote objects  Remote objects must implement  one or more remote interfaces  The remote object class may include  implementations of other interfaces and methods that are available  only locally  If any local classes are to be used for parameters or return  values of any of these methods  they must be implemented as well     Implementing the clients  Clients that use remote objects can be im   plemented at any time after the remote interfaces are defined  includ   ing after the remote objects have been deployed     Example source code demonstrating the use of Remote Method Invocation  is provided with the JamaicaVM distribution  See    3 4     Q  Does Jamaica support RMI     A         is supported by Jamaica 6 0     JamaicaVM 6 0 uses dynamically generated stub and skeleton classes  So  no pre
240. the specified environment variable  If this variable is not  set  the stack size specified using  nativeStackSize n will be used     Option  numThreadsFromEnv var    The numThreadsFromEnv option enables the application to read the number  of threads from the specified environment variable  If this variable is not set  the  number specified using  numThreads n will be used     Option  maxNumThreadsFromEnv var    The maxNumThreadsFromEnv option enables the application to read the max   imum number of threads from the environment variable specified within  If this  variable is not set  the number specified using  maxNumThreads n will be  used     Option  numJniAttachableThreadsFromEnv var    The numJniAttachableThreadsFromEnv option enables the application  to read its initial number of JNI attachable threads from the environment variable  specified within  If this variable is not set  the value specified using the option   numJniAttachableThreads n will be used     Option  finalizerPriFromEnv var    The finalizerPriFromEnv option enables the application to read its final   izer priority from the environment variable specified within  If this variable is not  set  the finalizer priority specified using finalizerPri n will be used           Option  priMap      j p sp   jp sp      Java threads are mapped directly to threads of the operating system used on the  target system  The Java priorities are mapped to system level priorities for this    162 CHAPTER 14  THE JAMAICA BUILDER  
241. tible  so that more urgent threads can become active    The implementation of a realtime garbage collector must solve a number of  technical challenges  Garbage collector activity must be performed in very small  single increments of work  In JamaicaVM  one increment consists of garbage  collecting only 32 bytes of memory  On every allocation  the allocating thread     pays    for the memory by performing a small number of these increments  The  number of increments can be analyzed  such that this is possible even in realtime  code    The RTSJ provides a powerful extension to the Java specification  Its full  power  however  is achieved only by the combination with a realtime garbage  collector that helps to overcome its restrictions     10 3 Relaxations in JamaicaVM    Because JamaicaVM uses a realtime garbage collector  the limitations that the  Real Time Specification for Java imposes on realtime programming are not im   posed on realtime applications developed for JamaicaVM  The limitations that are  relaxed in JamaicaVM affect the use of memory areas  thread priorities  runtime  checks and static initializers    For the development of applications that do not make use of these relaxations   the builder option st rictRTSJ  see below  can be set to disable these relax   ations     10 3 1 Use of Memory Areas    Because JamaicaVM s realtime garbage collector does not interrupt application  threads  it is unnecessary for objects of class RealtimeThread or even of  NoHeapRealt
242. ting code for target    linux x86     optimisation    speed       PKG  V2562a85066f42947   c  Lez    caffeine compiled _       caffeine compiled  h  Class file compaction gain  74 97414   21665933    gt  5422087      C compiling  caffeine compiled _      Lead    caffeine compiled  nc o    linking    stripping  Application memory demand will be as follows     initial max  Thread C stacks  1024KB    8  128KB  63MB    511   128KB   Thread Java stacks  128KB    8  16KB  8176KB    511   16KB   Heap Size  2048KB 256MB  GC data  128KB 16MB  TOTAL  3328KB 343MB     gt  ls  s caffeine_compiled  45182172 caffeine_compiled    The performance of the compiled version is significantly better than the inter   preted version  However  there is only a small difference compared to the version  created using the profile as described in the        gt    caffeine_compiled   Sieve score   15508  98   Loop score   64680  2017   Logic score   77315  0   String score   6420  708   Float score   20781  185   Method score   12887  166650   Overall score   22602    For a better performance of a fully compiled application  compile can of course  be combined with the appropriate C compiler optimization level as shown in    87 1 2     7 2  OPTIMIZING RAM MEMORY DEMAND 67    7 2 Optimizing RAM Memory Demand    In many embedded applications  the amount of RAM memory required is even  more important than the application performance and its code size  Therefore  a  number of means to control the applications R
243. tion   file      classpath     cp       lt classpath gt     bootclasspath       Xbootclasspath       lt classpath gt     classname        class     class     classl        classn                    16 2 1 General    These are general options providing information about jamaicah itself     Option  help    help   h         Display the usage of the jamaicah tool and a short description of all possible stan   dard command line options     16 2  THE JAMAICAH COMMAND 195    Option  Xhelp    Display the usage of the jamaicah tool and a short description of all possible stan   dard and extended command line options  Extended command line options are  not needed for normal control of the jamaicah command  They are used to con   figure tools and options and to provide tools required internally for Jamaica VM  development     Option  jni    Create Java Native Interface header files for the native declarations in the provided  Java class files  This option is the default and hence does not need to be specified  explicitly     Option  d directory    Specify output directory for created header files  The filenames are deduced from      and the extension    ee        the full qualified Java class names where         are replaced by      h  1s appended     Option  ozfile    Specify the name of the created header file  If not set the filename is deduced from      and the extension         5    the full qualified Java class name where         are replaced by      h  1s appended     Option  inc
244. tion of different  objects or arrays are shown in Tab    The output of numblocks when using the  a11 option can be used to get a  quick overview on the number of blocks for all classes used by an application        numblocks  all HelloWorld    Class  Blocks   HelloWorld 1  com aicas jamaica AccessCheck 1  com aicas jamaica Archive 1  com aicas jamaica ArchiveSPathVisitor 1    88 CHAPTER 8  MEMORY MANAGEMENT CONFIGURATION                               Class numblocks  new java util Vector   1  new boolean 1024  5  new byte 64  3  new char 256  19  new int 1024  147  new Object 1000000  142 860                   Table 8 1  Typical numbers of blocks for objects    com aicas jamaica ArchiveSVisitor  com aicas jamaica ArchiveDirectory  com aicas jamaica ArchiveEntry  com aicas jamaica BuilderError  com aicas jamaica DirectoryEntry  com aicas jamaica NYIException  com aicas jamaica lang CpuTime  com aicas jamaica lang Debug  com aicas jamaica lang LowLevelRTSJ  com aicas jamaica lang Process  com aicas jamaica lang Profile  com aicas jamaica lang Profile 1  com aicas jamaica lang Profile 2  com aicas jamaica lang Profiles3  com aicas jamaica lang ProfileSCount  com aicas jamaica lang Wait  com aicas jamaica util False  com aicas java net protocol rom Handler  com aicas java net protocol rom RomURLCnctn    Eos    Ea Ra Ba ka      aou        Bao          NON ON             Chapter 9  Debugging Support    Jamaica supports the debugging facilities of integrated development environments
245. tion specifies a file to read the set of options used to  build the application  The option format must be identical to the one in the default  configuration file  jamaica home target platform etc jamaica conf    When set  the files jamaica home    jamaica jamaica conf and jamaica   home  target platform etc jamaica conf are ignored     14 2 2 Classes  files and paths    These options allow to specify classes and paths to be used by the builder     Option  classpath   cp      classpath    The classpath option specifies the paths that are used to search for class files   A list of paths separated by the path separator char          on Unix systems          on  Windows  can be specified  This list will be traversed from left to right when the    Builder tries to load a class     Option  enableassertions   ea     The enableassertions option enables assertions for all classes  Assertions  are disabled by default     Option    main class    The main option specifies the main class of the application that is to be built   This class must contain a static method void main String   args   This  method is the main entry point of the Java application    If the main option is not specified  the first class of the classes list that is  provided to the Builder is used as the main class        Option  jarzfile    The jar option specifies a JAR file with an application that is to be built  This  JAR file must contain a MANIFEST with a Main Class entry        Option  includeClasses     class
246. uaranteed that the finalizer thread will not starve        8 1  CONFIGURATION FOR SOFT REALTIME APPLICATIONS 77    system performance may be improved by running the finalizer thread at a lower  priority  Then  a higher priority thread that performs memory allocation will not  be preempted by finalizer thread execution    This priority can be set to a lower value using the option finalizerPri  of the builder or the environment variable JAMAICAVM FINALIZERPRI  In  an application that has sufficient idle CPU time in between urgent activities  a  finalizer priority lower than the priority of all other threads may be sufficient                          8 1 4 Reserved memory    JamaicaVM   s default behavior is to perform garbage collection work at memory  allocation time  This ensures a fair accounting of the garbage collection work   Those threads with the highest allocation rate will perform correspondingly more  garbage collection work    However  this approach may slow down threads that run only occasionally and  perform some allocation bursts  e g   changing the input mask or opening a new  window in a graphical user interface    To avoid penalizing these time critical tasks by allocation work  JamaicaVM  uses a low priority memory reservation thread that runs to pre allocate a given  percentage of the heap memory  This reserved memory can then be allocated  by any allocation bursts without the need to perform garbage collection work   Consequently  an application with bursts
247. uld  send    IP Address The IP address of the run time system    Port The Port where the runtime system should be contacted   see 815 1     Buffer Size The amount of memory that is allocated within the run   time system to store event data during a period    Sample Period   The period length between sending data    Start Recording   When pressed connects the ThreadMonitor to the run   time systems and collects data until pressed again        Table 15 1  Threadmonitor Controls    e User events contain user defined messages and can be triggered from Java  code     e Allocated memory gives an indication of the amount of memory that is cur   rently allocated by the application  The display is relatively coarse  changes  are only displayed if the amount of allocated memory changes by 64kB  A  vertical line gives indicates what thread performed the memory allocation  or GC work that caused a change in the amount of allocated memory     When ThreadMonitor is started it presents the user a control window Fig     15 21 Control Window Menu    The control window s menu permits only three actions     File Open       This menu item will open a file requester to load previously recorded sched          data that was saved through the data window s    File Save as       menu item     see 5 15 3 2  File Close    Select this menu item will close the control window  but it will leave all other  windows open     184    CHAPTER 15  THE JAMAICA THREADMONITOR       File  Event classes              
248. umblocks command  They are used  to configure tools and options to provide tools required internally for Jamaica VM  development     Option  version    Prints the version of the Jamaica Builder Tool and exits     Option  verbose   Set verbose level  If verbose level is greater than 0  additional output on the state  of the build process is printed to standard out    Option  showSettings   The currently used options of Jamaica Numblocks are written to stdout in  property file format  To make these the default settings  copy these options into  jamaica home   et c   numblocks conf    Option  saveSettings file   The currently used options of Jamaica VM Numblocks are written to stdout in  property file format  To make these the default settings  copy these options into  jamaica home   et c   numblocks conf   Option  configuration file    The set of options used to perform numblocks are read from the provided file   The format used to define options must be identical to the default configuration  file jamaica home   et c  numblocks conf     17 1 2 Classes  files  and paths    These options allow to specify classes and paths to be used by numblocks     Option  a11    If this option is set  the number of blocks required for the allocation of objects of  all classes in this application will be displayed     17 2  ENVIRONMENT VARIABLES 199    Option  classpath   cp      classpath    Specifies the paths that are to be used to search for class files  A list of paths    66 99    separate
249. used by legacy code    The advantage of a limited and short execution time for entering a priority ceil   ing monitor  working on a shared resource  then leaving this monitor are  however   lost when a thread that has entered this monitor may block  Therefore the system  designer should restrict the use of priority ceiling monitors to short code sequences  that only access a shared resource and that do not block  Entering and exiting the    11 6  LIBRARIES 123    monitor can then be performed in constant time  and the system ensures that no  thread may try to enter a priority ceiling monitor that is held by some other thread    Since priority ceiling emulation requires adjusting a thread   s priority every  time a monitor is entered or exited  there is an additional runtime overhead for this  priority change when using this kind of monitors  This overhead can be significant  compared to the low runtime overhead that is incurred to enter or leave a normal   priority inheritance monitor  In this case  there is a priority change penalty only  when a monitor has already been taken by another thread    Future versions of the Jamaica Java implementation may optimize priority  ceiling and avoid unnecessary priority changes  The JamaicaVM uses atomic code  sequences and restricts thread switches to certain points in the code  A synchro   nized code sequence that is protected by a priority ceiling monitor and that does  not contain a synchronization point may not require entering and 
250. versions only   Evaluation keys are provided with evaluation versions of JamaicaVM     3 3  JAMAICAVM DIRECTORY STRUCTURE 27    jamaica home                   bin  t  doc  t  build info  t  jamaicavm manual pdf    t  jamaica  api     README x    txt            RELEASE NOTES       t  UNSUPPORTED      tH         lib  license     target          l       linux x86       bin   etc  examples  include  lib   prof    Host tool chain executables  Comprehensive Jamaica distribution information    Jamaica tool chain user manual  this manual   Jamaica API specification  Javadoc    Host platform specific documentation starting points  User relevant changes in the present release  Unsupported features list   Tool documentation in Unix man page format   Host platform configuration files   Libraries for the development tools   aicas evaluation license  third party licenses    Target specific files for the target Linux x8 6  Virtual machine executables  some platforms only   Default target platform configuration files  Example applications   System JNI header files   Development and runtime libraries  resources  Default profiles    Table 3 1  JamaicaVM Directory Structure    28 CHAPTER 3  GETTING STARTED    API specification of the selected Jamaica runtime environment  The Real Time  Specification for Java is part of the standard Jamaica API    The number of target systems supported by a distribution varies  The target  directory contains an entry for each supported target platform  Typically
251. vious call to xmic is needed to generate those     If the Builder is used to create RMI server applications  the exported inter   faces and implementation classes need to be included     An example build file demonstrating the use of RMI with Jamaica is pro   vided with the JamaicaVM distribution  See Tab     A 4 Builder    Q  When I try to start a Jamaica compiled executable in a Linux 2 4 x environ   ment  I get an error message like the following       alloc pages  0            allocation failed  gfp 0x1d0 0   from c0123886       A  This is a bug in the Linux 2 4 10 kernel  Please use a newer kernel version   The problem seems to occur if the amount of allocated memory is close  to the amount of available memory  which is usually no problem if you  use Jamaica on a desktop PC  but occurs quite often on embedded systems  running Linux 2 4 10 and Jamaica  e g   the DILNet PC      Q  When I try to compile an application with the Builder I get the error message  OUT OF MEMORY  What can I do     A 4  BUILDER 209    A  The Builder has a predefined setting for the internal heap size  If the memory    space is exhausted  the error message OUT OF MEMORY is printed and  Builder exits with an error code  The predefined heap size  1024MB  is  usually large enough  but for some applications it may not be sufficient  You  can set the heap size via the environment variable JAMAICA BUILDER  HEAPSIZE  e g   under bash with the following command                                         expor
252. was built with an incorrect or outdated  heapSize argu   ment     e A bug in the application may be causing a memory leak and gradual use of  more memory than expected     Whatever the reason  it may be important in some environments to understand  the behavior of memory management in the case the application exceeds the as   sumed heap usage    In dynamic mode  the worst case execution time for an allocation can no  longer be guaranteed as soon as the application uses more memory  But as long  as the excess heap used stays small  the worst case execution time will increase  only slightly  This means that the original worst case execution time may not be  exceeded at all or only by a small amount  However  the garbage collector will  still work properly and recycle enough memory to keep the application running    If the constant garbage collection work option is chosen  the amount of garbage   collection work will not increase even if the application uses more memory than  originally anticipated  Allocations will still be made within the same worst case  execution time  Instead  the collector cannot give a guarantee that it will recycle  memory fast enough  This means that the application may fail abruptly with an    86 CHAPTER 8  MEMORY MANAGEMENT CONFIGURATION    out of memory error  Static mode does not provide graceful degradation of per   formance in this case  but may cause abrupt failure even if the application exceeds  the expected memory requirements only slightly   
253. with Jamaica    On the right hand side of the window  IP address and port of the VM to be  monitored may be entered    The following list gives a short overview on which events data is collected     e Thread state changes record how the state of a thread changes over time  including which threads cause state changes in other threads     e Thread priority changes show how the priority changed due to explicit calls  to Thread setPriority   as well as adjustments due to priority in   heritance on Java monitors     e Thread names show the Java name of a thread     e Monitor enter exit events show whenever a thread enters or exits a monitor  successfully as well as when it blocks due to contention on a monitor     e GC activity records when the incremental garbage collector does garbage  collection work     e Start execution shows when a thread actually starts executing code after it  was set to be running     e Reschedule shows the point when a thread changes from running to ready  due to a reschedule request     e All threads that have the state ready within the JamaicaVM are also ready  to run from the OS point of view  So it might happen that the OS chooses  a thread to run that does not correspond with the running thread within the  VM  In such cases  the thread chosen by the OS performs a yield to allow a  different thread to run     15 2  CONTROL WINDOW 183                                     Name Value   Event classes Selection of event classes that the run time system sho
254. y    profile   168      reservedMemory   165   reservedMemoryFromEnv    resource   151      saveSettings   147    scopedMemorySize   167      scopedMemorySizeFromEnv    setFonts   152     setGraphics   152     setLocales  152     setProtocols    setTimeZones  152   showExcludedFeatures   155   showIncludedFeatures  155     showSettings     243     smart    source   130      sourcepath    ss  135   stopTheWorldGC      strictRTSJ    strictRTSJFromEnv   167     target    threadPreemption   159      timeSlice   159    tmpdir      useProfile  169   useTarget      verbose   147    version  195   198     x BIA   XavailableTargets   176    Xbootclasspath    Xcc   173     XCFLAGS     XdefineProperty   171   XdefinePropertyFromEnv    XenableDynamicJNILibraries   176    XenableZIP   172    XexcludeLongerThan   173    XextendedGlobalCPool    XfullStackTrace        Xhelp  H7  195  193    Xhelp     xhelp     XignoreLineNumbers   178    Xinclude     Xint     XjamaicaHome   171     XjavaHome   171     Xjs     XlazyConstantStrings   172    XlazyConstantStringsFromEnv     244     Xld     XLDFLAGS    Xlibraries   174    XlibraryPaths   175    XlinkDynamicFlags   175    XlinkDynamicPrefix  174    XlinkStatic    XlinkStaticFlags   175    XlinkStaticPrefix   175    XloadJNIDynamic   177    Xmi  135    Xms  135    Xmx   135     XnoClasses   172    XnoMain  172   XnoRuntimeChecks   175   Xns  136   XobjectFormat  177   XobjectProcessorFamily   177   XobjectSymbolPrefix   177    Xprof    XprofileFile
255. y  preemptive scheduling  but for realtime code  the use of Rea1t imeThread  is still recommended           AsyncEventHandlers vs  BoundAsyncEventHandlers    An alternative execution environment is provided through classes As yncEvent   Handler and BoundAsyncEventHandler  Code in an event handler is ex   ecuted to react to an event  Events are bound to some external happening  e g  a  processor interrupt   which triggers the event    AsyncEventHandler and BoundAsyncEventHandler are schedula   ble entities that are equipped with release and scheduling parameters exactly as  RealtimeThread and NoHeapRealtimeThread  The priority scheduler  schedules both threads and event handlers  according to their priority  Also  ad   mission checking may take the release parameters of threads and asynchronous  event handlers in account  The release parameters include values such as execu   tion time  period  and minimum interarrival time    One important difference from threads is that an AsyncEventHandler is  not bound to one single thread  This means  that several invocations of the same    120 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES    handler may be performed in different thread environments  A pool of preallo   cated RealtimeThreads is used for the execution of these handlers  Event  handlers that may execute for a long time or that may block during their execution  may block a thread from this pool for a long time  This may make the timely  execution of other event handlers impossi
256. y accesses  that  can be more expensive  20 50 machine instructions     The thread preemption must be at least 10 intermediate instructions     Option  timeSlice n    For threads of equal priority  round robin scheduling is used when several threads  are running simultaneously  Using the t imeSlice option  the maximum size of  such a time slice can be given in nanoseconds  A special synchronization thread  is used that waits for the length of a time slice and permits thread switching after  every time slice     160 CHAPTER 14  THE JAMAICA BUILDER    If no round robin scheduling is needed for threads of equal priority  the size  of the time slice can be set to zero  In this case  the synchronization thread is not  required  so fewer system resources are needed and the highest priority threads  will not be interrupted by the synchronization thread     Option  finalizerPri pri    The finalizerPri option sets the Java priority of the finalizer thread to pri   The finalizer thread is a daemon thread that runs in the background and executes  the method finalize    of objects that are about to be freed by the garbage  collector  The memory of objects that have such a method cannot be freed before  this method is executed        If the finalizer thread priority is set to zero  no finalizer thread will be cre   ated  In that case  the memory of objects that are found to be unreachable by the  garbage collector cannot be freed before their finalizers are executed explicitly by  calling
257. y allocation  the    11 4  MEMORY MANAGEMENT 113    Thread time       rtl        4 ON E OA           rt2                  H    M  rt3 TH IHH ENIM      rt4        JMiIB   LH   HEN            A              Figure 11 3  JamaicaVM provides realtime behavior for all threads     allocating thread    pays    for the memory by performing a small number of these  increments  The number of increments can be analyzed to determine worst case  behavior for realtime code     11 4 4 Memory Management of RTSJ    The RTSJ provides a powerful extension to the Java specification  Its full power   however  is achieved only by the combination with a realtime garbage collector  that helps to overcome its restrictions  Since JamaicaVM uses a realtime garbage  collector  it does not need to impose the limitation that the Real Time Specifica   tion for Java puts onto realtime programming onto realtime applications developed  with the JamaicaVM  The limitations that are relaxed in Jamaica VM affect the use  of memory areas  thread priorities  runtime checks  and static initializers     Use of Memory Areas    Since Jamaica s realtime garbage collector does not interrupt application threads   RealtimeThreads and even NoHeapRealtimeThreads are not required  to run in their own memory area outside the control of the garbage collector  In   stead  any thread can use and access the normal garbage collected heap     Thread priorities    In Jamaica  RealtimeThreads  NoHeapRealtimeThreads and normal  Java Thr
258. yword  PROFILE INVOKE Groups  builder       Values  1  number of calls from caller method to called method  2  bytecode position of the call within the method  3  signature of the caller method    4  signature of the called method       Keyword  PROFILE_INVOKE_CYCLES Groups  speed             Values  1  number of processor cycles spent in the called method  2  bytecode position of the call within the method  3  signature of the caller method    4  signature of the called method             Keyword  PROFILE_NATIVE Groups  all       Values  1  total number of calls to the native method  2  relative number of calls to the native method    3  signature of the called native method          Keyword  PROFILE NEWARRAY Groups  memory    Values    6 3  INTERPRETING THE PROFILING OUTPUT 55    1  number of calls to array creation within a method    2  bytecode position of the call within the method    3  signature of the method       Keyword  PROF     Values           LE THREAD Groups  memory  speed    1  current Java priority of the thread    2  total amount of CPU cycles in this thread    3  relative time in interpreted code    4  relative time in compiled code    5  relative time in JNI code    6  relative time in garbage collector code    7  required C stack size    8  required Java stack size       Keyword  PROF     Values           LE THREADS Groups  builder    1  maximum number of concurrently used threads       Keyword  PROF     Values              LE THREADS JNI Groups  builder 
259. zation of a  class  or the initialization has to be made explicit    The statements and expressions that cause the initialization of a class are    108 CHAPTER 11  REALTIME PROGRAMMING GUIDELINES    e reading a static field of another class     writing a static field of another class     calling a static method of another class  and    e creating an instance of another class using new     An explicit initialization of a class C is best performed in the static initializer of  the class D that refers to C  One way to do this is to add the following code to class  D            x initialize class C  x   static   C class initialize               The notation C class itself has its own disadvantages  see 8 11 2 5   So  if  possible  it may be better to access a static field of the class causing initialization  as a side effect instead        initialize class C       static   int ignore   C statioc field          11 2 5 Operations Causing Class Loading    Class loading can also occur unexpectedly  A reference to the class object of a  given class C can be obtained using classname   class as in the following code     Class class C   C class     This seemingly harmless operation is  however  transformed into a code sequence  similar to the following code     static Class class  String name      try   return Class forName name      catch  ClassNotFoundException e      throw new NoClassDefFoundError  e getMessage                        static Class class C     Class tmp   if  class C   
260. zer of the  class that uses the data and assigned to a static variable that is marked final   Due to the significant code overhead  large arrays should instead be loaded as a  resource  using the Java standard API  via method get ResourceAsStream  from class java lang Class      Autoboxing  JDK 1 5     Unlike some Scheme implementations  primitive types in Java are not internally  distinguishable from pointers  This means that in order to use a primitive data type  where an object is needed  the primitive needs to be boxed in its corresponding  object  JDK 1 5 introduces autoboxing which automatically creates objects for  values of primitive types suchas int  long  or float whenever these values are  assigned to a compatible reference  This feature is purely syntactic  An expression  such as         new Integer         can be written as        i    Due to the hidden runtime overhead for the memory allocation  autoboxing should  be avoided in performance critical code  Within code sequences that have heavy  restrictions on memory demand  such as realtime tasks that run in Immortal     Memory or ScopedMemory  autoboxing should be avoided completely since it  may result in hidden memory leaks        11 2  COMPUTATIONAL TRANSPARENCY 107    For Loop Over Collections  JDK 1 5     JDK 1 5 also introduces an extended for loop  The extension permits the itera   tion of a Collection using a simple for loop  This feature is purely syntactic   A loop such as    ArrayList list   new Array
261. zy linking is automatically disabled when st rict RTSJ is set  This avoids  runtime assignment errors due to lazily linked classes that may be allocated in a                      14 2  BUILDER USAGE 167    memory area that is incompatible with a current scoped memory allocation con   text when lazy linking is performed     Option  strictRTSJFromEnv var    The st rictRTSJFromEnv option enables the application to read its setting of  StrictRTSJ from the specified environment variable  If this variable is not  set  the value of the Boolean option strictRTSJ will be used  The value  of the environment variable must be 0  for  strictRTSJ false  or 1  for   strictRTSJ true      Option  immortalMemorySize n  K  M        The immortalMemorySize option sets the size of the immortal memory area   in bytes  The immortal memory can be accessed through the class javax   realtime ImmortalMemory    The immortal memory area is guaranteed never to be freed by the garbage  collector  Objects allocated in this area will survive the whole application run           Option  immortalMemorySizeFromEnv var       The immortalMemorySizeFromEnv option enables the application to read  its immortal memory size from the environment variable specified using this op   tion  If this variable is not set  the immortal memory size specified using the  option   immortalMemorySize will be used        Option  scopedMemorySize n              The scopedMemorySize option sets the size of the memory that should be  made
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
  標準カムクラッチ 取扱説明書  Procédure VHF Procédure en phonie    MCI 1141B MARINE ELECTRICIAN  KD-AVX44/KD  Samsung GN642FFXA User Manual  ViscoPump II  Manual de Instalação  New Vesta    Copyright © All rights reserved. 
   Failed to retrieve file