V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zoharSoul
V2EX  ›  程序员

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

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

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

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

    **没有**

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

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

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

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

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

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

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

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

    还是说这个生态指的是协程?我们都是写业务,没有并发压力所以没有调研过这块
    jin7
        75
    jin7   45 天前
    CSharp 唯一的选择
    q2551430130
        76
    q2551430130   45 天前
    C#
    ly841000
        77
    ly841000   45 天前
    @abcbuzhiming .net native 编译现在 RC 了,基本可用,winform asp core 都能正常使用,不过编译出来的空间占用不小,asp core 得 30M 40M
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   997 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:43 · PVG 05:43 · LAX 14:43 · JFK 17:43
    ♥ Do have faith in what you're doing.