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

117 天前
 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 了,还是这个内存表现,失望啊。

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