Hi,
1. It's cached inside the Activiti Engine.
2. If you have multiple JVMs it also should be no problem as-is. The Activiti Engine runs all the synchronous elements of a process definition in one go.
When for example a user task is encountered, the process state is stored to the database, including its variables.
Then when the user task is completed and the process instance continues, the process execution and variables are retrieved from the database or the cache.
3. It's available only on JVM1 at first, but when the process instance is persisted it's of course available to all JVMs.
4. Do you see performance issues for your usage? Activiti is pretty fast already, and is scalable to multiple JVMs out-of-the-box, so why would you want to add another cache?
Best regards,