Arrays are assumed to be instances of java.lang.Object . This may hurt performance somewhat, but it saves space. A general theme of TinyVM's design is to place footprint considerations before performance. Each thread object has a pointer to the next thread in a global list of threads. Time-slicing is actually not the technique of choice.
Scheduling is done based on number of opcodes executed.
The reason for this design choice is mainly simplicity, but also to make sure that certain operations are atomic as far as programs are concerned. Currently, the number of opcodes that a thread is allowed to execute before it's preempted is 128. This is based on an educated guess of what may be acceptable, but seems to work fairly well. If the number of created threads reaches 255, the system will throw an OutOfMemoryError error. Synchronization Synchronization is supported, except for static synchronized methods.