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 |