@
chtcrack 老哥打这么多字不容易,回复你一下吧,拓展下你的知识边界。
“如果 Java 性能真的接近 C++,游戏引擎就会用 Java 写吗?显然仍然不行,因为到了性能性命攸关的领域,一点点性能差距都是至关重要的”,这句话是错的,数据库都可以用 java 写,游戏引擎当然也可以,恐怕还更简单点。现在 java 做游戏存在一个比较严重的缺陷,就是 java 的内存模型非常不适合游戏这种需要大量小对象的领域,java 要做到和 C++一模一样的的内存布局非常麻烦,所以游戏领域 java 出现的很少。不过 java 和 jvm 正在快速发展,project valhalla 也就是 java 的自定义值类型正在快速推进,一旦正式发布,java 将有能力轻松实现像 C++一样的内存布局,我预计到时候会涌现出一批 java 游戏引擎。
“机器语言效率最高,上来是汇编语言,再上来是 c,c++,linux,Windows 底层都是用 c/汇编写的,java 是 c 语言开发的,你可以用 c 写一个 javaxx,但是你不能用 java 写一个性能更好的 cxx,能不能明白?”你这段话是完全错误的。所有的编程语言,只要他是编程语言,那就一定是实现图灵完备的。你知道图灵完备是什么意思吗?就是说,c/c++/java/python 等等在数学上都是等价的,c/c++能做到的 java 都可以分毫不差的做到。并且由于 java 拥有运行时 JIT 的支持,java 的理论性能上限比 c/c++等只有 AOT 的语言高。你懂 AOT 和 JIT 的区别吗? Windows 和 Linux 确实是用 C 写的,但是这种客户端操作系统 java 也不是不能写。我给你推荐一篇文章:一种新的操作系统设计
http://www.yinwang.org/blog-cn/2013/04/14/os-design 。知乎上也有对这篇文章的讨论:如何看待王垠对于内存管理的理解? - 灵剑的回答 - 知乎
https://www.zhihu.com/question/484194993/answer/2098751994。总的思想就是让 JVM 直接运行在裸机上,去掉操作系统的冗余,这样 JVM 就是操作系统,极大的提高程序的运行性能。其实这样的想法我很早之前也想到的,现在全世界几十亿台安卓设备,底层都是 Linux 系统,然后在 Linux 之上运行了 jvm ,在 jvm 之上再运行安卓应用。我就想为什么不直接运行 jvm ,去掉 Linux 呢?这对于安卓设备来说运行效率会极大的提高。我不知道现在有没有公司在做这方面的研究,但我知道,如果 SUN 公司还在的话,一定会很乐意这么做的。
最后,你对 java 的理解几乎为零,jvm 有很多实现,现在应用最广泛的 Hotspot 是用 c++写的。但是前两年 Oracle 搞出了个新玩意,叫 GraalVM ,这是一个完全由 java 实现的通用高性能跨语言虚拟机,用 java 实现的 GraalVM 性能比用 c++实现的 Hotspot 高大概 4%~20%。怎么样?你知道为什么 java 写的 jvm 为什么比 c++写的 jvm 性能高么?恐怕这已经突破了你的想象力极限了吧?