• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zoharSoul
V2EX  ›  程序员

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

  •  1
     
  •   zoharSoul · Jul 30, 2021 · 12387 views
    This topic created in 1930 days ago, the information mentioned may be changed or developed.
    Supplement 1  ·  Jul 30, 2021
    还是希望有 gc 的.
    Supplement 2  ·  Jul 30, 2021
    场景主要是面向 web 后端写业务的情况下的
    77 replies  •  2021-08-02 13:13:09 +08:00
    pinkSlime
    pinkSlime
    Jul 30, 2021❤️1
    1
    ?
    > Go is syntactically similar to C
    thet
    thet
    Jul 30, 2021 via iPhone❤️14
    2
    C#
    wellsc
    wellsc
    Jul 30, 2021 via iPhone❤️3
    3
    .net core
    manhere
    manhere
    Jul 30, 2021 via Android
    4
    lua
    icyalala
    icyalala
    Jul 30, 2021
    5
    Java /c++/js 这怎么比较? Go 低内存这也说不定。
    要精确控制内存和现代化语法,就找那些没有 GC 、运行时小的语言,比如 Rust 、Swift 。。
    zoharSoul
    zoharSoul
    OP
    Jul 30, 2021
    6
    @pinkSlime #1 Go is syntactically similar to C, 不是 c++ ,
    比如 c++的泛型, 函数式变换之类的. 统统没有, 比如这样

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

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

    **没有**

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

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

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

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

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

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

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

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

    还是说这个生态指的是协程?我们都是写业务,没有并发压力所以没有调研过这块
    jin7
    jin7
    Aug 2, 2021
    75
    CSharp 唯一的选择
    rowan6
    rowan6
    Aug 2, 2021
    76
    C#
    ly841000
    ly841000
    Aug 2, 2021
    77
    @abcbuzhiming .net native 编译现在 RC 了,基本可用,winform asp core 都能正常使用,不过编译出来的空间占用不小,asp core 得 30M 40M
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2063 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 106ms · UTC 14:57 · PVG 22:57 · LAX 06:57 · JFK 09:57
    ♥ Do have faith in what you're doing.