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

标签 java eclipse jar jvm executable-jar

我遇到了一个非常令人沮丧的问题。我使用 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/

相关文章:

java - 切换按钮同时更改 TextView

java - 如何从java代码中使用rdfcat

java - 获取二维 map 图 block 的直角坐标

java - Eclipse - Java 数组 ID 值相等。无法独立更改值

java - 将应用程序连接到 postgres 数据库

java - 在eclipse中使用java访问mysql数据库

android - Eclipse Android DDMS - 位置控制手册字段已禁用

eclipse - 如何在gradle文件夹中下载jar文件和pom文件?

java - 获取 java 程序运行时的当前堆栈跟踪

java - 使用 JDK 和/或 JRE 提供的工具,有没有办法查看给定 JAR 的 list 文件?