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

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

java是否在for循環(huán)中緩存數(shù)組引用?

java是否在for循環(huán)中緩存數(shù)組引用?

繁星淼淼 2023-03-31 16:54:31
有類似的問題:高級 for 循環(huán)確實緩存引用,因為它使用相同的迭代器實例:https ://stackoverflow.com/a/29812538/4087512正常的 for 循環(huán)確實緩存長度:https://stackoverflow.com/a/1208331/4087512但我正在嘗試查看引用是否緩存在經(jīng)典的 for 循環(huán)中:for(int i=0; i<someObject.getPrivateArray().length; i++){    //do something where it's necessary to use i AND getPrivateArray()}而不是:int j=0;for(int var : someObject.getPrivateArray()){    //do something with j & var    j++;}從此處回答的問題來看:for 循環(huán)和 for-each 循環(huán)之間是否存在性能差異?這 2 個在本地范圍內(nèi)聲明的數(shù)組上具有相同的性能,但是從 for 循環(huán)的不同對象獲取數(shù)組是否會產(chǎn)生開銷?上面回答說數(shù)組其實是緩存在foreach循環(huán)中的。
查看完整描述

1 回答

?
12345678_0001

TA貢獻1802條經(jīng)驗 獲得超5個贊

不。

Java 無法知道someObject.getPrivateArray()每次調(diào)用都會返回相同的對象。因此,它必須在每次迭代時調(diào)用該函數(shù)。

例如)

Queue<int[]> queue = ...;


for(int i=0; i<queue.remove().length; i++) {

    // ...

}

這是完全相同的代碼模式;只是名稱發(fā)生了變化,但很明顯 的返回值queue.remove()不會被緩存。


更新

@MattTimmermans 在評論中指出,JVM 可能會內(nèi)聯(lián)調(diào)用someObject.getPrivateArray(),這樣 JVM 可能能夠確定每次都返回相同的對象,并優(yōu)化調(diào)用。這需要:

  • someObject是最終的或有效的最終

  • getPrivateArray()是最終的,所以它可以內(nèi)聯(lián)

  • getPrivateArray()必須沒有副作用(或者無論如何都必須執(zhí)行副作用)

  • 返回的值必須是final其他一些實體不能修改的,保證返回相同的值

在這種情況下,JVM可能會優(yōu)化調(diào)用并將提取移出循環(huán),從而有效地緩存結(jié)果。當(dāng)自己緩存值很容易時,我不會依賴它。


查看完整回答
反對 回復(fù) 2023-03-31
  • 1 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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