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

news2024/11/26 20:24:50

点击下方“JavaEdge”,选择“设为星标”

第一时间关注技术干货!

免责声明~

任何文章不要过度深思!

万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」

不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人

怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」

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 的理由。

写在最后

公众号JavaEdge 专注分享软件开发全生态相关技术文章视频教程资源、热点资讯等,如果喜欢我的分享,给 🐟🐟 点一个 👍 或者 ➕关注 都是对我最大的支持。

欢迎长按图片加好友,我会第一时间和你分享软件行业趋势面试资源学习途径等等。

e60a188fc66d1563d2a86ddfe6a4a41c.jpeg添加好友备注【技术群交流】拉你进技术交流群

关注公众号后,在后台私信:

  • 回复【架构师】,获取架构师学习资源教程

  • 回复【面试】,获取最新最全的互联网大厂面试资料

  • 回复【简历】,获取各种样式精美、内容丰富的简历模板

  • 回复 路线图,获取直升Java P7技术管理的全网最全学习路线图

  • 回复 大数据,获取Java转型大数据研发的全网最全思维导图

  • 更多教程资源应有尽有,欢迎关注并加技术交流群,慢慢获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/938576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sdl环境搭建

sdl教程地址 https://lazyfoo.net/tutorials/SDL/index.php 新建C项目&#xff08;空项目&#xff09; 新增src和include目录 新建main.cpp文件 main.cpp #include <SDL/SDL.h> #include <iostream>int main(int argc, char* args[]) {if (SDL_Init(SDL_INIT…

一直在期待的基于 Ubuntu 的滚动发布 Rhino Linux 终于来了

导读现在我们就一起来看看 Rhino Linux 有哪些值得特别关注的地方。 Hands of an office woman typing 你可能还记得我们 去年 报道过&#xff0c;Rhino Linux 将会接替现已停止开发的 “Rolling Rhino Remix”。 经过漫长的等待&#xff0c;它的首个稳定版本终于发布了&…

Python采集关键词结果辅助写作

大家好&#xff01;在进行学术研究和 写作时&#xff0c;获取准确、全面的文献资料和相关研究成果是非常重要的。在本文中&#xff0c;我将与你分享使用Python爬虫 采集 学术关键词结果来辅助 写作的方法&#xff0c;帮助你快速获取与研究主题相关的学术文献和 。 **1. 设置搜索…

旺店通·旗舰奇门和金蝶云星空单据接口对接

旺店通旗舰奇门和金蝶云星空单据接口对接 来源系统:金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的ERP服务平台。K/3Cloud支持的协同应用包…

Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 数据聚合

文章目录 ⛄引言一、数据聚合⛅简介⚡聚合的分类 二、DSL实现数据聚合⏰Bucket聚合⚡Metric聚合 三、RestAPI实现数据聚合⌚业务需求⏰业务代码实现 ✅效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常…

洁净区环境监测如何操作?

洁净区环境监测 如何操作 洁净区洁净等级划分为&#xff1a; A级&#xff1a;指高风险操作区&#xff0c;如&#xff1a;灌装、放置胶塞桶、敞口安瓿瓶、敞口西林瓶的区域及无菌装配或连接操作的区域。通常用层流操作台&#xff08;罩&#xff09;来维持该区的环境状态。 B级…

【算法与数据结构】404、LeetCode左叶子之和

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;思路比较简单&#xff0c;遍历所有节点然后判断该节点是否为左叶子节点&#xff0c;如果是&#xff0c…

【React学习】—React中的事件绑定(八)

【React学习】—React中的事件绑定&#xff08;八&#xff09; 一、原生JS <body><button id"btn1">按钮1</button><button id"btn2">按钮2</button><button onclick"demo()">按钮3</button><scr…

华为云服务器以编译方式安装mysql(附带常见报错解决方案)

文章内容较长&#xff0c;请参考目录进行操作。 目录 1、检测系统是否自带mysql 2、下载MySQL 3、安装MySQL 4、环境变量配置 5、下载/升级依赖 1&#xff09;定位问题 2&#xff09;解决问题 gcc版本过低&#xff1a; 使用devtoolset来升级gcc版本 1)安装 centos-re…

实例045 使用任意组件拖动窗体

