有什么像 golang 一样低内存占用, 但是语法更偏向 Java /c++/js 的语言吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
zoharSoul
V2EX    程序员

有什么像 golang 一样低内存占用, 但是语法更偏向 Java /c++/js 的语言吗?

  •  1
     
  •   zoharSoul 2021-07-30 12:32:39 +0800 11352 次点击
    这是一个创建于 1535 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言    2021-07-30 13:09:06 +08:00
    还是希望有 gc 的.
    第 2 条附言    2021-07-30 18:27:19 +08:00
    场景主要是面向 web 后端写业务的情况下的
    77 条回复    2021-08-02 13:13:09 +08:00
    pinkSlime
        1
    pinkSlime  
       2021-07-30 12:37:18 +08:00   1
    ?
    > Go is syntactically similar to C
    thet
        2
    thet  
       2021-07-30 12:38:09 +08:00 via iPhone   14
    C#
    wellsc
        3
    wellsc  
       2021-07-30 12:39:42 +08:00 via iPhone   3
    .net core
    manhere
        4
    manhere  
       2021-07-30 12:39:53 +08:00 via Android
    lua
    icyalala
        5
    icyalala  
       2021-07-30 12:45:40 +08:00
    Java /c++/js 这怎么比较? Go 低内存这也说不定。
    要精确控制内存和现代化语法,就找那些没有 GC 、运行时小的语言,比如 Rust 、Swift 。。
    zoharSoul
        6
    zoharSoul  
    OP
       2021-07-30 12:47:39 +08:00
    @pinkSlime #1 Go is syntactically similar to C, 不是 c++ ,
    比如 c++的泛型, 函数式变换之类的. 统统没有, 比如这样

    > numbers.map((i: Int) => i * 2)

    golang 写起了麻烦死了
    zoharSoul
        7
    zoharSoul  
    OP
       2021-07-30 12:49:17 +08:00
    @icyalala #5 还是期望像有 gc 的.
    defage
        8
    defage  
       2021-07-30 12:55:38 +08:00   2
    那就是 c++本尊了,比 go 还可以更低内存
    codehz
        9
    codehz  
       2021-07-30 13:15:30 +08:00
    那 D 怎么样(
    tt67wq
        10
    tt67wq  
       2021-07-30 13:22:27 +08:00 via Android   1
    crystal
    micean
        11
    micean  
       2021-07-30 13:23:31 +08:00   2
    java 别用 spring,用 graavlm 打包 native image
    debuggerx
        12
    debuggerx  
       2021-07-30 13:24:09 +08:00
    可以试试 dart 现代化语法 支持 gc 支持 aot 编译为二进制可执行文件还带 runtime
    https://dart.cn/tools/dart-compile
    mxT52CRuqR6o5
        13
    mxT52CRuqR6o5  
       2021-07-30 13:25:49 +08:00 via Android   1
    C#
    tmac33
        14
    tmac33  
       2021-07-30 13:30:25 +08:00
    go 现在这个势头真是奔着 java/c#去了
    x940727
        15
    x940727  
       2021-07-30 13:36:12 +08:00 via iPhone
    @tmac33 国内而已,全球真不太行……国内的环境推不动一门语言的。而且虽然说大家都是想去搞 go,但是数据表明 Java 又开始抬头了。
    tmac33
        16
    tmac33  
       2021-07-30 13:51:55 +08:00
    @x940727 我在澳洲
    tmac33
        17
    tmac33  
       2021-07-30 13:52:20 +08:00
    势头依旧猛
    chenqh
        18
    chenqh  
       2021-07-30 14:08:04 +08:00
    @x940727 但是现在我们做国内呀,没办法,国内 golang 就是火呀, 可能是国内需要的并发太多了,虽然我觉得用单机 mysql 没有必要用 golang
    x940727
        19
    x940727  
       2021-07-30 14:09:37 +08:00
    @chenqh 再火也没几个岗位……
    chenqh
        20
    chenqh  
       2021-07-30 14:10:35 +08:00
    @x940727 很多中大公司再转了把, 肯定是没有 java 火的,但是比 py 好多了
    x940727
        21
    x940727  
       2021-07-30 14:13:08 +08:00
    @chenqh 大公司也很少是主系统用 Go 的,大多数是为了 KPI 搞轮子才用 Go,毕竟 Java 的轮子太多了,太优质了,没办法刷 KPI……
    ifsclimbing
        22
    ifsclimbing  
       2021-07-30 14:15:43 +08:00
    java 真难用
    ifsclimbing
        23
    ifsclimbing  
       2021-07-30 14:15:59 +08:00
    nim
    crystal
    chenqh
        24
    chenqh  
       2021-07-30 14:23:56 +08:00
    @x940727 也有不喜欢 java,用 golang 的,比如 b 站,知乎,还有很多做直播的
    dqzcwxb
        25
    dqzcwxb  
       2021-07-30 14:48:29 +08:00   1
    litchinn
        26
    litchinn  
       2021-07-30 15:16:54 +08:00
    @micean 上次看到好像 Spring 也支持 graalvm 了,[Spring Native]( https://spring.io/blog/2021/03/11/announcing-spring-native-beta)
    Ayanokouji
        27
    Ayanokouji  
       2021-07-30 16:05:19 +08:00
    graalvm
    qieqie
        28
    qieqie  
       2021-07-30 16:24:12 +08:00
    说 GraalVM 的都自己用过没
    根据我一年半前的体验,跑纯科学计算时间长一点内存比 Hotspot 吃的还多,性能不到三分之一
    zoharSoul
        29
    zoharSoul  
    OP
       2021-07-30 16:46:22 +08:00
    @qieqie #28 科学计算可以暂不考虑, 主要是 web 后端的场景下
    kilasuelika
        30
    kilasuelika  
       2021-07-30 17:12:15 +08:00 via Android
    rust 吧
    lanjz
        31
    lanjz  
       2021-07-30 17:27:19 +08:00
    rust
    ivyliner
        32
    ivyliner  
       2021-07-30 17:49:25 +08:00   1
    swift :-)
    janxin
        33
    janxin  
       2021-07-30 18:05:59 +08:00
    Rust 啊
    Leviathann
        34
    Leviathann  
       2021-07-30 18:09:27 +08:00 via iPhone   1
    rust 一没 gc,二语法不是 c 系语法,从 ocaml 那搬运了不少东西
    rayw0ng
        35
    rayw0ng  
       2021-07-30 18:26:49 +08:00
    Rust,正在反复被编译器狂虐。。。
    hutoer
        36
    hutoer  
       2021-07-30 19:55:28 +08:00
    面向 web 后端写业务? 又要内存占少?长得像 Java /c++/js?

    **没有**

    如果不喜欢 java,试试 typescript ?
    MakHoCheung
        37
    MakHoCheung  
       2021-07-30 21:36:27 +08:00
    go 的正正经经的一个大型系统运行占用的内存真的比 Java 小很多么?
    我只知道 graalvm 的 native-image 把 Java 编译成本地可执行程序后,helloworld 确实是内存占用小,但是一个正经的 web 服务的话内存占用其实差不多的,之前 medium 上看过外国人比较过。
    Cbdy
        38
    Cbdy  
       2021-07-30 21:38:54 +08:00 via Android
    java
    Itoktsnhc
        39
    Itoktsnhc  
       2021-07-30 21:43:03 +08:00
    C#
    keifafa
        40
    keifafa  
       2021-07-30 21:44:38 +08:00 via Android
    D, Better C
    someonedeng
        41
    someonedeng  
       2021-07-30 23:11:33 +08:00
    西沙普
    agagega
        42
    agagega  
       2021-07-30 23:29:47 +08:00 via iPhone
    当然是 C# Swift Kotlin 三兄弟啦,风格还有点像。一开始还都是各自平台专用,后来都开始跨平台。
    iseki
        43
    iseki  
       2021-07-31 00:09:42 +08:00 via Android
    正常场合下大家内存占用应该都差不多( Java 别用 spring 就还行,用 Kotlin 搭配 vertx/ktor 等等。native image 可以参考下,个人没在生产使用过,不知道咋样
    chendy
        44
    chendy  
       2021-07-31 00:19:07 +08:00
    java 不用 spring 用啥啊
    不用 spring 的话,不如直接不用 java 了,一样不好招人
    iseki
        45
    iseki  
       2021-07-31 00:24:33 +08:00   1
    啊,是为了好招人啊,那当我没说
    lightjiao
        46
    lightjiao  
       2021-07-31 00:45:35 +08:00 via iPhone
    C#除了不出名,其他哪儿都好,生态其实也还不错,写起来超级舒服
    40EaE5uJO3Xt1VVa
        47
    40EaE5uJO3Xt1VVa  
       2021-07-31 00:58:40 +08:00
    .net core,相见恨晚 ,如果去年见到,我就舍弃 go 上巨硬的邮轮了
    WebKit
        48
    WebKit  
       2021-07-31 03:34:09 +08:00 via Android
    可以试试 kotlin 啊。真的很好用
    cassyfar
        49
    cassyfar  
       2021-07-31 05:07:29 +08:00
    别推荐了 rust,都没公司用。

    go 挺好的,出活效率大概是 java 和
    cpp 的 1.5 倍
    zxCoder
        50
    zxCoder  
       2021-07-31 07:59:47 +08:00 via Android
    必须是 c#
    WebKit
        51
    WebKit  
       2021-07-31 09:05:22 +08:00 via Android
    @cassyfar 感觉还是 java 更快啊。各种轮子很丰富
    abcbuzhiming
        52
    abcbuzhiming  
       2021-07-31 10:54:42 +08:00
    @thet
    @wellsc
    有一说一,C#和 net core 比起 Java 这种有历史包袱的语言内存占用是少了很多,但是比起 Go 这种直接编译出本地 AOT,压根就没有虚拟机拖累的语言,那就不够看了。net core 据说也在折腾编译成目标平台代码,不带虚拟机,就看啥时候能弄成了
    ipwx
        53
    ipwx  
       2021-07-31 11:54:01 +08:00
    @abcbuzhiming yysy JIT 理论上可以比 AOT 运行速度更快,而且实际上也经常这样。

    对于内存而言,可能云上虚拟机 / 嵌入式会比较头疼 JVM/CLR 。但是对于大型服务器集群,这不太是事情。
    ipwx
        54
    ipwx  
       2021-07-31 11:55:15 +08:00
    @abcbuzhiming JIT 更快的原因是因为可以根据入口参数改造代码。比如 if (xxx) ... else ... 在这里如果根据入口参数进行条件判断的,cpu 流水线可能会被打断。流水线打断就是 20 条指令的时间开销(可能更多)。JIT 完全有机会根据不同参数分别产生两个不同函数去用。
    abcbuzhiming
        55
    abcbuzhiming  
       2021-07-31 13:18:56 +08:00
    @ipwx 我认同 Jit 可能更快,但是我不认同你关于内存的说法,资源总是不够用的,特别是当你进程数量起来以后,一个进程能减掉一半的内存,就是一大笔成本,Java 这个语言确实在云原生时代遇到了挑战,就是其虚拟机太过庞大,否则 oracle 就不会去折腾 graavlm
    ipixeloldc
        56
    ipixeloldc  
       2021-07-31 13:18:58 +08:00
    @cassyfar 确实,rust 现在国内除了字节的飞书大规模用。其他就一堆区块链的用。。。
    wellsc
        57
    wellsc  
       2021-07-31 13:51:43 +08:00 via iPhone
    @abcbuzhiming 因为点 net 能编译二进制了我才提的
    hushao
        58
    hushao  
       2021-07-31 14:10:37 +08:00 via iPhone
    kotlin 国内有大公司用在服务端了,只不过生态是真的很原始,要自己造不少、团队有大神可以关注一下,团队没人就想其他的吧。其他语言如 rust 也是,没大神坐镇也基本折腾不起来
    ipwx
        59
    ipwx  
       2021-07-31 14:10:55 +08:00
    @abcbuzhiming 不啊,Java 多线程足够强,大部分后端 Java 是多线程 + 异步的吧。
    EscYezi
        60
    EscYezi  
       2021-07-31 15:42:23 +08:00 via iPhone
    试试 qurakus 打包 native image
    abcbuzhiming
        61
    abcbuzhiming  
       2021-07-31 16:03:59 +08:00
    @ipwx Java 的线程模型是 1 比 1 换成内核线程的模型。这个东西在经典时代是足够的,但是在现在就未必了,其实 Java 一直在折腾新的携程模型。

    另外,我的本意是,部署一个 Java 项目(线程),哪怕是比较小的项目,拖着一个巨大的虚拟机和基本函数库,也造成其启动内存占用偏大,和启动速度太慢
    c88155745
        62
    c88155745  
       2021-07-31 16:18:25 +08:00
    我能说 php 么,这内存占用也不是很高
    BadMan
        63
    BadMan  
       2021-07-31 16:42:26 +08:00   1
    @x940727 还是有的,我在鹅厂,公司服务端从 3 年前开始就开始转 golang,已经形成不可逆的趋势了,像 qq 这类核心业务的新服务也用 golang 啦。另外,字节和虾皮的主流语言也是 golang,还是可以的。
    Kasumi20
        64
    Kasumi20  
       2021-07-31 16:47:58 +08:00
    Rust,不需要 GC
    sagaxu
        65
    sagaxu  
       2021-07-31 17:34:17 +08:00 via Android
    Java 生态打的 docker 包太可怕了,一个极简的 image 也要 100M 起步,常见的 300M 左右,我还见过一些 1G 以上的。

    内存占用,Java 起步也是 200M,大项目不是问题,小项目虚拟机开销比业务逻辑还大。

    启动时间,Java 项目一般 5 秒以上,30 秒也不算多,启动一次要 5 分钟以上的我也见过。即使用 vertx 之类轻量级高性能框架,启动时间也是 1 秒左右,做不到百毫秒级别。

    Java native 目前几乎不可用,不仅要每个库的作者维护好编译成 native 的 meta 信息,还需要很长的编译时间,本身编译就够慢了,再来个更慢的步骤,咋整。
    ipwx
        66
    ipwx  
       2021-07-31 19:03:33 +08:00
    @abcbuzhiming ummm 我指的就是大一点的后端。。。小项目那没办法。
    FightPig
        67
    FightPig  
       2021-08-01 02:16:38 +08:00
    vlang 啊
    dbpe
        68
    dbpe  
       2021-08-01 09:48:01 +08:00
    @iseki +1

    一些人把 Spring 和 Java 绑定,然后又抱怨 Java(Spring)占用内存大
    ginjedoad
        69
    ginjedoad  
       2021-08-01 11:11:02 +08:00
    Rust: 我不需要 GC !还有谁!
    x940727
        70
    x940727  
       2021-08-01 13:36:52 +08:00
    @abcbuzhiming
    @sagaxu 因为你们用的是 Java8 吧,Java11 自己用 jlink 不就可以大幅降低 jre 大小了吗,说白了,JDK8 是一个超级巨大的分水岭,8 以前的很多缺陷,其实在模块化之后就解决了,但是对于程序员的水平有比较高的需求。还有启动时间和内存占用就更离谱,这个分明是 Spring 慢,占用内存大,丢给 Java 就有点过分了,自己去看看 Netty 的 Web 服务器启动速度和内存占用还有性能?
    iseki
        71
    iseki  
       2021-08-01 23:06:00 +08:00 via Android
    go 编译启动是快,但是语法和生态都这么差劲…受不了啊
    wellsc
        72
    wellsc  
       2021-08-01 23:16:02 +08:00 via iPhone   1
    @ginjedoad zig c++都可
    wellsc
        73
    wellsc  
       2021-08-01 23:17:19 +08:00 via iPhone
    @hushao 不是直接拿 java 的生态就能
    用?
    Leviathann
        74
    Leviathann  
       2021-08-02 02:45:58 +08:00 via iPhone
    @hushao 我们也在用 kotlin 写后端,完全无缝兼容 Java 生态啊,甚至 kotlin 在 jvm 上的标准库很多东西底层都是直接用的 Java 的库,包括最最基础的集合库,然后添加了 n 多扩展方法,用起来超顺手

    还是说这个生态指的是协程?我们都是写业务,没有并发压力所以没有调研过这块
    jin7
        75
    jin7  
       2021-08-02 08:28:34 +08:00
    CSharp 唯一的选择
    q2551430130
        76
    q2551430130  
       2021-08-02 09:11:59 +08:00
    C#
    ly841000
        77
    ly841000  
       2021-08-02 13:13:09 +08:00
    @abcbuzhiming .net native 编译现在 RC 了,基本可用,winform asp core 都能正常使用,不过编译出来的空间占用不小,asp core 得 30M 40M
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2739 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 12:16 PVG 20:16 LAX 05:16 JFK 08:16
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86