果然吃内存,一个简单的 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 了,还是这个内存表现,失望啊。

21011 次点击
所在节点    Java
125 条回复
medivh
2024-07-08 20:39:45 +08:00
试试 openj9
powerman
2024-07-08 20:43:02 +08:00
加钱吧,Java 整个生态来讲,早就不是设计之初,应用于嵌入式设备 微波炉 洗衣机 等玩意的语言了,你要是从头撸起来,httpclient + 自己手撸一个 json 解析器 + jdbc template ,其实内存也用不了多少
powerman
2024-07-08 20:47:36 +08:00
而且 Java 目标就是 作为一个企业级的后台开发生态工具了,早就不适合 嵌入式 等资源受限的场景
cmdOptionKana
2024-07-08 20:48:05 +08:00
没有完美的语言,总不能没有短板吧,要是 Java 那么完美,其他语言也没生存空间了。
angrylid
2024-07-08 20:52:03 +08:00
哪里多了,这么多年一直都是这个占用,不要睁着眼睛乱说,write once run anywhere 很难的。
povsister
2024-07-08 21:06:46 +08:00
只能说 java 是这样的,不然也不会云原生时代被 go 按脑袋了。
cdlnls
2024-07-08 21:10:53 +08:00
你看看 jmap -heap 内存占用多少,然后根据实际占用情况调整 Xmx
Ayanokouji
2024-07-08 21:50:17 +08:00
既然这么在意内存,为何不上 graalvm 试试呢
xuhengjs
2024-07-08 22:03:25 +08:00
jvm 的内存占用,小项目确实不划算
HFX3389
2024-07-08 22:06:40 +08:00
@powerman #2 J2ME 表示不服
suyuyu
2024-07-08 22:15:42 +08:00
那么我可要宣布了。PHP 是世界上最好的语言
serical
2024-07-08 22:19:22 +08:00
@angrylid 李里李气的
zhouxiaoben
2024-07-08 22:28:14 +08:00
确实,我的个人网站换了 nuxt + go ,内存占用也少很多
Donahue
2024-07-08 22:28:20 +08:00
那我可要宣布了 go 语言是世界上最好的语言。
非常适合写这种工具/脚本类的小应用
chendy
2024-07-08 22:31:16 +08:00
嫌大就加参数限制最大堆呗,默认最大堆四分之一物理内存肯定大啊
我在服务器上跑的一个小定时任务,spring-boot 弄的,xmx32m 一样跑
Rorysky
2024-07-08 22:34:02 +08:00
估计 python 差不多
ns09005264
2024-07-08 22:34:48 +08:00
换个语言吧,我从没想过用 java 写小工具。
再说学习新的语言对编程技术有一定的提升。
Vegetable
2024-07-08 22:40:17 +08:00
这也是我一直诟病的,JAVA 写习惯了的开发,起手就是 Spring Boot ,嘴里反复念叨着内存不值钱啊,依赖注入啊什么的。
曾经因为我电脑只有 jdk 没有 ide ,问一个朋友,你知道怎么在命令行执行一个.java 文件吗?他说不知道。
8620
2024-07-08 22:56:15 +08:00
加入 C 的怀抱吧,内存管理编码者自己来~
diagnostics
2024-07-08 22:59:20 +08:00
@Vegetable 说明你朋友培训班出来的,学 Java 课,起码作业会让你用 javac

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

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

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

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

© 2021 V2EX