实例说明 通常将鼠标按住窗口的标题栏才能够拖动窗口&#xff0c;但是&#xff0c;在没有窗口标题栏的情况下如何拖动窗体呢&#xff1f;本例将会利用窗口中的控件拖动窗口&#xff0c;将鼠标放在按钮上然后按住鼠标左键移动鼠标即可拖动窗体。实例效果如图1.46所示。 技术要点…

​什么是502 bad gateway 报错和解决办法

什么是502 bad gateway 报错 简单来说 502 是报错类型代码 bad gateway 错误的网关。是Web服务器作为网关或代理服务器时收到无效的响应。 用我们的口语说就是运行网站的服务器暂时挂了(不响应)。 产生错误的原因 1.连接超时 我们向服务器发送请求 由于服务器当前链接太多&am…

vue三级市区联动

默认返回值格式&#xff1a;all:code、name都返回 name:只返回name code:只返回code&#xff0c;level&#xff1a;可设置显示层级 1&#xff1a; 省 2&#xff1a; 省、市 3&#xff1a; 省、市、区 v-model 默认值 可以是 name: [ "天津市", "天津市",…

Datatable:Python数据分析提速高手,飞一般的感觉!

1 前言 Datatable是一个Python库&#xff1a; 详细介绍大家可以去官网查看&#xff1a; https://datatable.readthedocs.io/en/latest/?badgelatest Datatable的有点包括&#xff1a; 高效的多线程算法 Memory-thrifty 内存映射磁盘上的数据集 本地C实现 完全开源 Da…

iTunes怎么备份?1招教你轻松搞定

相比于苹果手机的iCloud备份&#xff0c;使用iTunes备份具有以下优点&#xff1a;1、备份容量不受限制&#xff1b;2、备份后的文件就像普通文档一样&#xff0c;可以随时进行查看和管理。本文将为大家介绍itunes怎么备份、如何对备份进行加密以及怎么删除备份的方法&#xff0…

nginx配置keepalive长连接

nginx之keepalive详解与其配置_keepalive_timeout_恒者走天下的博客-CSDN博客 为什么要有keepalive? 因为每次建立tcp都要建立三次握手&#xff0c;消耗时间较长&#xff0c;所以为了减少tcp建立连接需要的时间&#xff0c;就可以设置keep_alive长连接。 nginx中keep_alive对…

Java:Map集合的三种遍历方式和常见案例

Map集合的遍历方式 方式一&#xff1a;键找值 遍历方式二&#xff1a;键值对 遍历方式三&#xff1a;Lambda表达式 Map集合的常见案例 需求 某个班级80名学生&#xff0c;现在需要组织秋游活动&#xff0c;班长提供了四个景点依次是(A、B、C、D),每个学生只能选择一个景点&am…

阿里云CDN缓存预热与刷新以及常见的故障汇总

文章目录 1.为CDN缓存的文件增加过期时间2.CDN缓存预热配置3.CDN缓存刷新配置4.常见故障 CDN缓存预热指的是主动将要缓存的文件推送到全国各地的CDN边缘加速器上&#xff0c;减少回源率&#xff0c;提供命中率。 缓存刷新指的是后期上传了同名的文件&#xff0c;之前的缓存已经…

常见前端面试之VUE面试题汇总十

28. Vuex 和 localStorage 的区别 &#xff08;1&#xff09;最重要的区别 vuex 存储在内存中 localstorage 则以文件的方式存储在本地&#xff0c;只能存储字符串类型的 数据&#xff0c;存储对象需要 JSON 的 stringify 和 parse 方法进行处理。 读 取内存比读取硬盘速度要…

LVGL学习 stm32f407-board-lvgl v8.3移植

LVGL学习 stm32f407-board-lvglv8.3移植 移植过程有问题&#xff0c;请参考正点原子的教程或者视频 硬件平台 STM32F407ZGT6核心板3.2寸屏幕 LVGL LVGL&#xff08;Light and Versatile Graphics Library&#xff09;是一个免费的开源图形库&#xff0c;提供创建具有易 于…

知识学爆——日常开发中的疑问

1.为什么说刷新页面vuex的数据会丢失 刷新页面vuex的数据会丢失属于正常现象&#xff0c;因为JS的数据都是保存在浏览器的堆栈内存里面的&#xff0c;刷新浏览器页面&#xff0c;以前堆栈申请的内存被释放&#xff0c;这就是浏览器的运行机制&#xff0c;那么堆栈里的数据自然就…