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

为何 Java 内存占用比.Net 内存占用高这么多?

  •  
  •   crclz · 2020-09-02 22:33:18 +08:00 · 12059 次点击
    这是一个创建于 1543 天前的主题,其中的信息可能已经有所发展或是发生改变。

    无用户访问情况下,执行docker stats命令,发现如下数据:

    容器 1,.Net Core,基于 alpine 镜像,内存占用 40.65MiB
    容器 2,.Net Core,基于 debian 镜像,内存占用 36.75MiB
    容器 3,spring boot,基于 j9 默认 tag,内存占用 529.1MiB

    容器 4,mysql,默认 tag 镜像,内存占用: 372.2MiB
    容器 5,postgres,基于 alpine 镜像,内存占用:5.504MiB

    为什么 java vs .net ,postgres vs mysql,内存占用会出现如此大的差距?

    注:Java 项目和.net 项目的规模差不多。

    99 条回复    2020-09-20 12:29:14 +08:00
    chendy
        1
    chendy  
       2020-09-02 23:19:10 +08:00   ❤️ 3
    java 不给参数默认拿 1/4 内存,其他不了解
    KentY
        2
    KentY  
       2020-09-02 23:42:41 +08:00
    `Java 项目和.net 项目的规模差不多` 内存占用跟项目规模关系并不大..
    zhuangzhuang1988
        3
    zhuangzhuang1988  
       2020-09-02 23:50:11 +08:00
    我也很奇怪 为何 java 有各种内存调优, .net 没有
    而且调优 第一步 不是去找代码瓶颈么, 烂代码 再怎么调优都没用

    ps: https://www.zhihu.com/question/365482363
    momocraft
        4
    momocraft  
       2020-09-02 23:57:12 +08:00
    postrgres 才 5g? 沒負載會這麼少嗎?
    momocraft
        5
    momocraft  
       2020-09-02 23:57:31 +08:00
    #4 應爲 "才 5m"
    soji18
        6
    soji18  
       2020-09-03 01:59:20 +08:00 via Android
    @zhuangzhuang1988 #3 都不愿意用 Oracle JDK 呗
    Levi233
        7
    Levi233  
       2020-09-03 03:14:52 +08:00
    为什么要拿 spring boot 和别人比?
    Mithril
        8
    Mithril  
       2020-09-03 05:40:40 +08:00
    看你拿什么比,ASP.NET Core 性能是要比 Spring 好不少的。而且 Spring 本身就是怪兽啊,跑起来消耗大很正常。
    wanguorui123
        9
    wanguorui123  
       2020-09-03 08:01:38 +08:00 via iPhone
    Spring 运用了大量的缓存技术,减少创建对象和分配内存的时间。
    crclz
        10
    crclz  
    OP
       2020-09-03 08:06:44 +08:00
    @Levi233 因为 spring boot 和 asp.net core 非常类似。jpa 和 ef 也功能差不多。

    @momocraft 确认过了, 就是 5M,后面还出现 3M 。
    opengps
        11
    opengps  
       2020-09-03 08:18:59 +08:00
    项目规模怎么算的?代码行数吗?
    我最近,有个数据库相关的静态类我嫌弃占内存过大,改成每次 new 一个了,从 100M 下降到 40M
    cheng6563
        12
    cheng6563  
       2020-09-03 08:19:04 +08:00 via Android
    就是有这么多
    zjsxwc
        13
    zjsxwc  
       2020-09-03 08:34:42 +08:00 via Android
    都无用户访问了,内存不占白不占
    ratel
        14
    ratel  
       2020-09-03 09:15:55 +08:00
    JVM 参数有关系吧,最小堆内存是不是设置得比较大,就算不用也会被 JVM 占用这么多内存的
    passerbytiny
        15
    passerbytiny  
       2020-09-03 09:26:43 +08:00 via Android
    java 运行在虚拟机上,mysql 及时有优化也是 java 开发的。.net 、postgres 是直接运行在操作系统上。

    但其实上面的是废话,JVM 是可以自己设置内存参数的,要自己调教——低了会爆,高了浪费。另一方面,JVM 的内存,是不能自由缩放的(只能按比例缩放几个等级)。因此为了怕爆,默认设置一般都不低( 1/2 物理内存,你那个 512M 应该已经是手动调低了)。
    CoderGeek
        16
    CoderGeek  
       2020-09-03 09:56:01 +08:00
    jvm 起来就得占多少 - -
    sonice
        17
    sonice  
       2020-09-03 10:00:49 +08:00
    我觉得你可以空跑来做比较,单独启动一个空的进程(启动就 sleep ),这样再来看内存占用,可能会更直观一点。
    qW7bo2FbzbC0
        18
    qW7bo2FbzbC0  
       2020-09-03 10:01:35 +08:00
    @passerbytiny #15 不太懂,.net 不是虚拟机吗? mysql 是 c/c++混合开发的吧
    raptor
        19
    raptor  
       2020-09-03 10:08:50 +08:00
    pgsql 的内存占用本来就比 mysql 强很多。

    我曾经在 256M 内存机器上用 pgsql+nginx 跑 wordpress,非常稳。换 mysql 就算 512M 也很困难。
    kanepan19
        20
    kanepan19  
       2020-09-03 10:09:47 +08:00
    内存对公司来说,不是白菜价吗?
    gz911122
        21
    gz911122  
       2020-09-03 10:16:46 +08:00   ❤️ 4
    @passerbytiny

    (#15 引用)mysql 是 java 开发的,

    真是啥人都敢发言啊
    gz911122
        22
    gz911122  
       2020-09-03 10:31:46 +08:00
    @raptor
    咨询一下, 为什么 pg 内存占用小这么多啊?
    est
        23
    est  
       2020-09-03 10:35:05 +08:00
    @momocraft 这个问题我最近确认过。。pg 的 binary 就 6M 大小。我还是装了插件的。然后没别的什么依赖。拍一个配置上去就能跑。
    wysnylc
        24
    wysnylc  
       2020-09-03 10:38:13 +08:00
    空间换时间,只谈内存不管功能和开发效率就是扯淡
    shyling
        25
    shyling  
       2020-09-03 10:43:11 +08:00
    因为 jvm 需要连续的内存空间,启动的时候就要指定(或者默认值) -Xmx,CLR 的堆是分段的,不需要全部都连续,就可以按需去跟 os 申请。。。
    另外 java 占 os 那么多内存也不一定真的全都被用户代码用到了,还是要看 jmap 结果
    guanhui07
        26
    guanhui07  
       2020-09-03 10:43:18 +08:00
    spring jvm 就要这么多 正常
    abcbuzhiming
        27
    abcbuzhiming  
       2020-09-03 10:47:45 +08:00
    @soji18 Oracle JDK 一个德行,我现在就在用
    PDX
        28
    PDX  
       2020-09-03 10:49:15 +08:00 via iPhone
    spring 就是太臃肿了才这样
    abcbuzhiming
        29
    abcbuzhiming  
       2020-09-03 10:49:33 +08:00
    @kanepan19 内存是白菜价的话 docker 和 k8s 就不会诞生,GO 这东西也火不起来。作为服务器,资源永远都是不够的
    Torpedo
        30
    Torpedo  
       2020-09-03 10:49:41 +08:00
    这种比较,不要看初始,关键要看搭一个项目的。
    虽然可能你搭了一个项目,还是 java 占内存多。
    securityCoding
        31
    securityCoding  
       2020-09-03 10:52:23 +08:00
    @guanhui07 spring 512m 起步是基本操作,很烦,难怪那么多公司转 go
    FreeEx
        32
    FreeEx  
       2020-09-03 10:52:56 +08:00
    这样比较是没有意义的,建议整个简单的 CRUD 去跑性能测试再看内存消耗。
    lewis89
        33
    lewis89  
       2020-09-03 10:53:26 +08:00
    老板挥手给你来了 20T 内存,这点内存不就是钱吗抵不上业务宕机一个小时的钱。
    Rwing
        34
    Rwing  
       2020-09-03 10:54:59 +08:00   ❤️ 1
    java 占内存多这不是常识么。。。尤其再加上 spring 这怪兽
    更多 benchmark,可以看这里
    https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/csharp.html
    quan01994
        35
    quan01994  
       2020-09-03 11:09:30 +08:00
    Java 是虚拟机,而 .net 只是 运行时 ,两个有本质的区别。
    momowei
        36
    momowei  
       2020-09-03 11:14:16 +08:00
    我觉得内存占用对一些创业公司来说还是挺关键的,比说什么人比机器贵了,事实就是 java 和 php 转 go 并不难。
    现在云服务器高一点配置其实挺贵的,如果可以用最少的机器配置获取最大的流量性能,你比别人的优势就很大了,说个很简单的,如果你是一个最普通的小程序创业者,不管是做 saas 还是什么,我一台 2 核心 4g 的服务器可以部署至少 20 个 go 中小应用了把。java 恐怕 3 个顶天了,想想这中间的成本差距把,别说什么人比机器贵,那是不差钱的大公司,小公司机器比人贵
    chenqh
        37
    chenqh  
       2020-09-03 11:16:04 +08:00
    @momowei 你有那么多应用?
    abcbuzhiming
        38
    abcbuzhiming  
       2020-09-03 11:16:53 +08:00
    @FreeEx 朋友,java spring 技术栈就是占内存,类似问题我以前也问过

    https://www.v2ex.com/t/587073
    https://www.v2ex.com/t/587073

    后来我自己反复测试过,java 的 JVM,在资源占用这个问题上就是不如后来者 .net framework 的 CLR (更别说 dotnet core 又再次重新设计了一遍虚拟机),我觉得这真的是后发优势;比根本没有虚拟机的 Go runtime 更是比不过。而且 Spring 这个东西,本质是为开发效率考虑的,设计的大而全,内部有很多的安全机制转换,线程,缓冲池。就是个内存黑洞,其实 spring 这个东西,发展到今天,颇有点当年 Spring 之父 Rod Johnson 当年写战斗檄文批判 JavaEE 大而臃肿 一样,走了个历史轮回,我现在觉得 Spring 也有点大而臃肿了。要接太多的第三方,就要考虑太多的可能性,层层接口抽象之下,Spring 本身成了一个巨石应用,居然得改用 Gradle 来构建才能满足这个巨石应用的构建需求。我们拿着 spring 写各种早就被分而治之的小型服务后台,确实是拿着高射炮打蚊子。也难怪 Go 能在 Java 和 PHP 的夹缝里起来
    abcbuzhiming
        39
    abcbuzhiming  
       2020-09-03 11:23:54 +08:00   ❤️ 1
    @quan01994 什么?.net 跑起来没有虚拟机?你说 JVM 和 CLR 的设计区别很大我认同,但是你说.net 的运行时根本不是虚拟机,这个我就完全不能同意了


    @lewis89 20T 内存的价格按现在 500 元能买 16G 算,是 64w 元,一个小时能赚 64w 的公司,是什么级别的公司?有多少人能遇得上?吹牛逼不是不可以,但是把吹牛逼的事情当普遍现象,我觉得很无聊。现实就是绝大部分公司,对硬件价格都很敏感
    sagaxu
        40
    sagaxu  
       2020-09-03 11:25:11 +08:00 via Android
    @shyling 连续的是虚拟地址空间,不用不会产生开销
    fallinlovewith
        41
    fallinlovewith  
       2020-09-03 11:25:20 +08:00
    @gz911122 小声点,不要告诉他是 C++搞的
    mosliu
        42
    mosliu  
       2020-09-03 11:26:34 +08:00
    拿 .net Core 和 springboot 对比合适么?
    一个是 framework 一个是 JVM 上的综合性框架。。。。
    spring boot 一整套东西下来 500M 以上内存正常
    比较 spring.net 试试
    或者自己写个小程序试试
    lewis89
        43
    lewis89  
       2020-09-03 11:34:22 +08:00
    @abcbuzhiming #39 关键活动时刻宕机 1 一小时,少赚 64 万算多吗?我们接了京东的以旧换新,搞特价活动的时候,一个小时几十万的订单就眨眨眼的事情,而且出事情了 还要影响京东那边下单流程用户的体验。
    lewis89
        44
    lewis89  
       2020-09-03 11:35:33 +08:00
    @abcbuzhiming #39 我们阿里云一年要用几百万,加内存这点钱真的不算个事
    sagaxu
        45
    sagaxu  
       2020-09-03 11:37:09 +08:00 via Android
    @momowei 同规模服务,Java 大致会消耗 2 到 3 倍于 Go 的内存,小公司业务体量小,撑死能省几十个 G 内存,人再便宜,一天工资至少能买个 10G
    quan01994
        46
    quan01994  
       2020-09-03 11:37:10 +08:00
    @abcbuzhiming 你要这么认为我也没有办法。我做 .net 开发的。我认为 core clr 只是个运行时而已 ,就像 nodejs 。
    fengjianxinghun
        47
    fengjianxinghun  
       2020-09-03 11:39:49 +08:00
    @quan01994 同一个原理,解释执行或者 jit,只要不是直接编译成机器码的都是脚本虚拟机,不能 jvm 叫了个 vm 就区别对待了。 只有 go 这种编译成机器码还有运行时的才能叫带一个运行时。
    lewis89
        48
    lewis89  
       2020-09-03 11:41:45 +08:00
    @abcbuzhiming #39 程序员一个月工资 2 万 折合公司成本 4 万 按你的算法买 1 个 t 的内存不算事情吧,我们有大概 100 来个微服务服务,每个服务可以多用 10 个 G 的内存,java 虚拟机占的这点内存钱 就是个毛毛雨,任何时候折腾技术来节省硬件的钱都是傻逼行为,除非你的量级大到 facebook google 这种程度,投入的技术研发成本最终确实能省不少钱,但实际上对于这种级别的公司,他们技术搞这个纯粹就是为了折腾玩票,毕竟宕机的成本都是公司在承担,你让他们研发拿工资收入去赔,你认为他们赔得起吗?
    wysnylc
        49
    wysnylc  
       2020-09-03 11:43:21 +08:00
    @lewis89 #48 说得对,Java 的开发成本可比.Net 低多了
    Mithril
        50
    Mithril  
       2020-09-03 11:45:42 +08:00
    @quan01994 V8 哭晕在厕所
    Mithril
        51
    Mithril  
       2020-09-03 11:46:46 +08:00
    @wysnylc 确实是啊,人多便宜。
    abcbuzhiming
        52
    abcbuzhiming  
       2020-09-03 11:48:52 +08:00
    @lewis89 我前面已经说了,吹牛逼没事,我也认为你吹的是真的,但是麻烦“不要把吹牛逼里的事情当成普遍现象”,请接点地气,关注一下更现实层面上的东西,否则吹牛逼就是单纯的炫富,一点意义都没有


    @sagaxu 你能不能提供详细一点你们的测试记录? 2 到 3 倍这个记录和我们测试的结果差的很远,我们的测试时在大部分 web 服务里,同样的负载 Go 和 Java 的内存对比能差到接近 10 倍,你们的这个 2 到 3 倍是什么类型的服务?

    另外说一下,养自己开发团队的商业公司其实真是只有一小撮,很多公司都是运营型公司,不养人。这类公司对硬件成本极其敏感。就算在养人的那批公司里,java 和 go 的人工成本并没有差到哪里去。但是硬件成本的差别是真实存在的。

    我还是那句话,Go 如果不是靠资源占用的话,绝无可能在 Java 和 PHP 的夹缝中脱颖而出的。net core 其实就属于虽然有进步,但是没有量变到达质变,所以仍然在夹缝中生存的典型。Go 能脱颖而出,已经说明了很多事情,现实总比理论上的对比更有说服力


    @quan01994 CLR 并不是单纯运行时,只是微软不喜欢用 虚拟机 这个称呼而已
    abcbuzhiming
        53
    abcbuzhiming  
       2020-09-03 11:55:51 +08:00   ❤️ 1
    @lewis89 我说你这人是不是大公司待久了,眼光已经高到那美克星上去了?

    2w 的月工资的程序员,我建议你去查一下统计数据,什么级别的公司,能开得起 2w 元的薪水。这样的公司占公司总比有多少?程序员总数又有多少?大量的程序员拿的什么级别的薪水,做着什么级别的事情?

    BAT 级别的企业有几个啊? BAT 之下的次级规模的企业,又有几个啊?全国注册公司又有多少个?


    当你在大城市的超级企业里敲代码的时候,眼光当然不会往下看,然而现实里的信息化,是要解决很多三线城市之下甚至是县城乡村里的很多欠信息发达企业的信息化问题。他们的数量远远超过你的想象。

    你很牛逼,很高端,但是你只是一小撮。希望你开阔一下眼界,不要眼睛只往头顶上看。我言尽于此。不再回复你的贴
    chenqh
        54
    chenqh  
       2020-09-03 12:07:53 +08:00
    @abcbuzhiming 2-3 线城市和 golang? golang 现在工作不都是几种在一线城市?
    Resource
        55
    Resource  
       2020-09-03 12:14:34 +08:00
    你用 spring 运行个 hello world 也会占用这么多内存的,笑
    john22eclipse
        56
    john22eclipse  
       2020-09-03 12:15:02 +08:00
    国内 java 人力成本比.net 高,所以.net 都转投 java 了
    sagaxu
        57
    sagaxu  
       2020-09-03 12:18:50 +08:00 via Android
    @abcbuzhiming 你可以试着把 Xmx 调低一些,比如从 Go 的 10 倍改成 5 倍,多试几次找到一个平衡的值。我这边业务数据本身比较高,框架开销占比就比较低了,所以数值是 2-3 倍,如果业务数据很小,那 10 倍也是正常的,Java 主流框架开销极大,web 在调用到你的 handler 之前,少说已经调用了 30 个以上方法了。springboot 的基础内存占用大概几十到上百 M,这些内存不会随业务数据增长而增长。

    实际上转 Go 的主力是 PHP,Java 转 Go 极少,PHP 转 Java 的倒不少。Go 比 Java 内存有优势,但仅凭这一项是不够有吸引力的。
    zion03
        58
    zion03  
       2020-09-03 12:20:59 +08:00 via Android
    .Net Core 比较新,技术包袱少,优化这一块做的挺好的,老外有不少性能方面的测评能证实这一点。
    wysnylc
        59
    wysnylc  
       2020-09-03 12:21:40 +08:00
    @sagaxu #57 王垠 14 年对 Go 的评价:http://www.yinwang.org/blog-cn/2014/04/18/golang 在今天我看来依旧不过时
    abcbuzhiming
        60
    abcbuzhiming  
       2020-09-03 12:51:38 +08:00
    @chenqh 因为在你们眼里,很多搬砖工作都不能叫工作的,就像二三线有很多 PHP 公司一样,Go 现在在小地方扩散的速度不慢,主要原因是 Go 确实填补了长久以来的这个资源占用痛点,尤其是二三线普遍只有大城市腰斩甚至三分之一薪水的前提下,人确实很便宜,Go 的培养成本也没多高,真没比 php 高到哪里。
    相反,一线大城市长久以来的基础设施积累(历史包袱),使他们换 Go 的需求倒一点都不迫切。
    chenqh
        61
    chenqh  
       2020-09-03 12:57:57 +08:00
    @abcbuzhiming golang 的工作基本都集中在一线,2-3 线基本不用还说 golang 扩散不慢? 2-3 线新公司可比一线少多了,
    也就是说 2-3 线推广 go,以为着用 golang 替代现有的技术栈? 说句不好听的?别人凭什么从 php 转 golang? 工资高? 坑多?替换技术栈不会出现问题? 更不要将内存占用和打工的有什么关系?
    TypeError
        62
    TypeError  
       2020-09-03 13:02:04 +08:00 via Android
    编程语言 Web 开发还有一大堆个人开发者、小初创和站长呢,
    反正我个人项目肯定不会考虑 Java,512M 的 VPS 可以跑 go 写的 v2ray + Web 服务 + telegram 机器人, 内存还有一半,
    换 Java 不轻轻松松 OOM
    nicevar
        63
    nicevar  
       2020-09-03 13:19:25 +08:00
    @abcbuzhiming 现状就是很多三线城市 go 根本不好招人,招的人跑了接盘的就更难招,在这些城市目前来说 go 还不如 php 来的实在,这个你看这些城市的招聘职位就知道了,比如南方某个省整个省才 10 来个 go 招聘
    cyspy
        64
    cyspy  
       2020-09-03 13:28:45 +08:00
    go 的内存胜在栈上分配,数据密集型的吞吐量打不过 jvm
    KaynW
        65
    KaynW  
       2020-09-03 14:18:27 +08:00   ❤️ 1
    @passerbytiny MySQL: 原来我是用 JAVA 开发的
    wysnylc
        66
    wysnylc  
       2020-09-03 14:18:47 +08:00
    @cyspy #64 明白人,go 在密集型 gc 下性能巨差
    iamverylovely
        67
    iamverylovely  
       2020-09-03 14:37:08 +08:00
    @abcbuzhiming 醒醒,.net clr 真不是你的虚拟机!
    iamverylovely
        68
    iamverylovely  
       2020-09-03 14:44:18 +08:00
    @abcbuzhiming 补充一下吧,我对这东西的了解也有限,最简单的是项目启动了看任务管理器,java 的项目吧 java 进程结束,项目挂掉,.net core 项目会有一个单独的进程,而不是运行在一个.net core 的相关 exe 上面。
    lbp0200
        69
    lbp0200  
       2020-09-03 14:44:42 +08:00
    换个 JDK 呢?比如 eclipse 版本的 JDK
    chengxiao
        70
    chengxiao  
       2020-09-03 14:48:56 +08:00
    你看动不动就要上 32G 内存当开发机的 都是 java....
    chenqh
        71
    chenqh  
       2020-09-03 14:55:32 +08:00
    @chengxiao 那 16G 的呢?
    fengjianxinghun
        72
    fengjianxinghun  
       2020-09-03 15:06:22 +08:00
    @iamverylovely 这有啥关系。android 的 java 也是一个进程一个 DalvikVM,策略不同而已。
    Mithril
        73
    Mithril  
       2020-09-03 15:08:31 +08:00
    @chenqh 16G 的是贫穷的 Java 程序员。。。
    Mithril
        74
    Mithril  
       2020-09-03 15:09:25 +08:00
    @iamverylovely 醒醒。。是不是虚拟机跟有没有独立进程没有半毛钱关系。。。
    KENNHI
        75
    KENNHI  
       2020-09-03 15:11:29 +08:00 via Android
    Spring Boot 就是要吃内存的。就算你只写个 hello world,一样要吃你几百兆内存。
    MySQL 也一样,不说什么项目大小了,这东西光启动也得吃个上百兆内存。
    理由不知道,反正我 Linux 裸机跑就是这样的。调优方法什么的好像很多,但我懒,能动就行了。
    iamverylovely
        76
    iamverylovely  
       2020-09-03 15:14:15 +08:00
    @Mithril
    @fengjianxinghun 哦,我说了,了解有限,我也只是很久之前学.net 时在某些论坛上大致看了下。
    xkeyideal
        77
    xkeyideal  
       2020-09-03 15:20:25 +08:00
    Java 是内存利用率最高的语言,没有之一
    chihiro2014
        78
    chihiro2014  
       2020-09-03 15:27:51 +08:00
    Java 有 netty,Go 有么 233
    no1xsyzy
        79
    no1xsyzy  
       2020-09-03 15:30:10 +08:00
    @abcbuzhiming https://stackoverflow.com/a/1625090
    .net 虽然分发中间码,但是启动时一次性 JIT 整个程序到内存,在整个进程运行过程中始终是 native 的。

    不太确定语言实现的 “虚拟机” 定义是什么。
    想到的可能几个方面:
    1. 是否使用中间码
    2. 是否在运行时强制基本越界判断 /避免
    3. 是否使用操作系统提供的栈
    wysnylc
        80
    wysnylc  
       2020-09-03 15:48:39 +08:00
    chihiro2014
        81
    chihiro2014  
       2020-09-03 16:00:03 +08:00
    @wysnylc 这种都属于弃坑状态了
    122006
        82
    122006  
       2020-09-03 16:20:04 +08:00
    都花了那么久人力开发的服务,也就多花了几百兆内存。哪个公司真的花不起?
    早几天开发完成节约的成本比这高多了
    tairan2006
        83
    tairan2006  
       2020-09-03 17:38:34 +08:00
    @chihiro2014 netty 不是被 goroutine 锤的么…go 要 netty 有个锤子用啊=_=
    gangsta
        84
    gangsta  
       2020-09-03 18:19:34 +08:00   ❤️ 2
    楼上这么多回复, 并没有见到几条回答直接楼主提问的, 一言不合就语言鄙视链, 还有人说 Spring Boot 写个 hello world 也占几百兆内存的...
    如果你是单机开发, 那么即使在内存和硬件如此便宜的今天, 这种 performance tuning(不管是代码层面还是软件架构层面)也是有意义的, 至少通过这个过程可以学习很多内存管理和线程调度的知识. 另外, 一个单 class Spring Boot 的内存占用就是几十 M, Spring 官博有写: https://spring.io/blog/2015/12/10/spring-boot-memory-performance (Do Nothing Spring Boot App)
    chihiro2014
        85
    chihiro2014  
       2020-09-03 18:45:14 +08:00
    @tairan2006 啥,goroutine 不就是 Java 中的单线程线程池么。有啥的
    nortonlai
        86
    nortonlai  
       2020-09-03 19:12:36 +08:00 via Android
    @KENNHI 真的吗? springboot 我生产 50m 都跑的好好的,怎么就动不动几百了
    tairan2006
        87
    tairan2006  
       2020-09-03 20:28:56 +08:00 via Android
    @chihiro2014 老弟你是真不懂啊…自己去谷歌吧,从 netty 转向 go 之后,写网络应用我再也没加过班了,早学早摸鱼。
    chihiro2014
        88
    chihiro2014  
       2020-09-03 21:49:35 +08:00
    @tairan2006 并不觉得 go 有多么好
    u823tg
        89
    u823tg  
       2020-09-03 22:34:12 +08:00
    @chihiro2014 #88 go 的确不是多么好,但是省时间效率还不错。
    gaius
        90
    gaius  
       2020-09-04 01:18:08 +08:00 via Android
    -xmx120m 不就完事了
    KENNHI
        91
    KENNHI  
       2020-09-04 08:42:18 +08:00
    @nortonlai 一个简单的博客程序跑起来吃 500M,可能是我的问题吧
    都说了懒得调,jvm 调优在我这算是高级技术了,我是真小白。helloworld 我瞎说的
    另外提一下,跑 Java 的公司真在乎几百 M 内存?几十 G 都不够了自然会请人来调优的
    chengquan17
        92
    chengquan17  
       2020-09-04 09:33:21 +08:00
    @fallinlovewith 被你笑死了
    EscYezi
        93
    EscYezi  
       2020-09-04 10:47:55 +08:00 via iPhone
    要不要试试 quarkus ?
    raptor
        94
    raptor  
       2020-09-04 11:40:23 +08:00
    @gz911122 二者设计思路的不同吧。MySQL 的 MyISAM 的内存占用也比较小(但还是不如 PG ),但是功能就比 InnoDB 差太多了。
    troywinter
        95
    troywinter  
       2020-09-04 12:49:22 +08:00
    你把 CLR 和 java 的内存 allocation 速度做个对比,再把 java1.0 的代码和.net 1.0 的代码跑在最新版的 java 和.net core 对比一下性能
    troywinter
        96
    troywinter  
       2020-09-04 12:51:28 +08:00
    charlie21
        97
    charlie21  
       2020-09-04 21:54:15 +08:00
    二三线城市没有 golang
    forgottencoast
        98
    forgottencoast  
       2020-09-15 22:53:27 +08:00
    @quan01994 #46
    @iamverylovely #67
    @no1xsyzy #79
    The Common Language Runtime (CLR), the virtual machine component of Microsoft .NET framework, manages the execution of .NET programs.
    CLR implements the Virtual Execution System (VES) as defined in the Common Language Infrastructure (CLI) standard, initially developed by Microsoft itself. A public standard defines the Common Language Infrastructure specification.
    With Microsoft's move to .NET Core, the CLI VES implementation is known as CoreCLR instead of CLR.
    https://en.wikipedia.org/wiki/Common_Language_Runtime

    A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode.
    https://en.wikipedia.org/wiki/Java_virtual_machine
    no1xsyzy
        99
    no1xsyzy  
       2020-09-20 12:29:14 +08:00
    @forgottencoast 问题是形而上的 “虚拟机” 概念是什么意思
    形而下地说,JVM 和 CLR 的工作方式确实显著地不同。CLR 在加载时整体 JIT,JVM 是之后才引入的(基于热点还是缓存的?) JIT 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   960 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:11 · PVG 05:11 · LAX 13:11 · JFK 16:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.