我正在测试支持连续查询的数据流系统的性能。
它是这样工作的: - 有一个向我的系统发送数据的轮询服务。 - 当数据传入系统时,每个查询都会根据当前时间的流窗口进行评估。 - 窗口随着数据传入而滑动。
我的问题是,当我向系统添加更多查询时,我预计吞吐量会降低,因为它无法处理数据速率。
但是,我实际上观察到吞吐量增加。
我不明白为什么会这样,我猜测这与 JVM 分配 CPU、内存等的方式有关。
任何人都可以阐明我的问题吗?
最佳答案
大多数 Java 虚拟机最初会解释 JVM 字节码,这比 native 机器码的执行速度稍慢。当 JVM 发现您正在重复使用代码的特定部分时,它会将该代码部分编译为 native 机器代码(提高其处理速度)。因此,有时对代码进行压力测试,甚至让代码运行更长时间,往往会加快执行速度而不是减慢速度。 HotSpot JVM(来自 SUN 的默认 JVM)是最著名的 JVM,它执行 native 编译以加速代码执行。
此外,与您过去可能遇到的一些库相比,许多 Java 库已经非常成熟。这意味着他们可能不会分配线程来处理请求,而是在套接字上使用非阻塞监听器、可重新分配的工作线程的线程池或任何适合高吞吐量处理的技术。这与 JIT(类似 HotSpot)JVM 的 self 调优相结合,使得 Java 基准测试成为一项相当大的挑战。一般来说,事物运行的时间越长,速度往往会变得越快,直至达到一定程度。
关于java虚拟机——它是如何分配资源的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2962244/