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

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

  •  1
     
  •   zoharSoul · 2021-07-30 12:32:39 +08:00 · 10650 次点击
    这是一个创建于 1210 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 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#
    Keyi
        40
    Keyi  
       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   ·   实用小工具   ·   1129 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 18:36 · PVG 02:36 · LAX 10:36 · JFK 13:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.