graalvm 拯救了 Java 的启动速度,但没法拯救 Java 的内存占用

316 天前
 keepRun

前几年,我一直期待 graalvm 把 java 编译成 native image 可以大幅减少 java 的内存占用,直到今天我用 graalvm 把我一个简单的 spring + spring mvc + mybatis plus + mysql 的小项目编译成 native 后(使用 g1gc ,配置最大堆内存 64m ),一测内存占用,好家伙,占用 184m ,优化了个寂寞,直接正常用 jvm 占用也就 200m 。启动速度确实快,285ms 即可完全启动。

我彻底死心了,java 对于请求量小的小型 web 项目内存消耗太大了,以后还是转投 nodejs 、golang 搞这种小项目吧,java 内存消耗太大了。

个人感觉云原生与微服务时代,java 官方对于资源占用问题解决速度还是太慢了,我阅读了 openjdk 社区的几乎所有的 jep ,发现起码未来 5 年,java 在解决内存占用问题上是不积极的。

15522 次点击
所在节点    程序员
137 条回复
keepRun
316 天前
再提下官方进展:
官方在推进 java 使用值类型,这可以提高 java 执行效率(变量分配到栈上而不是堆,降低 gc 压力,提高 cpu 执行效率),推测由于逃逸分析更方便,一定程度上会降低一点内存占用,这个预计下一个 lts 会上线。

project leyden:探索渐进式约束 java 的动态特性换取更好的执行效率、性能占用、启动速度等问题,这个进度太慢了,起码得等到下下个 lts 。

其它的看过也忘了,基本上语法上不会有大的改动,优化主要在 jvm\gc 上,没太多亮点。
bthulu
316 天前
内存从来都不是问题, 内存只会越来越便宜.
keepRun
316 天前
@bthulu 虽然如此,但总有内存敏感型场景
salmon5
316 天前
小内存推荐 Serial GC...
kneo
316 天前
再耐心一点,未来可期。
keepRun
316 天前
@salmon5 我测试过,Serial GC 内存占用更大
keepRun
316 天前
@kneo 已经结束辣😁,看看 jep ,未来 5 年内存占用问题是难有大的变化的
xiangyuecn
316 天前
你的实际业务估计也就占用个 10-20M 内存,跟 java 本身关系不大,100M 内存也能跑很多业务+流量,就看你愿不愿意手撸 java 代码
keepRun
316 天前
@xiangyuecn 手撸我还不如换成 golang 生态
StoneHuLu
316 天前
我写 c#的 但我自己家里服务器部署的一些智能家居 api 我都用 golang 写的,镜像 17mb ,运行内存才几十 mb 不到,换 c#的镜像就得 250mb ,启动内存就得上百 mb
LykorisR
316 天前
问题在于你用 spring 这种大型框架解决一个小问题,必然有大量的组件是无用占用
sephiroka
316 天前
时间与空间不可兼得,更何况现在的内存便宜
chunqicoder
316 天前
spring 本身就不是个小项目
icyalala
316 天前
时间换空间:用你重写 go 的开发时间,换程序内存占用空间...
chendy
316 天前
都上 spring 了,就别说省内存的事了…
如果真的内存敏感,试试隔壁 php 或者 go 或者 node 或者别的啥,一样的内存,java 可能应用都起不来他们可能还能顺便跑个 MySQL
啥场景用啥工具,用 java 干活说 java 吃内存,就好像说开大挂买菜说大挂废油一样…
ChaYedan666
316 天前
都用 spring 了。就别在乎内存了。
另外我一直不太懂,为什么要在小项目上追求启动速度
keepRun
316 天前
@chendy 以前期待 graalvm 能让 spring 降降内存,结果降了个寂寞,以后我死了这条心了,用 java 就别想降内存
keepRun
316 天前
@ChaYedan666 我这是测试,其实我是不在意其启动速度,但是云原生时代,启动速度快有很大的好处,对资源弹性伸缩比较好
INCerry
316 天前
可以选择迁移到 C# .NET 上面,内存占用更低,也比迁移到 node.js go 这些更简单。
keepRun
316 天前
@INCerry 更倾向于迁移到 golang ,nodejs ,c#感觉国内用得少

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1005841

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX