Чтобы запустить что-то в новом экземпляре JVM, вы можете
try {
Runtime.getRuntime().exec("java <another class to run in the new JVM instance>")
}
catch(Exception e) {
// handle the exception
}
затем сохраните его состояние и возобновите в какой-то момент, предоставив последнее состояние.
Кроме того, чтобы программно «приостановить» выполнение, вы должны запустить класс, который вы хотите приостановить в какой-то момент в отдельном потоке (это не должен быть процесс (новый экземпляр JVM), чтобы его приостановить) и перевести его в режим сна на некоторое время. С точки зрения ресурсов подход с потоками лучше, но имейте в виду, что процесс имеет ограниченный объем доступной памяти (и много потоков потребляют ее много), поэтому вам, вероятно, потребуется увеличить этот объем.