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

有 jdk11 的开源项目吗(非 demo)

  •  
  •   SkyLine7 · 2021-01-07 13:45:09 +08:00 · 3450 次点击
    这是一个创建于 1403 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直用的 jdk8,想学习一下 jdk11 的新特性. 1.jdk8 升级到 jdk11 性能提升大吗? 2.jdk8 升级到 jdk11 需要做哪些操作,改动的点? 3.jdk9 中的模块化拆包如何运用到真实的商业项目中

    21 条回复    2021-01-12 15:05:01 +08:00
    hihanley
        1
    hihanley  
       2021-01-07 13:51:03 +08:00
    同样想了解
    hantsy
        2
    hantsy  
       2021-01-07 13:55:27 +08:00
    商业项目有什么,我可以帮升到 15 。
    echo1937
        3
    echo1937  
       2021-01-07 14:22:04 +08:00
    用 JDK15 跑了一下用 JDK8 开发的项目,啥问题也没发现,挺意外的。

    明年下半年一定要把开发环境迁移到 JDK17 。
    hantsy
        4
    hantsy  
       2021-01-07 14:33:04 +08:00
    关键语法上还是有差别的。Java 11 - 15 以后的一些小特性,还是不错。

    比如:Text Block, var, Map.of/List.of/Set.of, record 等。

    https://github.com/hantsy/spring-playground/blob/master/programming-models/webmvc-fn/src/main/java/com/example/demo/DemoApplication.java
    SkyLine7
        5
    SkyLine7  
    OP
       2021-01-07 14:36:40 +08:00
    @echo1937 有用到 jdk11 的新特性吗?
    hantsy
        6
    hantsy  
       2021-01-07 14:36:43 +08:00
    Java Module 目前大部分开源的项目已经添加 module 描述,包括 Spring 。

    一句话,不好用。

    目前 jmps 的依赖解析也比较松散,没有 module 描述也会自动解析。 到后面这规肯定会严格起来。
    SkyLine7
        7
    SkyLine7  
    OP
       2021-01-07 14:38:06 +08:00
    @hantsy 好的,老哥有这方面的项目吗
    hantsy
        8
    hantsy  
       2021-01-07 14:42:35 +08:00
    @SkyLine7 生产项目我早就上 Java 11 了。
    个人玩一直在尝试最新的 Java 。上面的连接 是 Java 15 写的,用了新语法( text block, record 等)。
    qwerthhusn
        9
    qwerthhusn  
       2021-01-07 14:46:38 +08:00
    从 Java8 到 11 升级不需要修改任何代码,语法上也基本上没有变化,我能想到的就是 var 了,不过这个你可以选择不用,我也很少用。module 也没使用,不影响使用 11 。

    反正我的感觉是 8 到 11 没有啥大的新东西可以用。

    升级的话,唯一可能需要注意的就是第三方依赖,有些依赖比较陈旧不支持 11
    xuweifeng1987
        10
    xuweifeng1987  
       2021-01-07 14:54:01 +08:00
    元旦节 jdk8---》 jdk11,一个字符都没改,完美
    echo1937
        11
    echo1937  
       2021-01-07 14:55:06 +08:00
    @SkyLine7 #5 我大部分情况下,是用 JDK15 的环境写 JDK8 的代码,

    JDK9,集合类型有了 copyOf 和 of 方法,但我还是在用 Guava,

    JDK10,局部变量支持类型推导 var,我还是习惯写全类型,或者使用 Lombok,

    JDK11,有了新的 HttpClient API,本想替换掉第三方的 HttpClient API,但是引入的包有附带依赖,那继续用吧,

    简单来说,需要一个适用的过程,我最喜欢的还是 Text Block 。
    hantsy
        12
    hantsy  
       2021-01-07 16:09:05 +08:00
    @qwerthhusn 8-》 11 细节上的东西还是有不少。
    1. var
    2. Collection 的 of 工厂方法
    3. Optional, Stream 等增强,更方便
    4. HttpClient, Flow(ReactiveStreams API 克隆)
    hantsy
        13
    hantsy  
       2021-01-07 16:09:26 +08:00
    @echo1937 record, sealed 都实用
    hantsy
        14
    hantsy  
       2021-01-07 16:18:26 +08:00
    @echo1937 实际项目中新 Java 版本运行有没有问题,丢给 CI 就好了。
    industryhive
        15
    industryhive  
       2021-01-07 17:01:29 +08:00
    java8 的 Hotspot 几乎已经优化到了极限,升级到 java11,性能提升很小,大概只有 16%。要想继续挖掘优化潜力,还得看 graalvm 。
    hantsy
        16
    hantsy  
       2021-01-07 18:44:51 +08:00
    @industryhive 对于开发而言,我没指望过性能提升。语言本身相关的语法的进化才是我关心的关键点。

    至于 16%嘛,我个人表示很怀疑。因为看过国内外的一些常见 Java 框架的使用的不同的 JDK 的 Benchmark 结果情况,基本不会有什么很大提高(大部分情况下差不多),个别测试反而 Java 8 占优势。

    为什么要升级,Java 11 写程序更爽,就这么简单。
    SkyLine7
        17
    SkyLine7  
    OP
       2021-01-08 09:07:57 +08:00
    @echo1937 好的,也就是说升级了版本,还是很多版本新特性没用上
    echo1937
        18
    echo1937  
       2021-01-08 09:21:20 +08:00
    @SkyLine7 #17 习惯是很可怕的东西,组里的有些同事,JDK8 的 Steam API 和 Lambda 都用不利索
    byte10
        19
    byte10  
       2021-01-08 11:29:33 +08:00
    @qwerthhusn 不是向下兼容吗,啥项目不能使用 11 运行。
    tmackan
        20
    tmackan  
       2021-01-08 16:21:23 +08:00
    Java8 不挺好吗。。。。
    SkyLine7
        21
    SkyLine7  
    OP
       2021-01-12 15:05:01 +08:00
    @byte10 很多第三方配置文件要改,jar 包要升级
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5771 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:46 · PVG 09:46 · LAX 17:46 · JFK 20:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.