Java is a very powerful programming language and offers a large and complex library. Only a subset of the standard library is supported on the target to keep a small memory footprint and maintain a high performance.
The type long consists of 8 bytes and cannot be handled by a 32-bit architecture directly. Though all manipulations of this type are handled correctly by our compiler it is less efficient than working with 32 bit types where most basic calculations can be done in one or few clock cycles.
Make sure that you reuse ojects! That is particularly necessary for fast control application. In such cases it's advisable to instantiate all objects needed in an initalization section. These objects will then be reused. This practice ensures that the runtime behaviour of a control task is minimal and predictable. It also makes garbage collection obsolete.
Many methods in the standard library create strings. As a example:
java/lang/Integer.toHexString create a new string object every time the are called. This first takes a considerable time and creates garbage. Do not use such methods if not absolutely necessary. For printing to serial output devices, it's much more efficient to use the methods in
java/io/PrintStream. They reuse existing strings.
Generally speaking, interrupts should not be used by an application. Use tasks to meet certain timing requirements. Interrupts can be and are in fact used by low-level drivers e.g. for serial communication.