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 在解决内存占用问题上是不积极的。

15526 次点击
所在节点    程序员
137 条回复
ddkk1112
316 天前
小型 web 项目用得着云原生 微服务吗
内存 1g 的轻量服务器不够你跑 springboot ?
28Sv0ngQfIE7Yloe
316 天前
@gitrebase C#用的比你想象的多吧,游戏这边不少用的
BBCCBB
316 天前
这个内存占用和 java 无关, 大概率是 spring 等框架带来的占用.

你如果手撸 servlet, 占用也很低..
keepRun
316 天前
@Plutooo 我目前只发现启动速度确实有很大优势,但是目前上手门槛还是太高了,且不说很多框架完全没有适配 graalvm ,我为了让 mybatis plus 能够不报错启动做了一大堆适配工作,github 看了不少讨论,在我看来起码还得 3 年 java 生态才能适配好 graalvm ,企业大规模采用的话应该要到 5 年后了。
graalvm 负面影响是牺牲了 java 的动态性,arthas 这种 debug 神器都没法用了
coinbase
316 天前
golang 弱弱的来吊打一下 :)狗头
keepRun
316 天前
@hakr linux 下编译得 5 分钟,之前 windows 下编译 8 分钟
keepRun
316 天前
@Morii 确实是,以前我还有幻想,现在没了
keepRun
316 天前
@ddkk1112 你可以把我这个实验看成 java 如何应对内存敏感型场景
keepRun
316 天前
@coinbase golang web 生态有待加强
yolee599
316 天前
是不是写 javaer 只会用 spring 全家桶啊?之前让同事帮忙写一个嵌入式的量产工具,需求是工人在 UI 填入设备序列号,通过 UDP 协议给设备,设备回复结果,超时就通过 UI 提示。等他交给我的时候启动日志就打印了一个大大的 SPRING
keepRun
316 天前
@yolee599 毕竟 spring 实在太方便了,其实 java 生态在你说的这个场景确实有更好的技术选型
Cat7373
316 天前
NodeJS + Koa + Knex 表示一个有几十个接口和十几张表,每分钟访问量大约一两百次的小项目大概需要 80M 内存
keepRun
316 天前
@Cat7373 nodejs 在请求量小的时候的内存占用还是少的
gitrebase
316 天前
@Morii 不好意思我的,其实我想说的是 Web 场景,游戏那块儿确实还得 C#
gitrebase
316 天前
@yolee599 #50 只要不考虑内存什么的,现在写 Java 直接上 Spring Boot 完全没问题啊,Boot 提供了很多开箱即用的东西,没必要说“是不是写 javaer 只会用 spring 全家桶啊?”这种话吧;关于你的同事在“嵌入式”场景下用 Spring 这种重型 framework 可能确实不太妥,但我更倾向于这是使用者的问题
fuckshiter
316 天前
我觉得这个得看业务跑起来之后的占用,不是看刚启动的
Cabana
316 天前
要不试试 ktor?
abcbuzhiming
316 天前
@bthulu 云上的内存其实非常有限,越是大企业越在意成本。

@ChaYedan666 越便宜的产品,消费者反而会越斤斤计较价格。总价 100w 的房子多 1w 少 1w 很多人不会有感觉,总价 10 块钱左右的拖鞋,很多人都会挑来跳去就为了省那一块钱
keepRun
316 天前
@Cabana 这玩意好使么?有没有实际使用的数据发来看看?
qwertty01
316 天前
@keepRun #30 https://openjdk.org/jeps/408 试一下 java-webserver 想要内存小就不要用成熟的框架

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

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

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

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

© 2021 V2EX