Можно замедлить время простоя в виртуальной машине Java?
Вопрос
Можно ли замедлить время в виртуальной машине Java в соответствии с использованием процессора путем изменения исходного кода OpenJDK? У меня есть сетевая моделирование (Java to NS-3), которая потребляет в реальном времени, синхронизируется свободно до стен. Однако, поскольку я управляю так много клиентов в моделировании, использование процессора достигает 100%, а жесткие гарантии не поддерживаются в отношении того, как длины события в симуляторе должны предпринять для обработки (то есть, большое количество супер-лаковских событий). Следовательно, моделирование превышает около 40 узлов, когда есть много сетевого трафика, и даже тогда это немного замораживает. Идеальным решением было бы замедлить время в соответствии с процессором, но я не уверен, как сделать это успешно. Меньшее решение состоит в том, чтобы просто замедлить время на несколько многократных (время линзирования?).
Если кто -то может дать некоторое руководство, исходный код для соответствующего файла, вопроса (для Windows), находится в http://pastebin.com/rsqpcdbd. Анкет Я пытался изменить некоторые части файла, но мои результаты не были очень успешными.
Заранее спасибо,
Крис
Решение
Вы можете посмотреть на VirtualBox
, что позволяет один Ускорить или замедлить гостевые часы из командной строки.
Другие советы
Я не совсем уверен, это то, что вы хотите, но с Joda-Time Библиотека вы можете полностью остановить время. Таким образом, вызовы в новую дату () или New DateTime () в Joda-Time постоянно вернется в то же время.
Итак, вы могли бы, в одной ветке «время остановки» с этим вызовом:
DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis());
Затем ваша ветка может спать, скажем, 5000 мс, а затем позвонить:
// advance time by one second
DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis() + 1000);
Таким образом, если приложение делает все, что делает, в зависимости от времени в системе, это «замедлит» время, устанавливая время вперед на одну секунду каждые 5 секунд.
Но, как я сказал ... Я не уверен, что это будет работать в вашей среде.