我的 Java 程序目前遇到了奇怪的行为:
该程序是一个 JavaFX 桌面应用程序,它使用本地 Selenium 独立服务器打开 Web 应用程序、进行一些输入并下载 Excel 文件。它读取 Excel 文件并将其与另一个 Excel 工作表进行比较并标记差异。
它正在工作,我面临的问题是,生成的 JAR 运行速度比我从 Eclipse 启动项目时慢。唯一显着的性能差异是当我将 Excel 工作表与 Apache POI 进行比较时。
我将问题范围缩小到 JRE - 如果我启动 Jar,它会使用 32 位 JRE,如果我从 Eclipse 启动,它会使用 64 位 JDK。
我用 JConsole 监控了这两个进程,32 位上的 Jar 几乎用了 20 分钟,而 64 位只花了大约 30 秒。
Apache Poi在32位系统上有什么问题吗?或者您对如何更好地监控并找到显着性能的瓶颈有什么想法、建议吗?
最佳答案
尝试代替 JConsole Java Mission Control与 Flight Recorder收集性能指标。这应该可以帮助您了解瓶颈在哪里,例如CPU 与网络。最常见的性能问题是堆内存不足,垃圾收集器难以释放它(例如频繁的 OldSpace full GC 周期)。
检查许可证,看看是否可以使用它,据我记得它在开发、非生产环境中是免费的,但最近随着该工具开源,许可证发生了变化。
关于32 位 jvm 上的 Java 程序比 64 位慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50346317/