果然吃内存,一个简单的 Java 程序就占用了 250M 内存

2024-07-08 20:36:54 +08:00
 karottc

之前一直在用 Java 写 企业级代码,并没有很在意 java 的内存问题,比如多个/少个一两百兆就没关心。

平时用 java 写的直接运行就结束的代码,基本都是本地电脑运行,也没有发现内存问题。

直到最近,用 java 写了一个简单的程序,运行在我的 1C1G 的腾讯云机器上,才发现 java 确实内存大户。

程序的功能为:

  1. 每 10 分钟抓取某个链接的数据
  2. 抓取到的内容和 mysql 里面已有的内容作对比
  3. 存在就更新,不存在就插入到 mysql 中
  4. 每天早上 10 点发送一个企业微信通知

这就是这个程序的所有功能,由于用到了定时任务和操作 mysql, 所以我第一个版直接用了 springboot ,平时工作也用整起来快。 用到的库为:okhttp + gson + mybaits + jdbc + logback

程序运行稳定之后内存占用:250M

这个简单的功能这个内存占用实在是太大了。

然后我觉得可能是 springboot 的原因,所以我写了第二版: 用了 okhttp + gson + mybatis + jdbc 去掉了框架和 logback, 直接用 print 输出 log , 定时任务也直接用了 while(true) + sleep 来实现。

这版程序稳定运行之后内存占用:90M

上面两版没有加任何优化参数,就是 java -jar xxx.jar 运行。 java 版本:java21


java21 了,还是这个内存表现,失望啊。

21219 次点击
所在节点    Java
125 条回复
diagnostics
2024-07-12 14:57:20 +08:00
@mark2025 #119 不看应用,只看 node 的话,跑一个 while 比 java 吃内存,你可以按我的代码跑一下试试就知道了。。。。
vishun
2024-07-13 11:59:52 +08:00
@diagnostics #101 chrome 大部分用 c++写的啊。
bill110100
2024-07-13 15:58:20 +08:00
@cheng6563 占用内存怎么能叫问题?放到单个请求占内存没几个比 java 低的。你觉得 java 占内存,实际用不到,那是你一开始就选错语言了。
mark2025
2024-07-13 20:54:40 +08:00
@diagnostics 但就语言本身,java, js, C 这些执行器占用内存差不了太多。放到应用框架层面 spring 全家桶吃内存太夸张了,换来的是应用开发各方面都比较友好。
lingalonely
2024-07-14 13:14:48 +08:00
直接编译成 native 看会不会下降

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

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

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

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

© 2021 V2EX