可以减慢Java虚拟机的时间吗?

时间:2011-05-01 21:21:29

标签: java time vmware zen

是否可以通过修改OpenJDK的源代码来根据CPU使用情况减慢Java虚拟机的时间?我有一个网络模拟(Java到ns-3),它​​消耗实时,松散地与挂钟同步。但是,因为我在模拟中运行了这么多客户端,所以CPU使用率达到100%并且不能保证模拟器中的事件应该花多长时间来处理(即大量的超后期事件)。因此,当存在大量网络流量时,模拟在大约40个节点处最高,即使这样,它也有点不确定。理想的解决方案是根据CPU减慢时间,但我不知道如何成功地做到这一点。较小的解决方案是将时间减慢一些倍数(时间镜头?)。

如果有人可以提供一些指导,相关文件(适用于Windows)的源代码位于http://pastebin.com/RSQpCdbD。我已经尝试修改文件的某些部分,但我的结果并没有真正成功。

提前致谢,
克里斯

2 个答案:

答案 0 :(得分:1)

您可以查看VirtualBox,从命令行允许Accelerate or slow down the guest clock

答案 1 :(得分:0)

我不完全确定这是否是您想要的,但是使用Joda-time库可以完全停止时间。因此,在Joda-time内调用新的Date()或新的DateTime()将不断返回相同的时间。

所以,你可以通过这个电话在一个线程“停止时间”:

DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis());

然后你的线程可以睡觉,比如5000ms,然后调用:

// advance time by one second
DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis() + 1000);

因此,如果您的应用程序正在根据系统内的时间执行任何操作,这将通过每5秒设置一秒的时间来“减慢”时间。

但是,正如我所说......我不确定这会在您的环境中发挥作用。