Java会因容器技术盛行而没落吗?

简介: Java会因容器技术盛行而没落吗?

0 前言

容器(docker、k8s)的兴起是否意味着 Java 在跨服务器优势上不再明显?Java 虚拟机的存在是否会放大 Java 的运行性能问题?这颗在后端领域常青树的 Java 是否真的要走下坡路了?


1 真的为了跨平台吗?

实际上,在后端并没有太多的应用场景需要 Java 跨平台,大多数的 Java 后端服务都运行在 x64 Linux 环境上。真正需要关注跨平台的是客户端编程,但这个领域中 Java 的份额相对较小,而且也不会经常用到 Docker。


Docker 和 Kubernetes(k8s)的兴起实际上更多是为了方便管理和部署,Docker 只是在 Linux 核心之上添加了一层薄薄的映射,它主要省去的是配置环境的时间,而不是减少代码在运行时跨平台的问题。Docker 并不是专门用来处理跨平台问题的工具,它更多是用来解决环境依赖的问题。


而 Kubernetes 则更侧重于集群资源管理,这对于所有支持微服务的语言都是有益的,当然也包括 Java。


2 脱离场景讨论语言都是耍流氓!

在高并发或大数据吞吐量的情况下,各种后端语言,包括 C/C++,都会遇到各种问题。但在大多数后端应用场景下,Java 是最成熟的解决方案,同时也遇到的问题(包括性能问题)相对较少。这可以很容易理解,经过长时间的实践,一条被走得多的路往往更平坦。虽然也有人会提到 C/C++,但在相同复杂度的逻辑下,C/C++ 编程对程序员的负担更重,就像攀登珠峰的道路,再多的人也难以将其变得平坦。


当然,Java 的成功也得益于高质量的 JVM 和 Java 程序员对常用框架和库的持续优化。Java 的内存模型和运行效率实际上是很高的。只是有一些“爱用”某些框架的 Java 程序员可能会遇到低效的情况,或者有些框架被滥用。另外,有时候问题并不在语言本身,而是在所处理的问题规模上,比如一个运行了几天的 Hadoop 作业,用 C++ 重写可能会引入更多问题并且运行更慢。此时,更应该考虑的是调整算法,而不是仅仅改变编程语言。因此,关于性能问题,实际上并不存在“锅”,即使存在也不能完全归咎于 Java。


Java 当然也面临了许多其他语言的竞争,特别是现在的后端更加强调多语言协作,微服务架构也允许在同一个分布式系统中使用多种编程语言。许多新兴的互联网公司在新项目中可能会全面或部分地采用 Golang 等来取代 Java。但我们无需过于片面地认为 Java 就此不行了,整个后端领域的发展趋势是在扩大,而不是缩小。例如,在新兴的大数据平台中,Java 仍然是最广泛采用的编程语言之一。


3 问题有问题吗?

问题本身是否正确就是一个问题,容器是基础设施,从理论上讲,基础设施应该是透明的,与编程语言无关。至于 Docker,它只是目前容器化的一个优秀实现或最成熟的解决方案之一。而 Kubernetes 正在逐渐与 Docker 解耦,未来 Kubernetes 将支持更多类型的容器。


4 JVM 内存占用太大?

事实上,实际测试结果表明,使用 GraalVM 对 Web 程序进行静态编译后,启动只需要 30MB 内存,而同样的代码在 JVM 下需要 300MB 内存。虽然 Golang 没有实际测试数据,但估计其内存占用量也在 30MB 左右。


换句话说,启动一个实例时的额外内存消耗为 270MB。然而,这只是实例启动的一次性开销,后续的内存占用主要取决于业务数据。无论使用哪种编程语言,后续内存占用基本相当。举例来说,如果你的服务有 100 个实例,使用 Golang 编写服务可能会节省 100 x 270 = 27000 MB 的内存。以阿里云为例,1GB 内存一年大约需要 300 元,27 x 300 = 8100 元。一年的节省成本仅相当于不到一个高级程序员半个月的工资。从经济角度来看,节省的收益相对较低,因此内存占用并不是阻碍 Java 的理由。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
20天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
46 11
|
29天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
63 7
|
30天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
11天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
13天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
39 4
|
2月前
|
运维 Kubernetes Docker
深入理解容器化技术:Docker与Kubernetes的协同工作
深入理解容器化技术:Docker与Kubernetes的协同工作
66 12
|
29天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
持续交付 开发者 Docker
探索容器化技术Docker及其在现代软件开发中的应用
探索容器化技术Docker及其在现代软件开发中的应用
|
1月前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
66 4
|
1月前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
78 3

热门文章

最新文章