第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調(diào)用array.length的成本是多少

調(diào)用array.length的成本是多少

慕標(biāo)琳琳 2019-08-19 17:16:56
調(diào)用array.length的成本是多少在為我們的應(yīng)用程序中的每個循環(huán)更新for循環(huán)時,我遇到了很多這些“模式”:for (int i = 0, n = a.length; i < n; i++) {     ...}代替for (int i = 0; i < a.length; i++) {     ...}我可以看到你獲得了集合的性能,因為你不需要為每個循環(huán)調(diào)用size()方法。但是有陣列?所以問題出現(xiàn)了:array.length比常規(guī)變量更貴?
查看完整描述

3 回答

?
慕田峪9158850

TA貢獻(xiàn)1794條經(jīng)驗 獲得超8個贊

不,呼叫array.lengthO(1)或恒定時間操作。

由于.lengthis(行為)是其public final成員array,因此訪問本地變量并不慢。(這與調(diào)用方法非常不同size()

現(xiàn)代JIT編譯器可能.length無論如何都會優(yōu)化調(diào)用。

您可以通過查看OpenJDK中JIT編譯器的源代碼,或通過讓JVM轉(zhuǎn)儲出JIT編譯的本機(jī)代碼并檢查代碼來確認(rèn)這一點。

請注意,可能存在JIT編譯器無法執(zhí)行此操作的情況; 例如

  1. 如果您正在調(diào)試封閉方法,或者

  2. 如果循環(huán)體有足夠的局部變量來強制寄存器溢出。


查看完整回答
反對 回復(fù) 2019-08-19
?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗 獲得超6個贊

午飯時我有點時間:


public static void main(String[] args) {

    final int[] a = new int[250000000];

    long t;


    for (int j = 0; j < 10; j++) {

        t = System.currentTimeMillis();

        for (int i = 0, n = a.length; i < n; i++) { int x = a[i]; }

        System.out.println("n = a.length: " + (System.currentTimeMillis() - t));


        t = System.currentTimeMillis();

        for (int i = 0; i < a.length; i++) { int x = a[i]; }

        System.out.println("i < a.length: " + (System.currentTimeMillis() - t));

    }

}

結(jié)果:


n = a.length: 672

i < a.length: 516

n = a.length: 640

i < a.length: 516

n = a.length: 656

i < a.length: 516

n = a.length: 656

i < a.length: 516

n = a.length: 640

i < a.length: 532

n = a.length: 640

i < a.length: 531

n = a.length: 641

i < a.length: 516

n = a.length: 656

i < a.length: 531

n = a.length: 656

i < a.length: 516

n = a.length: 656

i < a.length: 516

筆記:


如果你反轉(zhuǎn)測試,那么n = a.length顯示比i < a.length大約一半快,可能是由于垃圾收集(?)。

250000000因為我得到了OutOfMemoryError,所以我不能做得更大270000000。

重點是,并且它是其他人一直在制作的,你必須運行Java內(nèi)存,你仍然沒有看到兩個替代品之間的速度有顯著差異。把你的開發(fā)時間花在真正重要的事情上。


查看完整回答
反對 回復(fù) 2019-08-19
?
胡說叔叔

TA貢獻(xiàn)1804條經(jīng)驗 獲得超8個贊

我懷疑是否有任何重大差異,即使有,我敢打賭它可能在編譯期間被優(yōu)化掉了。當(dāng)你嘗試微觀優(yōu)化這樣的事情時,你會浪費你的時間。首先使代碼可讀和正確,然后如果遇到性能問題,請使用分析器,然后擔(dān)心選擇更好的數(shù)據(jù)結(jié)構(gòu)/算法,然后擔(dān)心優(yōu)化探查器突出顯示的部分。


查看完整回答
反對 回復(fù) 2019-08-19
  • 3 回答
  • 0 關(guān)注
  • 649 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號