3 回答

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])
?——集合本身應該創建適當的存儲。

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

TA貢獻1874條經驗 獲得超12個贊
我不是 Java 歷史學家,但是...
HotSpot 似乎本質上是由 Oracle 維護和分發的特定類型 JVM 的品牌名稱。它的名字來源于即時編譯器,它可以檢測頻繁執行代碼的“熱點”并即時優化它們。
Android 運行時也具有這種 JIT 編譯器行為,以及在安裝時將 Java 字節碼提前編譯為本機機器碼。
這讓我認為 ART 與 HotSpot 屬于同一類別(就此檢查而言),因此您應該使用此調用的“空數組”版本。
如有疑問,請測量!
最好的確定方法是編寫一個測試程序,該程序執行該方法的兩個版本并測量哪個版本運行得更快。
資料來源:
添加回答
舉報