V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yunv2
V2EX  ›  程序员

关于 cpu 性能和 Java 编译速度的问题

  •  
  •   yunv2 · 2024-05-17 13:15:14 +08:00 · 4462 次点击
    这是一个创建于 449 天前的主题,其中的信息可能已经有所发展或是发生改变。
    笔记本处理器是 7840H ( win11 ),台式机处理器是 5700G ( win10 ),硬盘都是 M2 SSD ;

    使用 maven 编译项目时,jdk 版本相同,5700G 是 30s ,7840H 是 37s (已调整到性能模式);
    查看功耗释放,7840H 编译时 40-50w 左右;

    执行的命令是 mvn clean compile ;

    疑问是 7840H 的 cpu 跑分性能(比如 R23 ,cpuz )都高于 5700G ,
    为什么在编译时,速度慢于 5700G ?
    java 的编译速度,到底与什么有关系?
    在网上查询过相关的内容,只是说 Linux 环境编译速度要快于 windows ,并没有这种问题的说明。
    有没有知道的大佬,能解释一下?谢谢
    44 条回复    2024-05-20 16:03:46 +08:00
    sun1991
        1
    sun1991  
       2024-05-17 13:19:29 +08:00
    硬盘呢?
    yunv2
        2
    yunv2  
    OP
       2024-05-17 13:22:42 +08:00
    @sun1991 硬盘都是 M2 SSD ,笔记本是自带的普通 PCIE4.0 ,台式机是 KC2000
    seaswalker
        3
    seaswalker  
       2024-05-17 13:26:21 +08:00 via Android   ❤️ 1
    没啥用,估计照样不如 m1 快
    IvanLi127
        4
    IvanLi127  
       2024-05-17 13:30:42 +08:00
    前端代码在 Windows 下编译也慢,在 WSL 里反到快。感觉和硬件没啥关系。op 可以试试 WSL 里是不是也会快些。
    F281M6Dh8DXpD1g2
        5
    F281M6Dh8DXpD1g2  
       2024-05-17 13:44:39 +08:00
    把编译目录加到防病毒的例外里面
    yunv2
        6
    yunv2  
    OP
       2024-05-17 13:49:38 +08:00
    @IvanLi127 在虚拟机的 linux 环境中试过,速度确实要快
    yunv2
        7
    yunv2  
    OP
       2024-05-17 13:50:05 +08:00
    @liprais 项目路径都已添加例外
    kanepan19
        8
    kanepan19  
       2024-05-17 13:55:59 +08:00
    还有个说法是 amd 在 win10 下性能比 win11 好
    具体没验证过
    cnbatch
        9
    cnbatch  
       2024-05-17 14:00:49 +08:00   ❤️ 1
    打开任务管理器,编译时看看 CPU 频率变动,主要看笔记本电脑有没有降频
    散热不好时 CPU 会主动降频的
    MrKrabs
        10
    MrKrabs  
       2024-05-17 14:10:21 +08:00
    编译吃的是通用性能 so please buy Apple Silicon
    kenvix
        11
    kenvix  
       2024-05-17 14:16:19 +08:00   ❤️ 20
    别人问原因和解决办法,你 v 的无脑果粉是搁这儿疯狂无脑安利苹果,属实逆天😅
    kenvix
        12
    kenvix  
       2024-05-17 14:17:45 +08:00
    试着将电源计划改为卓越性能。

    yazinnnn0
        13
    yazinnnn0  
       2024-05-17 14:24:00 +08:00
    编译时 cpu 都跑满了吗?
    youmilk
        14
    youmilk  
       2024-05-17 14:25:20 +08:00
    跟杀毒软件也有关
    paopjian
        15
    paopjian  
       2024-05-17 14:26:31 +08:00
    变数太多了,跑分高说明综合性能高,而且你这内存频率 硬盘速率什么的额估计也不一样吧, 试试做个内存盘编译个 10 分钟左右的代码?
    chendy
        16
    chendy  
       2024-05-17 14:26:44 +08:00   ❤️ 1
    核心数一样,5700G 频率略低,但是功率更高,所以可能就差在这里了?
    编译涉及到的东西太多了,从硬件到系统到软件一串东西每个都可能有影响,所以定位瓶颈不是很好弄
    比如我手里的一个项目,全量编译一轮要 5 分钟,后来把编译器最大内存设置高了就变 30 秒了

    另外吐槽一下提苹果的,楼主也没提苹果设备关苹果啥事
    再吐槽一个提 M1 的,后续型号不清楚,我手里的 M1 纯编译速度比不过同时期旗舰 win 本,只是能效领先很多而已
    Goooooos
        17
    Goooooos  
       2024-05-17 14:27:11 +08:00
    WindowsDefender 的排除下相关目录
    BBCCBB
        18
    BBCCBB  
       2024-05-17 14:50:01 +08:00
    cpu 分别多少 GHz?
    wxyz
        19
    wxyz  
       2024-05-17 14:58:09 +08:00
    1 、检查下是否开启了多线程编译(-T 1C );
    2 、检查网络环境和编译日志,是否涉及下载依赖;
    3 、检查磁盘性能是否一致;
    diagnostics
        20
    diagnostics  
       2024-05-17 15:08:04 +08:00
    @kenvix #12 7840H 是 37s (已调整到性能模式);???

    你喷别人无脑果粉,别人提了编译是吃通用性能呀?你不会有阅读障碍吧? OP 的内容没看到,别人的回复也没看到,还是你选择性忽略,只觉得自己就是对的。
    conglovely
        21
    conglovely  
       2024-05-17 15:08:40 +08:00
    电源模式->卓越性能 试试
    diagnostics
        22
    diagnostics  
       2024-05-17 15:10:15 +08:00
    还有一个,heap 大小也会影响编译性能,尤其是越大型的项目越明显。可以在环境变量里加 JAVA_OPTS=xxxx 试试看,毕竟 Maven 也是 Java 写的
    249239432
        23
    249239432  
       2024-05-17 15:28:44 +08:00
    笔记本的 cpu 就算高性能在负载满的情况下,过热也会降频的,看任务管理器就看出来了
    如果不是,那就看看是不是 win11 写数据的时候导致变慢了
    https://finance.sina.com.cn/tech/2021-12-10/doc-ikyakumx3179114.shtml
    还不是,那就问别人
    kenvix
        24
    kenvix  
       2024-05-17 16:39:24 +08:00
    @diagnostics #20 哈哈,这就对号入座了?
    kenvix
        25
    kenvix  
       2024-05-17 16:39:55 +08:00
    @diagnostics #20 果粉是真的一点 Windows 都不会用啊,到现在都分不清性能模式和卓越性能的区别🤣🤣🤣
    diagnostics
        26
    diagnostics  
       2024-05-17 17:23:02 +08:00
    @kenvix #25

    卓越性能默认隐藏(要不是你这回复,我还真不知道)

    平时确实用 mac ,Win 只在台式,没调过这个(不过我很好奇,一个非移动端基数如此庞大的市场,把一个性能按钮隐藏的这么深?对于台式机,默认策略也是降频的?)

    我确实看不上 Win ,不只是因为我用 mac ,而是因为我用了 15 年的 win ,我大二直到乃至工作后 2 年都一直是用 Linux ,从 Manjaro 到 Ubuntu 。

    另外你又选择性忽略了,查看功耗释放,7840H 编译时 40-50w 左右;

    卓越性能会比这个数据好多是? 5700G 的功耗也才 45w (如果我没记错)
    diagnostics
        27
    diagnostics  
       2024-05-17 17:34:53 +08:00
    @kenvix #25 另外,如果你没有生理性的疾病的话,那我觉得你比“你认为的跟风 X 、无脑 X 粉”更无脑一点。

    跟风,无脑粉主要有两种原因:

    1. 认知问题:不是每个人都有机会认识到世界,能翻出来的有多少?
    2. 社会认同和归属感:类似于小米粉丝,寻求与其他相同支持者建立联系,以获得社会认同和归属感。

    大众盲目,和小众的盲目都是寻求认同感的一种体现而已,Linux 狂热者(也就是标新立异的那一种),因为学 CS 我也短暂成为后者,我反思,意识到要从自身体会出发,独立思考。

    而你,只会给人贴标签( XX 粉,无脑 XX ),你和标新立异,或者说寻求社会认同的人有啥区别?你实际用过 Apple 产品,对比两者吗,引出自己的独立思考了吗?我自己就去年用了一年安卓手机,还发了对比评价了。

    再例如你的 Github ,你所谓的很多开源大佬,都只是因为工作需要维护,或者给自己一些名声而开源罢了,也有很多大佬不玩开源的。( ps ,我也是因为工作需要,维护了一个 Apache 项目)
    seaswalker
        28
    seaswalker  
       2024-05-17 17:37:23 +08:00 via Android
    Mac 确实快,这事我也折腾过,32g 内存+80w 的 5700g 照样被 m1 mbp 吊打
    seaswalker
        29
    seaswalker  
       2024-05-17 17:38:31 +08:00 via Android
    @seaswalker 但是在 wsl2 中执行编译,速度就和 Mac 一样了,所以,是 windows 的锅
    kenvix
        30
    kenvix  
       2024-05-17 19:45:40 +08:00 via Android
    @diagnostics 😋哥们可没有指名骂人哦,宁自己喜欢对号入座那怎么办
    wxf666
        31
    wxf666  
       2024-05-17 20:54:19 +08:00
    不懂就问,Java 编译很复杂吗?不是简单翻译到字节码而已吗?

    复杂的应该都在 JIT 时吧?搜集信息,实时优化,编译成 CPU 指令啥的?


    那应该能参考 TinyCC 的编译速度?毕竟这货也不怎么优化代码,效率和 gcc -O0 相当。。

    即,二十年前的 奔腾 4 CPU ,能(单线程)每秒编译 100W 行 C99 代码成 x86 指令?


    那 Java 项目即使有过亿行代码,现代 8 核电脑,最多不也就等待 10 秒钟,就能编译完成了吗?

    楼主为啥那么在意呢。。

    F281M6Dh8DXpD1g2
        32
    F281M6Dh8DXpD1g2  
       2024-05-17 21:07:34 +08:00
    @wxf666 果然是以不懂就问开头的人既不懂也不问
    wxf666
        33
    wxf666  
       2024-05-17 21:16:16 +08:00
    @liprais #32 和楼主问的并不 100% 相关,只是有些联系。

    想问的就是,Java 编译应该已经足够快了,还这么在意这个干啥?

    就好比,现在 CPU 内存 硬盘,都很强了,结果还有人天天在意,PC 软件那几 KB 体积啥的。。

    见到这种情况,你不会产生疑问吗?
    yeqizhang
        34
    yeqizhang  
       2024-05-17 21:36:00 +08:00 via Android
    @wxf666 有没有可能,楼主不是在意这个编译的时间差,而是对 cpu 性能以及跑分存在疑问
    fredcc
        35
    fredcc  
       2024-05-17 23:14:01 +08:00   ❤️ 1
    因为没有提到实际机型,以下均为猜测。
    op 的 7840hs 是笔记本上的,而 5700G 是台式机,散热能力不同。功耗释放 40-50w 是达不到 7840hs 的完整性能的。以其他笔记本的评测参考,笔记本性能释放 40-45w 时 R23 循环跑分多线程也就在 1w4 到 1w5 之间,比 5700G 相差不大。你可以编译时用工具看下 7840hs 的功耗和温度曲线呢。
    geekvcn
        36
    geekvcn  
       2024-05-18 01:13:09 +08:00
    台式机内存跑在 1:1 模式,笔记本为了省电内存跑在 2:1 甚至 4:1 模式,编译不但是计算密集型还是 IO 密集型任务
    msg7086
        37
    msg7086  
       2024-05-18 04:06:17 +08:00
    @wxf666 #31 不太清楚楼主说的编译是不是只是说编译。一般项目构建的时候不光要编译,还要执行测试,生成测试覆盖报告,生成 javadoc ,打包二进制等等其他步骤。如果只是做编译,上百个文件也就几秒钟编译完了。
    wssy001
        38
    wssy001  
       2024-05-18 08:42:35 +08:00
    建议用 `mvn clean compile -T 1C` 这样可以调用全核资源进行编译 我这边用一个微服务项目测试了一下不带`-T 1C`参数和带了的区别 前者耗时 `27.043 s`,后者耗时`12.091 s` 测试`CPU` 为 `M3 Pro`
    katfao
        39
    katfao  
       2024-05-18 12:03:38 +08:00 via Android
    7840h 作为笔记本 u ,性能比起散热,供电充足的 5700g 确实有一定差距。
    gongxuanzhang
        40
    gongxuanzhang  
       2024-05-18 12:07:54 +08:00
    个人感受 m 芯片降维打击英特尔
    MrKrabs
        41
    MrKrabs  
       2024-05-18 16:37:53 +08:00
    @kenvix 我的解决办法是 please buy caskets for your family
    secondwtq
        42
    secondwtq  
       2024-05-18 21:48:01 +08:00
    @yunv2
    #6 这个可以挖一挖:给两边准备同样的虚拟机 Linux 镜像与相同版本的虚拟机软件跑编译,结果是怎样的,依然是 7840H 比 5700G 慢么?
    diagnostics
        43
    diagnostics  
       2024-05-18 23:46:38 +08:00
    @kenvix 国家有这样的年轻人,肯定越来越好的,抛开一切事实不谈,就谈情绪~
    kenvix
        44
    kenvix  
       2024-05-20 16:03:46 +08:00
    @MrKrabs #37 ハーハーイットシームズザットユーリアリーライクタースピークウィズチャイニーズアンドイングリッシュミクストキャンユースピークチャイニーズライクアーヒューマン 😁?
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1096 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:19 · PVG 02:19 · LAX 11:19 · JFK 14:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.