V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mokevip
V2EX  ›  问与答

关于 Java 的高内存占用

  •  
  •   mokevip · 2023-02-13 11:27:00 +08:00 · 1281 次点击
    这是一个创建于 654 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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