相关疑难解决方法(0)

Java Math.min/max性能

编辑:maaartinus给出了我正在寻找的答案,而tmyklebu关于这个问题的数据帮助了很多,所以谢谢两者!:)

我已经阅读了一些关于HotSpot如何在代码中注入一些"内在函数"的内容,特别是对于Java标准Math libs(来自这里)

所以我决定尝试一下,看看HotSpot可以直接做出多大的反对(特别是因为我听说min/max可以编译成无分支的asm).

    public static final int max ( final int a, final int b )
{
    if ( a > b )
    {
        return a;
    }

    return b;
}
Run Code Online (Sandbox Code Playgroud)

这是我的实施.从另一个SO问题我已经读过,使用三元运算符使用额外的寄存器,我没有发现在执行if块和使用三元运算符之间存在显着差异(即返回(a> b)?a:b).

分配一个8Mb的int数组(即200万个值)并随机化它,我做了以下测试:

try ( final Benchmark bench = new Benchmark( "millis to max" ) )
    {
        int max = Integer.MIN_VALUE;

        for ( int i = 0; i < array.length; ++i )
        {
            max = OpsMath.max( max, array[i] );
            // max = Math.max( max, array[i] );
        } …
Run Code Online (Sandbox Code Playgroud)

java math performance max min

24
推荐指数
1
解决办法
6142
查看次数

为什么内联函数的效率低于内置函数?

我正在InterviewBit上尝试关于数组的问题.在这个问题中,我创建了一个内联函数,返回整数的绝对值.但有人告诉我,我的算法在提交时效率不高.但当我改为使用abs()C++库时,它给出了正确的答案判决.

这是我的功能得到了一个低效的判决 -

inline int abs(int x){return x>0 ? x : -x;}

int Solution::coverPoints(vector<int> &X, vector<int> &Y) {
    int l = X.size();
    int i = 0;
    int ans = 0;
    while (i<l-1){
        ans = ans + max(abs(X[i]-X[i+1]), abs(Y[i]-Y[i+1]));
        i++;
    }
    return ans;
}
Run Code Online (Sandbox Code Playgroud)

这是得到正确答案的那个-

int Solution::coverPoints(vector<int> &X, vector<int> &Y) {
    int l = X.size();
    int i = 0;
    int ans = 0;
    while (i<l-1){
        ans = ans + max(abs(X[i]-X[i+1]), abs(Y[i]-Y[i+1])); …
Run Code Online (Sandbox Code Playgroud)

c++ arrays

22
推荐指数
3
解决办法
1701
查看次数

C性能和编译选项

我有两个类似的实现(java和c ++)用于像选择排序这样的简单算法.

public interface SortingAlgorithm {

    public void sort(int[] a);
}

public class SelectionSort implements SortingAlgorithm {

    @Override
    public void sort(int[] a) {
        for (int i = 0; i < a.length; i++) {
            int lowerElementIndex = i;
            for (int j = i + 1; j < a.length; j++) {
                if (a[j] < a[lowerElementIndex]) {
                    lowerElementIndex = j;
                }
            }
            swap(a, lowerElementIndex, i);
        }
    }

    private void swap(int[] a, int i, int j) {
        if (i == j) {
            return;
        } …
Run Code Online (Sandbox Code Playgroud)

c java performance assembly gcc

9
推荐指数
1
解决办法
359
查看次数

标签 统计

java ×2

performance ×2

arrays ×1

assembly ×1

c ×1

c++ ×1

gcc ×1

math ×1

max ×1

min ×1