Peter Nagy 和我在 2020 年 8 月的甲骨文 Groundbreakers Tour 2020 LATAM 大会上发表一篇论文,题为《Go Java, Go!》。我们在本文中提出一个问题:“Java 微服务能像 Go 一样快吗?”为此,我们创建了一系列微服务并进行了基准测试,并在会议上展示了我们的成果。但其中还有不少可以探索的空间,因此我们决定将在本文中进一步探讨。
背景介绍
我们希望通过实验了解 Java 微服务在运行速度上能否达到 Go 微服务的水平。目前,软件行业普遍认为 Java 已经过于陈旧、缓慢且无聊。而 Go 则成了快速、崭新以及酷炫的代名词。真是这样吗?我们想从数据的角度看看这样的印象是否站得住脚。
我们希望建立一个公平的测试,因此创建了一项非常简单的微服务,其中不含外部依赖项(例如数据库),而且代码路径非常短(仅处理字符串)。我们在其中包含有指标及日志记录,因为似乎一切微服务都或多或少包含这些内容。另外,我们使用了小型、轻量化的框架(Helidon for Java 以及 Go-Kit for Go),两袖清风尝试了 Java 的纯 JAX-RS。我们也尝试了不同版本的 Java 与不同 JVM。我们对堆大小及垃圾收集机制做出基本调整,并在测试运行前对微服务进行了预热。
Java 的发展历史
Java 由 Sun Microsystems 公司开发,后被甲骨文所收购。其 1.0 版本发布于 1996 年,目前的最新版本是 2020 年的 Java 15。Java 当前的主要设计目标,在于实现 Java 虚拟机及字节码的可移植性,外加带有垃圾回收的内存管理机制。时至今日,Java 作为一种开源语言仍是全球最受欢迎的语言选项之一(根据 StackOverflow 及 TIOBE 等来源)。
下面来聊聊“Java 问题”。人们对于它速度缓慢的印象其实更多是种固有观念,而不再适应当下的事实。如今的 Java 甚至拥有不少性能敏感区,包括存储对象数据堆、用于管理堆的垃圾收集器,外加准时化(JIT)编译器。
Comments