Java编译优化和性能

标签 java arrays compiler-optimization

 public static void main(String[] args) {
     double [] boxes;
        boxes = new double[]  {20, 10, 5, 40, 20, 41, 41, 2, 6, 7, 3, 4, 5, 6, 23, 34, 7, 8, 2, 2};
        double heaviest = 0;
        double normal = 0;
        double heavy = 0;
        double totalCost;
        double a = 0;
        double b = 0;
        int repeatCount=0;

        for (int i = 1; i < boxes.length; i++) {
            if (boxes[i] > heaviest)
                heaviest = boxes[i];
        }

        for(double element: boxes) {
            if(element==heaviest) {
                repeatCount = repeatCount+1;
            }
        }

        System.out.println("Count :" +repeatCount);

        for (int j =0; j<boxes.length; j++) {
            if (boxes[j] < heaviest) {
                a = boxes[j] * 2;
                normal = normal+a;
            } else {
                b =  (boxes[j] * 3.5);
                heavy = heavy+b;
            }
        }
        totalCost = normal+heavy;
        System.out.println("total cost of the insuranse is  "+ totalCost);
    }

第 1 部分:我需要将最大元素乘以 3.5,然后乘以 2,然后添加该值以获得总计。

第 2 部分: 我还想要最大元素出现的次数。 或者我们还可以将最大的元素存储在另一个数组中。

在我的代码中,我完成了第 1 部分,对于第 2 部分,我正在计算最大元素出现的次数。

我的问题:

如果元素超过 1000,是否有其他方法可以减少编译时间或进一步优化代码?

我还尝试通过将数组转换为列表来使用Collections.Frequency(myArray,largestElement)

最佳答案

一如既往,正确性比性能更重要。

不知道为什么它在寻找最重的盒子时会忽略第一个盒子。

您可以减少代码,但最大的问题是您的代码运行时间不够长,无法被 JIT 编译。即便如此,与 Java 的启动成本相比,它也很小。

简而言之,除非你的程序持续几百毫秒,否则我不会担心性能。

顺便说一句,您可以使用单个循环来使代码更短,但就像我说的那样,在这种情况下不会有太大区别。

这就是我可能会写的方式。

double[] boxes = {20, 10, 5, 40, 20, 41, 41, 2, 6, 7, 3, 4, 5, 6, 23, 34, 7, 8, 2, 2};
double heaviest = -1;
int count = 0;
double sum = 0;
for (double box : boxes) {
    sum += box;
    if (box > heaviest) {
        count = 1;
        heaviest = box;
    } else if (box == heaviest) {
        count++;
    }
}

// double total = sum * 2 - heaviest * count * 2 + heaviest * count * 3.5;
double total = sum * 2 + heaviest * count * 1.5;
System.out.println("total: " + total);

注意:只有一个循环。您可以随时计算出计数和总和。

关于Java编译优化和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32079115/

相关文章:

assembly - 为什么窥孔优化是针对汇编代码而不是 IR 代码进行的?

java内存不足错误-堆空间

java - mysql 连接器 J 版本 8 不适用于 JPA eclipse 实体生成

Java 如何搜索用户输入是否等于我的数组中的某些内容

c++ - 编译优化问题

c - 为什么我的阶乘程序可以运行,但我几乎相同的 pow 程序却无法运行?

java - 在 GWT 应用程序中处理授权

java - 如何使用java在windows中搜索文件

php - 根据其值在 php 中重构多维数组

C++ 数组大小声明和常量