Java 比 GoLang 有什么优点?


Java 比 GoLang 有什么优点?
什么时候使用 java 比使用 GoLang 更好?
我见过几次性能测试,结果显示 GoLang 总是速度最快,且内存和 CPU 使用率最少。
问题是:为什么我或任何公司应该选择使用 Java 而不是 GoLang?

观点1:
Go 从一开始就被设计为限制在其基础上可以构建的抽象 - 目标受众是大批初级工程师,他们将在 FAANG 规模的公司中实现中级工程师从高级工程师的设计中切分出来的内容。通过添加初级工程师甚至都无法察觉的限制,他们让中级/高级人员审查 PR 变得简单得多;所以,如果表达能力有限,他们有上述的初级工程师团队来编写大部分内容。

Golang 的一位首席设计师确实公开表示,该语言的设计非常简单,专门针对谷歌中那些正在努力掌握记忆概念的初级员工。

观点2:
GoLang:相当新颖和流行,没有人真正知道它将会走向何方。

Java:成熟、稳定、企业级语言,拥有丰富的库和已存在的数不清的代码行,此外,还有大量熟练的程序员,基本上无处不在,从小型嵌入式设备、移动电话、桌面应用程序到最大规模的顶级安全企业应用程序。

Java因其稳定性、详细性、可靠性、向后兼容性等而成为企业语言 。

最快和最少的内存并不总是重要的标准。可读性、可维护性、可靠性、可用的熟练人力数量、库的数量及其稳定性在大多数情况下才是最重要的。

观点3:
当 Go 出现时,Java AOT 编译器都是商业的,现在有两个免费的编译器(GraalVM 原生镜像和 OpenJ9),以及一个使用 JIT 和 AOT 混合的完整移动操作系统。

然后,Java 世界中的所有语言,包括 Java 语言,都比 Go 更具表现力。

剩下的就只有值类型了。不过,Valhala 最终会问世,而且已经有了实验版本,供那些想要使用值类和记录的人使用。Valhalla 项目是一个重要的里程碑,它旨在通过引入值类型来弥合基本类型和对象之间的差距,从而提高性能。

观点4:
我还没有看到哪个主要的性能瓶颈不是由某些开发人员造成的。语言很少成为性能瓶颈,Facebook 甚至设法用老式的 PHP 扩展到疯狂的工作负载,而老式的 PHP 完全是垃圾(我当时是一名 PHP 开发人员)。现代 PHP 已经解决了所有这些问题。

您可以与有能力的开发人员一起解决大多数性能问题(如果您碰巧遇到的话)。

观点5:
Java 是集成问题的默认选项。鉴于大多数代码都是夹在商业数据库、Web 服务器和代理之间的业务逻辑,Java 是IT 的通用语言。

基本上,IT 领域的所有商业实体都默认将他们的产品与 Java 对齐。最差的情况下,他们也能够与 Java 很好地进行本机集成。很多时候,他们的产品一开始就是用 Java 编写的,而且实际上没有其他选择。

唯一真正的例外是那些已经构建了平台的超大型 IT 公司,现在正通过围墙来防止用户信息泄露。你不会在 Windows 或 iPhone 中看到 Java。

说到 Go,Go 很不错。 我不确定 Go 在内存测试或性能方面是否有优势。 例如,我当前的 Java 应用程序的堆大小为 10 千兆字节。 这是在 Java 中移动数据进行 "内存优化 "后的结果。 以前的数据存储在 C 语言软件中,内存使用量要大得多。 一开始不会,因为一个字节就是一个字节。 Java 有副本收集器,不存在这个问题。 Go 没有副本收集器,以后也不会有。 因此,这取决于你的基准是什么。 长期运行的服务器软件与命令行工具。

在性能方面,我真的怀疑 Go 在编译器层面上是否有任何高级优化,而 JVM 上也没有。就性能而言,Go 的真正优势在于深度优化的可能性。Go 在集成 C 代码时应该能够获得更好的性能。在 Go 中,高性能 C/Fortran 库只需导入即可,如果您需要asm 块,您可以拥有它。

观点6:
我会使用 Java 编写业务相关代码,使用 golang 进行系统编程。
用于计算业务统计数据的守护进程 => Java。
日志服务器或 smtp 守护进程 => golang。

Java 在系统编程方面确实很糟糕,它的可移植性基于忽略平台的特定内容。
因此,例如在 Unix 系统中,您将无法访问命名管道、unix 套接字等本机内容……
但另一方面,它非常适合各种数据库、第三方服务等……

观点7:
我对 GoLang 最大的疑虑是谷歌。他们有放弃项目的历史,无论这些项目有多受欢迎。而且,我也不喜欢他们迄今为止发布的所有 Java API 的设计。Sun 和 Oracle 在设计 Java API 方面做得更好。