java 的基礎設施不行。
處理大量小對象以及和 cpp 交互,csharp 可以實現零成本抽象和零成本交互,java 不行。
游戲開發這個場景需要處理大量的小對象,屬于 java 的七寸但是 csharp 擅長的。java 沒有自定義值類型,這種情況下,要想性能好,得大量的用 float 數組,面向數組編程。面向數組編程,抽象程度就上不去,別扭,本來開發速度都一般,抽象程度再上不去,這就更難受了。
開發處理各種大量的小對象這個環節,不面向數組編程,保持和 csharp 一樣的抽象粒度,java 性能只有 csharp 的 1/10 - 1/100。圖像處理是和游戲開發很類似的場景,都是要處理大量的小對象。知乎里有另一個帖子測過 java 下用 class 定義像素來做圖像處理,和 csharp 近乎兩個數量級的性能差距。所以你看開源的各種圖像處理代碼,java 的都只能在數組上開干,而 csharp 就可以用自定義值類型抽象出像素,用span抽象出行,這個抽象是零成本的。
還有跟引擎和其它底層庫的交互,dognet 的話 fixed 一下,直接把指針傳給引擎,不需要拷貝數據,對輸出值也可以直接處理。java 的話,得把內容序列化后傳進去,再把結果反序列化后使用。粗暴點說就是,c艸艸可以艸c艸,直接注入數據。java 得自己擼然后用注射器注射。
還有 byte,游戲面對大量的多媒體資源,java 下那個帶符號的 byte,老別扭了。
更別說現在 dognet 標準庫里直接內置了 simd,這又是游戲開發喜歡的東西。
仔細研究這些細節,你會發現,只有 c艸艸是游戲高性能快速開發的天命之子,快速開發+關鍵環節零成本抽象+gc兜底,帶著 mono 這個戰五渣都能大殺四方。java,python,js,都有上述這些問題,用起來束手束腳的。