java虚拟机——它是如何分配资源的?

标签 java jvm streaming continuous

我正在测试支持连续查询的数据流系统的性能。

它是这样工作的: - 有一个向我的系统发送数据的轮询服务。 - 当数据传入系统时,每个查询都会根据当前时间的流窗口进行评估。 - 窗口随着数据传入而滑动。

我的问题是,当我向系统添加更多查询时,我预计吞吐量会降低,因为它无法处理数据速率。

但是,我实际上观察到吞吐量增加

我不明白为什么会这样,我猜测这与 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/

相关文章:

java - 如何通过 JNI 调用 Java 方法,让 JVM 垃圾收集参数?

java - JVM较高的分配率会导致性能影响吗?如何

c - 处理流媒体服务器

javascript - 如何使用 javascript 识别唯一设备?

java - 包注释应该位于文件 package-info.java 中

java - 使用 ASM 字节码修改库验证实现方法代理的错误

java - 单击 PLAY 按钮 1 次时如何逐个播放所有音频文件

java - Oop Maps 在 Hotspot VM 中到底意味着什么

php - 使用BLOB VS OS文件系统mysqlt二进制存储: large files,大量,大问题

java - 目标文件夹存在,但仍然出现找不到文件的错误,这可能是什么原因?