gpt4 book ai didi

java - 在 IDE 上运行的 JVM 比在命令行上运行需要更多的处理能力

转载 作者:行者123 更新时间:2023-12-01 18:43:29 24 4
gpt4 key购买 nike

我遇到了一个非常令人沮丧的问题。我使用 IDE 来开发我的应用程序。我通过 IDE 中的执行时间来监控性能,但不幸的是,当我将类导出到 Jar 文件时,它在命令行上的运行速度慢了 7 倍。我检查了 JVM 并确保相同的 JVM 链接到两个执行。为命令行分配了更多堆内存。

后来,我使用了进程性能监控工具并同时运行了两个应用程序(在 CMD 和 IDE 上)。我注意到,除了 CPU 功率之外,这两个进程在所有方面都是相同的。在 IDE 上运行的进程大约占用 19%-23% 的 CPU 使用率,而在 CMD 上运行的进程大约占用 6%-11% 的 CPU 使用率。这可以解释为什么在 IDE 上运行需要更少的时间。

为了让应用更加清晰,下面是占用大部分时间的代码

                         for (Call call: calls {

CallXCD callXCD = call.getCallXCD();
if(callXCD.isOnNet()){
System.out.println("OnNet");
}
else if (callXCD.isXNet()){
System.out.println("XNet");

}
else if (callXCD.isOthers()){
System.out.println("Others");

}
else if (callXCD.isIntra()){
System.out.println("Intra");
}
else {
System.out.println("Not Known");
}
}

CallXCD 是一个包含多个字符串变量和多个方法(如 isOnNet 和 isXNet)的对象。这些方法对对象的字符串应用compareTo()方法,并根据比较结果返回true或false。

我通过打印每次迭代所花费的时间来分析这段代码。在 IDE 中,每次迭代大约花费 0.007 毫秒,而在命令行中运行 jar 文件,大约花费 0.2 毫秒。因为我的代码需要大约 400 万次迭代,所以对性能的负面影响非常显着

为什么会发生这种情况?有没有办法像内存参数一样为 JVM 分配更多的处理能力。

IDE on Right - CMD on Left

最佳答案

(在评论中进行对话后。)

这似乎是由于命令行和 IDE 中处理控制台输出的方式不同所致。它们在自动滚动、缓冲区大小等方面的表现可能非常不同。

通常,在对代码进行基准测试时,最好将您真正感兴趣的代码与可能干扰结果的任何诊断输出隔离开来。如果您绝对必须包含诊断输出,将其写入文件(可能在 RAM 磁盘上)可以帮助减少控制台实现之间的差异。

关于java - 在 IDE 上运行的 JVM 比在命令行上运行需要更多的处理能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18952782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com