Aside from performance and scalability, we have mentioned various benefits of the JiST design throughout the explanations. For reference, we summarize these advantages below.
| application-oriented benefits | ||
| type safety | - | source and target of simulation events are statically type-checked by the compiler, eliminating a large class of errors |
| event types | - | numerous constants and the associated type-casting code are not required; events are implicitly typed |
| event structures | - | numerous data structures used to carry event payloads and the associated event marshalling code can be eliminated; event payloads are implicitly marshalled |
| debugging | - | event dispatch location and source entity state are available during event processing; can generate event causality trace to determine the origin of a faulty event |
| language-oriented benefits | ||
| reflection | - | allows script-based simulation configuration, debugging and tracing in a manner that is transparent to the simulation implementation |
| safety | - | allows for an object-level isolation of state between entities; ensures that all simulation time calls pass through the kernel; allows sharing of immutable objects; provides flexibility in entity state aggregation |
|
garbage collection |
- | memory for objects with long and variable lifetimes, such as network packets, is automatically managed; facilitates memory savings through sharing of immutable objects; avoids memory leaks and the need for complex memory protocols |
| Java | - | JiST reuses the standard language, libraries, compiler and runtime |
| system-oriented benefits | ||
|
inter-process communication |
- | since entities share the same process space, we pass a pointer and there is no serialization; there is also no context switch required |
|
Java-based kernel |
- | allows cross-layer optimization between kernel and running simulation for faster event dispatch and system calls |
| robustness | - | strict Java verification ensures that simulations will not crash; garbage collection protects against memory leaks over time |
| rewriting | - | operates at the bytecode level; does not require source-code access |
| concurrency | - | simulation object model and execution semantics support parallel and optimistic execution transparently with respect to the application |
| distribution | - | provides a single system image abstraction that allows for dynamic entity migration to balance load, memory or network load |
| hardware-oriented benefits | ||
| portability | - | pure Java: ``runs everywhere'' |
| cost | - | runs on COTS clusters (NOW, grid, etc.), as well as more specialized architectures |