支持unicode 11
JDK 12版本包括对Unicode 11.0.0的支持。在发布支持Unicode 10.0.0的JDK 11之后,Unicode 11.0.0引
入了以下JDK 12中包含的新功能:
684 new characters
11 new blocks
7 new scripts.
其中:
684个新字符,包含以下重要内容:
66个表情符号字符(66 emoji characters)
Copyleft符号(Copyleft symbol)
评级系统的半星(Half stars for rating systems)
额外的占星符号(Additional astrological symbols)
象棋中国象棋符号(Xiangqi Chinese chess symbols)
7个新脚本:
Hanifi Rohingya
Old Sogdian
Sogdian
Dogra
Gunjala Gondi
Makasar
Medefaidrin
11个新块,包括上面列出的新脚本的7个块和以下现有脚本的4个块:
格鲁吉亚扩展(Georgian Extended)
玛雅数字(Mayan Numerals)
印度Siyaq数字(Indic Siyaq Numbers)
国际象棋符号(Chess Symbols)
支持压缩数字格式化
NumberFormat 添加了对以紧凑形式格式化数字的支持。
@Test
public void testCompactNumberFormat(){
var cnf = NumberFormat.getCompactNumberInstance(Locale.CHINA,
NumberFormat.Style.SHORT);
System.out.println(cnf.format(1_0000));
System.out.println(cnf.format(1_9200));
System.out.println(cnf.format(1_000_000));
System.out.println(cnf.format(1L << 30));
System.out.println(cnf.format(1L << 40));
System.out.println(cnf.format(1L << 50));
}
输出
1万
2万
100万
11亿
1兆
1126兆
增加项:String新增方法
- String的transform(Function)
var result = "foo"
.transform(input -> input + " bar")
.transform(String::toUpperCase)
System.out.println(result); // FOO BAR
- String的indent方法,调整String实例的缩进。
private static void testIndent() {
System.out.println("======test java 12 indent======");
String result = "Java
Python
C++".indent(3);
System.out.println(result);
}
Files新增mismatch方法,文件内容比对
public void testFilesMismatch() throws IOException {
FileWriter fileWriter = new FileWriter("tmp\a.txt");
fileWriter.write("a");
fileWriter.write("b");
fileWriter.write("c");
fileWriter.close();
FileWriter fileWriterB = new FileWriter("tmp\b.txt");
fileWriterB.write("a");
fileWriterB.write("1");
fileWriterB.write("c");
fileWriterB.close();
System.out.println(Files.mismatch(Path.of("tmp/a.txt"),Path.of("tmp/b.txt")));
}
其他新增项
- Collectors新增teeing方法用于聚合两个downstream的结果
- CompletionStage新增exceptionallyAsync、exceptionallyComposeAsync方法,允许方法体在异步线程执
行,同时新增了exceptionallyCompose方法支持在exceptionally的时候构建新的CompletionStage。 - ZGC: Concurrent Class Unloading
- ZGC在JDK11的时候还不支持class unloading,JDK12对ZGC支持了Concurrent Class Unloading,默认是
开启,使用-XX:-ClassUnloading可以禁用
- ZGC在JDK11的时候还不支持class unloading,JDK12对ZGC支持了Concurrent Class Unloading,默认是
- 新增-XX:+ExtensiveErrorReports
- -XX:+ExtensiveErrorReports可以用于在jvm crash的时候收集更多的报告信息到hs_err.log文件中,
product builds中默认是关闭的,要开启的话,需要自己添加-XX:+ExtensiveErrorReports参数
- -XX:+ExtensiveErrorReports可以用于在jvm crash的时候收集更多的报告信息到hs_err.log文件中,
- 新增安全相关的改进
- 支持java.security.manager系统属性,当设置为disallow的时候,则不使用SecurityManager以提升性
能,如果此时调用System.setSecurityManager则会抛出UnsupportedOperationExceptionkeytool新增-
groupname选项允许在生成key pair的时候指定一个named group新增PKCS12 KeyStore配置属性用于自
定义PKCS12 keystores的生成Java Flight Recorder新增了security-related的event支持ChaCha20 and
Poly1305 TLS Cipher Suites
- 支持java.security.manager系统属性,当设置为disallow的时候,则不使用SecurityManager以提升性
移除项
- 移除com.sun.awt.SecurityWarnin;
- 移除FileInputStream、FileOutputStream、- Java.util.ZipFile/Inflator/Deflator的finalize方法;
- 移除GTE CyberTrust Global Root;
- 移除javac的-source, -target对6及1.6的支持,同时移除--release选项;
废弃项
- 废弃的API列表见deprecated-list
- 废弃-XX:+/-MonitorInUseLists选项
- 废弃Default Keytool的-keyalg值