java新特性
- 虚拟线程
- record模式
- 有序集合
- instanceof
- switch
- http client
- 文本块
- jwebserver
- jshell
- java Hello.java 无需编译,直接执行
- 反序列化过滤器
- ScopedValue
- 更有用的 NullPointerExceptions(在同一行告诉哪个对象是null)
- NumberFormat,如12345 -> 12.3K
- var变量
- String strip() repeat()
官网
本地配置
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 倍。
对比
jvm运行方式
内存占用69M
native运行方式
内存占用2M