1

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

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

在此先感谢,
克里斯

4

2 回答 2

1

您可能会查看VirtualBox,它允许从命令行加速或减慢访客时钟。

于 2011-05-01T23:19:54.770 回答
0

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

因此,您可以通过此调用在一个线程“停止时间”中:

DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis());

然后你的线程可以休眠 5000 毫秒,然后调用:

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

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

但是,正如我所说......我不确定这是否适用于您的环境。

于 2011-05-01T21:32:25.290 回答