簡體   English   中英

二維數組上的Arrays.sort不會觸發垃圾回收嗎?

[英]Arrays.sort on 2-dimensional array without triggering Garbage Collection?

這段代碼可以完美地工作,但是不幸的是,由於Arrays.sort()比較器,它觸發了垃圾回收。

有沒有一種方法不會觸發垃圾回收?

(注意:此代碼已被修改為更“通用”。實際代碼是針對Android游戲的,這就是為什么垃圾收集導致的速度下降是一個問題。)

static final byte INCOME = 0;
static final byte INDEX = 1;

public void vSortEmployees() {
    nPaidEmployees = 0;

    for (nIter=0; nIter<MAX_EMPLOYEES; nIter++) {

        if ((employees[nIter].current == true) && (employees[nIter].volunteer == false)) {

            // We have another current and paid employee; add that employee's "amount earned to date" to the list.
            paidemployees[nPaidEmployees][INCOME] = employees[nIter].fGetTotalIncomeToDate();
            paidemployees[nPaidEmployees][INDEX] = nIter;

            nPaidEmployees++;
        }
    }

    Arrays.sort(paidemployees, new Comparator<float[]>() {
        @Override
        public int compare(float[] f1, float[] f2) {
            if (f2[INCOME] < f1[INCOME]) 
                return -1;
            else if (f2[INCOME] > f1[INCOME])
                return 1;
            else
                return 0;
        }
    });

    // Now we have a list of current, paid employees in order of income received.

    // Highest income paid out
    paidemployees[0][INCOME]

    // Second highest income paid out
    paidemployees[1][INCOME]

    // If we need to reference the original employee object, we can:        
    employees[paidemployees[0][INDEX]].getName();
}

無法始終觸發或不觸發GC。 GC過着自己的生活。 它在對數組進行排序時運行的事實並不意味着任何事情。

但是,您可能可以做些什么。 只是不要為比較器使用匿名內部類。 您真的不需要這個。 使用常規類並將其對象創建為單例。 然后只需使用此實例。 在這種情況下,排序期間將不會在您的代碼中創建任何新對象,並且GC可能不會運行。

class FloatArrayComparator implements Comparator<float[]>() {
    @Override
    public int compare(float[] f1, float[] f2) {
        if (f2[INCOME] < f1[INCOME]) 
            return -1;
        else if (f2[INCOME] > f1[INCOME])
            return 1;
        else
            return 0;
    }
};


class SomeClass {
    private Comparator<float[]> floatArrayComparator = new FloatArrayComparator();

    void myMethod() {
         Arrays.sort(myArray, floatArrayComparator);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM