亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

toArray 與預先確定的數組

toArray 與預先確定的數組

慕少森 2022-01-19 12:37:01
使用ar.toArray(new String[ar.size()])Android Studio 3.2.1時會警告有關預先調整大小的數組并建議使用空數組:將集合轉換為數組有兩種方式:使用預先確定大小的數組(如 c.toArray(new String[c.size()]))或使用空數組(如 c.toArray(new String[ 0]). 在較舊的 Java 版本中,建議使用預先設置大小的數組,因為創建適當大小的數組所必需的反射調用非常慢。但是,由于 OpenJDK 6 的更新較晚,此調用被內化,使得與預調整大小的版本相比,空數組版本相同,有時甚至更好。此外,傳遞預調整大小的數組對于并發或同步集合也是危險的,因為在 size 和 toArray 調用之間可能存在數據競爭,這可能會導致額外的如果集合在操作期間同時收縮,則數組末尾的空值。此檢查允許遵循統一的樣式:使用空數組(在現代 Java 中推薦)或使用預先確定大小的數組(在較舊的 Java 版本或非基于 HotSpot 的 JVM 中可能更快)。它適用于 Android 還是僅適用于 java?使用預先確定大小的數組(在較舊的 Java 版本或基于非 HotSpot 的 JVM 中可能更快)。因為我認為 Android 不是 HotSpot 它的虛擬機是 Dalvik 現在它是 ART
查看完整描述

3 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

好問題。

https://shipilev.net/blog/2016/arrays-wisdom-ancients/#_new_reflective_array

底線toArray(new T[0])似乎更快,更安全,合同更清潔,因此現在應該是默認選擇。未來的 VM 優化可能會縮小這一性能差距toArray(new T[size]),使當前“被認為是最佳的”用法與實際最佳的用法相提并論。API的進一步 改進toArray將遵循相同的邏輯toArray(new T[0])?——集合本身應該創建適當的存儲。


查看完整回答
反對 回復 2022-01-19
?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

它讀取since late updates of OpenJDK 6并且使用哪個運行時來運行它并不重要 - 因為在 Dalvik 上作為編譯類運行的代碼的語言級別可能是 Java 6、7、8。它只關心哪種語言 -水平用于編譯它的項目。例如:


compileOptions {

    sourceCompatibility JavaVersion.VERSION_1_8

    targetCompatibility JavaVersion.VERSION_1_8

}

設置JavaVersion.VERSION_1_6甚至可能禁用檢查投訴......在這些過時的設備上修復性能問題可能不值得付出努力 - 一些/大部分甚至可能不會受到影響,因為只有“早期更新”的行為與所有后續更新不同。


查看完整回答
反對 回復 2022-01-19
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

我不是 Java 歷史學家,但是...

HotSpot 似乎本質上是由 Oracle 維護和分發的特定類型 JVM 的品牌名稱。它的名字來源于即時編譯器,它可以檢測頻繁執行代碼的“熱點”并即時優化它們。

Android 運行時也具有這種 JIT 編譯器行為,以及在安裝時將 Java 字節碼提前編譯為本機機器碼。

這讓我認為 ART 與 HotSpot 屬于同一類別(就此檢查而言),因此您應該使用此調用的“空數組”版本。


如有疑問,請測量!

最好的確定方法是編寫一個測試程序,該程序執行該方法的兩個版本并測量哪個版本運行得更快。


資料來源:


查看完整回答
反對 回復 2022-01-19
  • 3 回答
  • 0 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號