关于 Java 的高内存占用

2023-02-13 11:27:00 +08:00
 mokevip

作为一个前端,写过 php 、python 、node 的服务端,对 JAVA 不太了解

可能是因为解释型和编译型的问题,感觉 JAVA 的内存占用很高

最直观的感觉就是,java 后端朋友总是找老板审批,要加内存、加服务器

甚至连测试服务器(几乎没用户访问),32G 内存都不够用,还要加(解释是里面放的基础服务多)

再有一个比方,gitea 在我的 NAS 上以 Docker 的形式也只占用 100M ,而 gitlab 没有 2G 都安装不上(我之前 NAS 只有 4G 内存的时候安装过,系统经常卡死)

但是我接触 PHP 比较多,PHP 就是属于没有用户访问的情况下,十几个站点和一个站点性能开销基本一样

一个 2h2g 的服务器就够 PHP/Node 玩出各种花样来了

1114 次点击
所在节点    问与答
12 条回复
Leviathann
2023-02-13 11:30:25 +08:00
jvm 不改启动参数默认最小占用 800m
msg7086
2023-02-13 12:25:32 +08:00
Java 就是设计给大内存用户跑的,内存是它自己管理的。
用 Java 就代表你接受它的内存占用习惯。(否则你用它干什么?)

就像你跑数据库,有些人开着 1TB 内存跑 Oracle DB ,有些人开个 1GB 内存跑 SQLite ,这能一样吗。

我们做 Java 开发的,我司给的沙盒服务器最小是 24G 内存。生产服务器会再给多一些。

另外解释型和编译型和这没关系。内存占用是内存管理策略下的东西。
Akitora
2023-02-13 12:33:00 +08:00
32G 都不够那肯定是一堆微服务,用 graalVM 编译成 native 能节省很多内存
mokevip
2023-02-13 12:34:58 +08:00
@Akitora 是有一堆微服务
hhjswf
2023-02-13 12:38:51 +08:00
@Leviathann 跟主机内存有关系吧,我记得最小 1/64 ,最大 1/4
perfectlife
2023-02-13 12:39:37 +08:00
编程语言的问题,java 天生内存就高一点,另外对公司来讲 服务器配置成本比起人力成本基本,孰高孰低,很明显的。
hhjswf
2023-02-13 12:47:20 +08:00
jvm 划了很大一块内存空间 jvm 自己管理,降低程序员心智负担,所以占用大。不懂 node ,php 是不是程序员自己做内存管理
IvanLi127
2023-02-13 12:59:38 +08:00
这就是为啥我看见 java 的项目就直接叉掉的原因了,小破机子带不动带不动
mokevip
2023-02-13 16:04:13 +08:00
@IvanLi127 +1 , 所以一般开源项目还是 php 、node 之类的比较简单、高效(迭代快)
mokevip
2023-02-13 16:05:20 +08:00
@perfectlife 嗯,不仅是服务器成本,配的开发 PC 要求也高,我为老板心疼两秒
perfectlife
2023-02-13 16:13:56 +08:00
@mokevip 微服务服务少还行服务多还本地跑?一个机器能跑几个服务?本地跑一堆微服务好多还要再运行依赖中间件,高配电脑也顶不住,cicd 搞好,全部扔到 dev/test/uat/prod 环境运行,java 可以远程 debug
night98
2023-02-14 10:36:29 +08:00
java 其实没那么占内存,主要是其默认配置是吃掉总内存的 1/4 ,不加启动参数的话随便起一个就是至少 3-5G 的内存,而其实际占用的内存可能也就 300m ,之前做压测并发 1000 多,看堆内存占用也就 300-500m 上下波动,

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

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

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

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

© 2021 V2EX