GraalVM体验及java新特性

143 阅读1分钟

java新特性

java new feature

  • 虚拟线程
  • record模式
  • 有序集合
  • instanceof
  • switch
  • http client
  • 文本块
  • jwebserver
  • jshell
  • java Hello.java 无需编译,直接执行
  • 反序列化过滤器
  • ScopedValue
  • 更有用的 NullPointerExceptions(在同一行告诉哪个对象是null)
  • NumberFormat,如12345 -> 12.3K
  • var变量
  • String strip() repeat()

官网

quick start

本地配置

source ~/.bash_profile

export JAVA_11_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.7.jdk/Contents/Home
export JAVA_21_HOME=/Library/Java/JavaVirtualMachines/jdk-21.0.1.jdk/Contents/Home
export GRAAL_21_HOME=/Library/Java/JavaVirtualMachines/graalvm-jdk-21.0.1+12.1/Contents/Home
alias jdk11='export JAVA_HOME=${JAVA_11_HOME};export PATH=${JAVA_HOME}/bin:$PATH;echo `java -version`'
alias jdk21='export JAVA_HOME=${JAVA_21_HOME};export PATH=${JAVA_HOME}/bin:$PATH;echo `java -version`'
alias graal21='export JAVA_HOME=${GRAAL_21_HOME};export PATH=${JAVA_HOME}/bin:$PATH;echo `java -version`'
graal21

代码

import java.util.concurrent.TimeUnit;

public class Hello {
    public static void main(String[] args) {
        System.out.println("hello world");
        try {
            TimeUnit.HOURS.sleep(1);
        } catch (Exception e) {
            // TODO: handle exception
        }
        
    }
}

编译运行

javac HelloWorld.java
# 耗时竟然达25s之多,会生成可执行文件
native-image HelloWorld

time ./helloworld
time java HelloWorld

从下图可以看到,运行性能还是比字节码快得多。0.082s -> 0.013s。简单的 hello world 性能提升 8 倍。

image.png

对比

jvm运行方式

内存占用69M image.png

native运行方式

内存占用2M image.png