Skip to content
Open
Changes from 1 commit
Commits
Show all changes
349 commits
Select commit Hold shift + click to select a range
d5d61b3
[feat]MySQL三大日志(binlog、redo log和undo log)
Snailclimb Aug 15, 2021
b46a3c3
[feat]java9 新特性完善
Snailclimb Aug 16, 2021
814780f
[feat]java10,11 新特性完善
Snailclimb Aug 16, 2021
ef5e010
Merge pull request #1320 from kaka2634/master
Snailclimb Aug 16, 2021
e4bb8f8
[fix]字符串拼接图片修正
Snailclimb Aug 17, 2021
c1b2be0
Update 一文带你看遍JDK9到14的重要新特性.md
Snailclimb Aug 17, 2021
e7e8d48
[feat] Java13新特性重构
Snailclimb Aug 18, 2021
801c220
[feat] Java14新特性重构
Snailclimb Aug 18, 2021
7f853ef
Update zookeeper-plus.md
ObSob Aug 19, 2021
22a16d6
Merge pull request #1326 from ObSob/patch-1
Snailclimb Aug 19, 2021
1bfc5c1
[feat]Java 15 新特性总结
Snailclimb Aug 20, 2021
d535742
Update README.md
Snailclimb Aug 21, 2021
7a16bb8
Update 代理模式详解.md
Aaron-Ge Aug 22, 2021
2cc2d9a
[refractor&feat]数据结构完善&文件夹重构
Snailclimb Aug 23, 2021
fa7ca13
Update java新特性总结.md
Aug 23, 2021
e8cbc06
Update java新特性总结.md
Aug 23, 2021
40a7fcb
Update java新特性总结.md
Aug 23, 2021
46ad9b4
Update linux.md
lllidany Aug 23, 2021
df923e6
Merge pull request #1331 from Aaron-Ge/master
Snailclimb Aug 23, 2021
c8f7777
Merge pull request #1335 from lllidany/master
Snailclimb Aug 23, 2021
a5ce875
Merge pull request #1332 from anaer/patch-1
Snailclimb Aug 23, 2021
d7356a0
Update Java基础知识.md
Aug 24, 2021
c58b5a2
Update Shell.md
Aug 24, 2021
39836b0
Update Shell.md
Aug 24, 2021
d8cae22
Update naming.md
Aug 24, 2021
b55ee4a
Update Spring常见问题总结.md
Aug 24, 2021
e69859b
[feat]修复链接错误
Snailclimb Aug 24, 2021
64fb03b
Update java8-common-new-features.md
Aug 25, 2021
dfda4a4
Update IO模型.md
Aaron-Ge Aug 25, 2021
413e15c
修改布隆过滤器一文链接地址
debugjoker Aug 26, 2021
b5db9e9
跳转链接格式处理
debugjoker Aug 26, 2021
b552b3f
校正
chengcjk Aug 26, 2021
f25a32d
[refractor]移除集合部分内容,单独整理
Snailclimb Aug 26, 2021
a057eda
[feat]Java集合使用注意事项总结
Snailclimb Aug 26, 2021
08e27ac
Merge pull request #1342 from anaer/patch-10
Snailclimb Aug 26, 2021
c1288b8
Merge pull request #1348 from chengcjk/master
Snailclimb Aug 26, 2021
2e1a32b
Merge pull request #1347 from debugjoker/patch-2
Snailclimb Aug 26, 2021
197212b
Merge pull request #1346 from debugjoker/patch-1
Snailclimb Aug 26, 2021
7c23c88
Merge pull request #1345 from Aaron-Ge/master
Snailclimb Aug 26, 2021
8e83b3a
Merge pull request #1339 from anaer/patch-9
Snailclimb Aug 26, 2021
5e2ed4c
Merge pull request #1338 from anaer/patch-8
Snailclimb Aug 26, 2021
6516038
Merge pull request #1337 from anaer/patch-7
Snailclimb Aug 26, 2021
5b3fec4
Merge pull request #1336 from izhengchengjin/patch-1
Snailclimb Aug 26, 2021
c2f10ad
Delete ThreadLocal(未完成).md
Snailclimb Aug 26, 2021
5014c53
Update 如何设计一个亿级网关.md
Aug 27, 2021
c1a239a
补充丢失的文字
Aug 27, 2021
76ef548
错别字
chengcjk Aug 27, 2021
b982a6e
[feat] add 灾备设计&异地多活
Snailclimb Aug 27, 2021
4baeecd
Update [加餐]大白话带你认识JVM.md
liukun2634 Aug 27, 2021
1741a67
Update [加餐]大白话带你认识JVM.md
liukun2634 Aug 27, 2021
06baca5
Merge pull request #1350 from anaer/patch-11
Snailclimb Aug 28, 2021
47aad33
Merge pull request #1352 from chengcjk/master
Snailclimb Aug 28, 2021
3055a04
Merge pull request #1351 from rocky-peng/patch-3
Snailclimb Aug 28, 2021
b4a9f12
Merge pull request #1353 from kaka2634/master
Snailclimb Aug 28, 2021
20cb19b
Update naming.md
Aug 30, 2021
bd6443f
Update JAD反编译tricks.md
Aug 30, 2021
d8be08b
Update JWT优缺点分析以及常见问题解决方案.md
Aug 30, 2021
2e7f5c4
Merge pull request #1354 from anaer/patch-12
Snailclimb Aug 30, 2021
050d306
Merge pull request #1355 from anaer/patch-13
Snailclimb Aug 30, 2021
4656fd9
Merge pull request #1356 from anaer/patch-14
Snailclimb Aug 30, 2021
4189bbe
Update Java集合框架常见面试题.md
Snailclimb Aug 31, 2021
24f27e5
Update RabbitMQ入门看这一篇就够了.md
Aug 31, 2021
bdcd1af
Update IO模型.md
Sep 1, 2021
e534636
Update 代理模式详解.md
Sep 1, 2021
0222e9c
Update BIO,NIO,AIO总结.md
Sep 1, 2021
ffe1c91
Update BIO,NIO,AIO总结.md
Sep 1, 2021
ce6daf1
Create CompletableFuture从入门到实战.md
Snailclimb Sep 1, 2021
4cf77fb
Update 数据库基础知识.md
fengx20 Sep 1, 2021
f0683e5
[feat]CompletableFuture入门
Snailclimb Sep 2, 2021
576e5df
[feat]CompletableFuture入门
Snailclimb Sep 2, 2021
81422c6
Merge pull request #1357 from anaer/patch-16
Snailclimb Sep 2, 2021
f7cc597
Merge pull request #1358 from anaer/patch-17
Snailclimb Sep 2, 2021
a6a0782
Merge pull request #1359 from anaer/patch-18
Snailclimb Sep 2, 2021
d89366f
Merge pull request #1360 from anaer/patch-19
Snailclimb Sep 2, 2021
ec42874
Update RESTfulAPI简明教程.md
Sep 3, 2021
03ba6d7
Merge pull request #1363 from anaer/patch-20
Snailclimb Sep 5, 2021
619be0f
Merge pull request #1361 from fengx20/patch-1
Snailclimb Sep 5, 2021
de32126
Update 万字详解ThreadLocal关键字.md
Sep 6, 2021
7bddf34
Update JDK监控和故障处理工具总结.md
Sep 6, 2021
cc5f281
Update java新特性总结.md
Snailclimb Sep 6, 2021
c656dd8
Update Java基础知识疑难点.md
weixsun Sep 6, 2021
b5b446f
Update 数据库基础知识.md
linzlb Sep 7, 2021
2f974f4
Update Java基础知识.md
Sep 7, 2021
4066882
Update 用好Java中的枚举真的没有那么简单.md
Sep 7, 2021
2e6bf93
Update Spring事务总结.md
weixsun Sep 7, 2021
00422da
Update Spring事务总结.md
weixsun Sep 7, 2021
9b358a9
Update Spring事务总结.md
weixsun Sep 7, 2021
e3da427
Update CAP理论.md
Sep 7, 2021
6842592
Merge pull request #1364 from anaer/patch-21
Snailclimb Sep 7, 2021
376b389
Merge pull request #1365 from anaer/patch-22
Snailclimb Sep 7, 2021
abcd7bf
Merge pull request #1367 from weixsun/Update-Java-基础知识疑难点
Snailclimb Sep 7, 2021
eaf0fb4
Merge pull request #1368 from linzlb/patch-1
Snailclimb Sep 7, 2021
a6abed3
Merge pull request #1369 from anaer/patch-23
Snailclimb Sep 7, 2021
614a292
Merge pull request #1370 from anaer/patch-24
Snailclimb Sep 7, 2021
232ae9b
Merge pull request #1371 from weixsun/Update-Spring事务总结
Snailclimb Sep 7, 2021
545ddee
Merge pull request #1372 from anaer/patch-25
Snailclimb Sep 7, 2021
ada7691
Update README.md
weixsun Sep 7, 2021
7405817
Merge pull request #1373 from weixsun/Update-README
Snailclimb Sep 8, 2021
9f88ccb
Update Git.md
Sep 8, 2021
767f601
Update SpringBoot+Spring常用注解总结.md
Sep 8, 2021
4b87e9b
Merge pull request #1374 from anaer/patch-28
Snailclimb Sep 8, 2021
ac930c3
Merge pull request #1375 from anaer/patch-29
Snailclimb Sep 8, 2021
b9d3148
Update Java8新特性总结.md
Sep 9, 2021
0e2aeec
Update InnoDB对MVCC的实现.md
mo-nian Sep 9, 2021
a975e7d
Merge pull request #1 from mo-nian/mo-nian-patch-1
mo-nian Sep 9, 2021
9fa49af
Update SSO单点登录看这一篇就够了.md
Sep 9, 2021
54df60e
Update bloom-filter.md
Sep 9, 2021
6cdbe28
Update MySQL三大日志.md
ShiqiRao Sep 9, 2021
c9ea539
Update Docker.md
Sep 10, 2021
f077543
Update Docker从入门到实战.md
Sep 10, 2021
a999466
Merge pull request #1376 from anaer/patch-30
Snailclimb Sep 10, 2021
3988950
Merge pull request #1378 from mo-nian/master
Snailclimb Sep 10, 2021
ed6ed0f
Merge pull request #1379 from anaer/patch-31
Snailclimb Sep 10, 2021
8570b57
Merge pull request #1380 from anaer/patch-33
Snailclimb Sep 10, 2021
959753c
Merge pull request #1383 from nockyQ/patch-2
Snailclimb Sep 10, 2021
fb6a0d2
Merge pull request #1384 from anaer/patch-34
Snailclimb Sep 10, 2021
c5e03c7
Merge pull request #1385 from anaer/patch-35
Snailclimb Sep 10, 2021
ff5f4b0
Update Spring常见问题总结.md
huh0ngtao Sep 11, 2021
ffbcf71
Update java线程池学习总结.md
error0g Sep 11, 2021
219a006
Update Spring事务总结.md
error0g Sep 11, 2021
7fed7cc
typo
error0g Sep 11, 2021
44232fc
Update Spring常见问题总结.md
liukun2634 Sep 12, 2021
a7f8dfb
Merge pull request #1387 from hu-asc/master
Snailclimb Sep 13, 2021
a0e826b
Merge pull request #1388 from error0g/error0g-patch-1
Snailclimb Sep 13, 2021
6cc177a
Merge pull request #1390 from error0g/error0g-patch-3
Snailclimb Sep 13, 2021
ba32cba
Merge pull request #1392 from kaka2634/master
Snailclimb Sep 13, 2021
0ebf887
[fix]完全二叉树图片错误修复
Snailclimb Sep 13, 2021
1fdb7f1
[fix]线程池使用不当导致死锁图片修正
Snailclimb Sep 13, 2021
46146f8
[fix]数据可见性算法笔误&内容完善
Snailclimb Sep 13, 2021
c00721e
Update Java集合框架常见面试题.md
Aaron-Ge Sep 13, 2021
d740936
Merge branch 'Snailclimb:master' into master
Aaron-Ge Sep 13, 2021
87d31f1
Merge pull request #1393 from Aaron-Ge/master
Snailclimb Sep 13, 2021
b23da48
Update README.md
Snailclimb Sep 14, 2021
f949397
Update ConcurrentHashMap源码+底层数据结构分析.md
Snailclimb Sep 15, 2021
e4a4e1c
Update 最重要的JVM参数指南.md
Snailclimb Sep 15, 2021
4e2db76
Update Java基础知识.md
gongjixiaobai Sep 16, 2021
f6bbf59
Update 服务之间的调用为啥不直接用HTTP而用RPC.md
Sep 16, 2021
35a7876
Update 服务之间的调用为啥不直接用HTTP而用RPC.md
Sep 16, 2021
b412617
Update Dubbo.md
Sep 16, 2021
8ac6241
Update Kafka常见面试题总结.md
Sep 16, 2021
b0014ac
Update RocketMQ-Questions.md
Sep 16, 2021
90dd5e8
Update RocketMQ.md
Sep 16, 2021
d84f043
Update java新特性总结.md
Snailclimb Sep 16, 2021
225e998
Merge pull request #1398 from gongjixiaobai/patch-1
Snailclimb Sep 16, 2021
628f9e2
Merge pull request #1403 from anaer/patch-42
Snailclimb Sep 16, 2021
9cf981b
Merge pull request #1402 from anaer/patch-41
Snailclimb Sep 16, 2021
a98f58d
Merge pull request #1401 from anaer/patch-39
Snailclimb Sep 16, 2021
af57f15
Merge pull request #1400 from anaer/patch-38
Snailclimb Sep 16, 2021
79bcd3f
Merge pull request #1399 from anaer/patch-36
Snailclimb Sep 16, 2021
fecc256
Update and rename 为什么要网站有哪些常见的网站系统.md to 为什么要网关有哪些常见的网关系统.md
Sep 16, 2021
fba4e83
Merge pull request #1404 from anaer/patch-43
Snailclimb Sep 16, 2021
3edfca4
Update limit-request.md
Sep 17, 2021
f2ef8e4
Update 如何设计一个高可用系统要考虑哪些地方.md
Sep 17, 2021
44cb97c
Update 读写分离&分库分表.md
Sep 17, 2021
53542c4
Update redis-all.md
Qiwenlii Sep 22, 2021
e731a78
fix redis.md bug
Qiwenlii Sep 22, 2021
504e6fa
Merge pull request #1405 from anaer/patch-44
Snailclimb Sep 22, 2021
423a12e
Merge pull request #1406 from anaer/patch-45
Snailclimb Sep 22, 2021
111c224
Merge pull request #1407 from anaer/patch-46
Snailclimb Sep 22, 2021
7ec4dcd
Update Kafka常见面试题总结.md
Snailclimb Sep 22, 2021
1947e5a
[feat]分布式ID文章完善更新
Snailclimb Sep 23, 2021
1bbe22b
Update README.md
Snailclimb Sep 23, 2021
2c1d170
[feat]Java内存区域内容完善补充
Snailclimb Sep 23, 2021
437abe6
Update Java内存区域.md
Snailclimb Sep 23, 2021
dcea444
Update Java内存区域.md
Snailclimb Sep 23, 2021
2996747
[refractor]文件名修改
Snailclimb Sep 24, 2021
b4d29c2
Update java线程池学习总结.md
Snailclimb Sep 24, 2021
66d7c41
Merge pull request #1410 from Qiwenlii/master
Snailclimb Sep 25, 2021
078f4ae
[feat]定时任务
Snailclimb Sep 26, 2021
a2479a7
Update Java并发基础常见面试题总结.md
Snailclimb Sep 26, 2021
08cc656
Update Java并发进阶常见面试题总结.md
Aaron-Ge Sep 26, 2021
83f9e69
Update InnoDB对MVCC的实现.md
hligaty Sep 27, 2021
48e4c18
Update Java集合框架常见面试题.md
debugjoker Sep 27, 2021
302c115
Update Java并发进阶常见面试题总结.md
Aaron-Ge Sep 28, 2021
56d02d2
Update java线程池学习总结.md
Aaron-Ge Sep 28, 2021
3a90b25
Update 拿来即用的线程池最佳实践.md
Aaron-Ge Sep 28, 2021
9211b3e
[feat]首页添加《程序员副业赚钱之路》
Snailclimb Sep 28, 2021
0e7714a
Update README.md
Snailclimb Sep 28, 2021
d4e04d6
Merge pull request #1418 from hligaty/patch-1
Snailclimb Sep 28, 2021
f6e0428
Merge pull request #1420 from debugjoker/patch-3
Snailclimb Sep 28, 2021
eea8a1e
Merge pull request #1417 from Aaron-Ge/master
Snailclimb Sep 28, 2021
e33e785
Update README.md
Snailclimb Sep 28, 2021
e4caa8a
CMS垃圾收集器jvm参数大小写错误
1036956372 Sep 29, 2021
7af2d8a
Merge pull request #1422 from 1036956372/patch-1
Snailclimb Sep 30, 2021
6e77ea0
[feat]api网关重构
Snailclimb Oct 4, 2021
abd8907
Update 堆.md
Masker99 Oct 4, 2021
8023698
Merge pull request #1426 from Masker99/master
Snailclimb Oct 6, 2021
50e2ead
[feat]IntelliJ IDEA 使用指南 | 必备插件推荐 | 插件开发入门 | 重构小技巧 | 源码阅读技巧
Snailclimb Oct 10, 2021
3a6faf3
[feat]字符集详解:为什么不建议在MySQL中使用 utf8 ?
Snailclimb Oct 13, 2021
cbe983e
修改错误字
qiuqianorg Oct 14, 2021
a5b9860
Update README.md
Snailclimb Oct 15, 2021
e3d1c97
Update java线程池学习总结.md
Snailclimb Oct 15, 2021
f6ac89a
Update java线程池学习总结.md
Snailclimb Oct 15, 2021
69a0134
Merge pull request #1428 from SimonLi0427/master
Snailclimb Oct 15, 2021
bd3b9fe
[feat]灾备设计和异地多活文章推荐
Snailclimb Oct 17, 2021
f014952
feat:补充kafka不重复消费的解答
machitaoX Oct 17, 2021
3d92eca
Merge pull request #1431 from machitaoX/feature_completeKafka
Snailclimb Oct 18, 2021
83519ff
Update Kafka常见面试题总结.md
Snailclimb Oct 18, 2021
1ee0f5e
Update README.md
Snailclimb Oct 20, 2021
c1b14de
Update README.md
Snailclimb Oct 24, 2021
81ffbed
[fix]《手把手教你定位常见 Java 性能问题》图片修复
Snailclimb Oct 25, 2021
78857ee
Update README.md
Snailclimb Oct 28, 2021
973f1ee
redis AOF重写描述不准确
xjlgod Nov 1, 2021
8f138f2
Update README.md
Snailclimb Nov 3, 2021
416bb02
装箱和拆箱写反了
xjlgod Nov 4, 2021
f0a7154
Merge branch 'Snailclimb:master' into master
xjlgod Nov 4, 2021
b919dff
Merge pull request #1436 from xjlgod/master
Snailclimb Nov 6, 2021
3dd194a
[feat]内容重构,删除无用文章,优化文件名
Snailclimb Nov 6, 2021
3a5cd7b
Merge branch 'master' of github.com:Snailclimb/JavaGuide
Snailclimb Nov 6, 2021
0ff5f5a
Delete MySQL Index.md
Snailclimb Nov 6, 2021
63bf25b
[feat]Java基础内容重构,删除无用文章,优化文件名
Snailclimb Nov 6, 2021
bb784d4
[feat]Java并发内容重构,删除无用文章,优化文件名
Snailclimb Nov 6, 2021
de3a900
Delete synchronized在JDK1.6之后的底层优化.md
Snailclimb Nov 6, 2021
47b7c85
[feat]jvm内容重构,删除无用文章,优化文件名
Snailclimb Nov 7, 2021
a26ff09
Delete submission.html
Snailclimb Nov 7, 2021
23efacc
Update java集合框架基础知识&面试题总结.md
Snailclimb Nov 7, 2021
dc45389
[feat]🔥 基于 vuepress 重构整个项目,提升阅读体验
Snailclimb Nov 9, 2021
3916409
[feat]网站首页更新
Snailclimb Nov 9, 2021
25b0f2b
[feat]在线阅读网站样式完善
Snailclimb Nov 9, 2021
cbfb2c5
[feat]文章名规范&在线阅读完善样式美化
Snailclimb Nov 9, 2021
06f726f
Update readme.md
Snailclimb Nov 9, 2021
a66506d
fix typos
Casflawed Nov 9, 2021
9dd6f54
Merge branch 'Snailclimb:master' into flameking_work-A
Casflawed Nov 9, 2021
afc837a
Update .gitignore
Snailclimb Nov 9, 2021
537fdce
Create .gitattributes
Snailclimb Nov 9, 2021
6f5aeb1
Merge branch 'Snailclimb:master' into flameking_work-A
Casflawed Nov 9, 2021
bd2f4ef
fix typos
Casflawed Nov 9, 2021
91ccfe3
[文件名更正]
Snailclimb Nov 10, 2021
2a78961
Update readme.md
Snailclimb Nov 10, 2021
b87ef11
Merge branch 'Snailclimb:master' into flameking_work-A
Casflawed Nov 10, 2021
351ea31
[fix]图片错误修复
Snailclimb Nov 10, 2021
47a6b08
Update README.md
Snailclimb Nov 10, 2021
e9b4a0c
fix typos
Casflawed Nov 10, 2021
405dec3
[feat]百度统计
Snailclimb Nov 10, 2021
e7b509e
fix typos
Casflawed Nov 10, 2021
e0cd0a3
Merge branch 'Snailclimb:master' into flameking_work-A
Casflawed Nov 10, 2021
d0a5502
[fix]百度统计
Snailclimb Nov 10, 2021
580617f
Merge branch 'Snailclimb:master' into flameking_work-A
Casflawed Nov 10, 2021
78d1cb4
Merge pull request #1444 from acflameking/flameking_work-A
Snailclimb Nov 10, 2021
a2f9479
Update config.js
Snailclimb Nov 10, 2021
63e8ee6
Update 手把手教你定位常见Java性能问题.md
Snailclimb Nov 10, 2021
1543c0d
Update 操作系统常见面试题&知识点总结.md
Aaron-Ge Nov 10, 2021
c0cdd9f
Update 操作系统常见面试题&知识点总结.md
Aaron-Ge Nov 11, 2021
7e718d5
修改错误字
qiuqianorg Nov 13, 2021
e878f58
Merge pull request #1446 from Aaron-Ge/master
Snailclimb Nov 16, 2021
8965fcd
Merge pull request #1448 from qiuqianorg/master
Snailclimb Nov 16, 2021
b54c726
修改错别字
cliveyuan Mar 9, 2022
77260e6
Merge pull request #1605 from cliveyuan/patch-1
Snailclimb Mar 12, 2022
fb6e11b
修改错别字
Mar 20, 2022
98eafbd
Merge pull request #1631 from drlifeL/master
Snailclimb Mar 21, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[feat] Java14新特性重构
  • Loading branch information
Snailclimb committed Aug 18, 2021
commit 801c2200fc2262f8515e752d114228a8905d99bd
238 changes: 131 additions & 107 deletions docs/java/new-features/一文带你看遍JDK9到14的重要新特性.md
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ Optional.ofNullable(cache.getIfPresent(key))

为了最大限度地减少 Full GC 造成的应用停顿的影响,从 Java10 开始,G1 的 FullGC 改为并行的标记清除算法,同时会使用与年轻代回收和混合回收相同的并行工作线程数量,从而减少了 Full GC 的发生,以带来更好的性能提升、更大的吞吐量。

### 应用程序类数据共享(扩展CDS功能)
### 应用程序类数据共享(扩展 CDS 功能)

在 Java 5 中就已经引入了类数据共享机制 (Class Data Sharing,简称 CDS),允许将一组类预处理为共享归档文件,以便在运行时能够进行内存映射以减少 Java 程序的启动时间,当多个 Java 虚拟机(JVM)共享相同的归档文件时,还可以减少动态内存的占用量,同时减少多个虚拟机在同一个物理或虚拟的机器上运行时的资源占用。CDS 在当时还是 Oracle JDK 的商业特性。

Expand Down Expand Up @@ -513,7 +513,7 @@ Java12 为默认的垃圾收集器 G1 带来了两项更新:

传统的 `switch` 语法存在容易漏写 `break` 的问题,而且从代码整洁性层面来看,多个 break 本质也是一种重复

Java12 提供了 `swtich` 表达式,使用类似 lambda 语法条件匹配成功后的执行块,不需要多写 break 。
Java12 增强了 `swtich` 表达式,使用类似 lambda 语法条件匹配成功后的执行块,不需要多写 break 。

```java
switch (day) {
Expand Down Expand Up @@ -553,30 +553,30 @@ if(obj instanceof String str){

#### 文本块

解决 Java 定义多行字符串时只能通过换行转义或者换行连接符来变通支持的问题,引入**三重双引号**来定义多行文本
解决 Java 定义多行字符串时只能通过换行转义或者换行连接符来变通支持的问题,引入**三重双引号**来定义多行文本

两个`"""`中间的任何内容都会被解释为字符串的一部分,包括换行符。
Java 13 支持两个 `"""` 符号中间的任何内容都会被解释为字符串的一部分,包括换行符。

未支持文本块之前的 HTML 写法:

```java
String json ="{\n" +
" \"name\":\"mkyong\",\n" +
" \"age\":38\n" +
"}\n";
```
```java
String json ="{\n" +
" \"name\":\"mkyong\",\n" +
" \"age\":38\n" +
"}\n";
```

支持文本块之后的 HTML 写法:

```java
String json = """
{
"name":"mkyong",
"age":38
}
""";
```
```java

String json = """
{
"name":"mkyong",
"age":38
}
""";
```

未支持文本块之前的 SQL 写法:

Expand All @@ -598,9 +598,9 @@ String query = """

另外,`String` 类新增加了 3 个新的方法来操作文本块:

- `formatted(Object... args)` :它类似于 `String` 的` format() `方法。添加它是为了支持文本块的格式设置。
- `formatted(Object... args)` :它类似于 `String` 的`format()`方法。添加它是为了支持文本块的格式设置。
- `stripIndent()` :用于去除文本块中每一行开头和结尾的空格。
- `translateEscapes()` :转义序列如 *“\\\t”* 转换为 *“\t”*
- `translateEscapes()` :转义序列如 _“\\\t”_ 转换为 _“\t”_

由于文本块是一项预览功能,可以在未来版本中删除,因此这些新方法被标记为弃用。

Expand All @@ -610,14 +610,14 @@ public String stripIndent() {
}
@Deprecated(forRemoval=true, since="13")
public String formatted(Object... args) {

}
@Deprecated(forRemoval=true, since="13")
public String translateEscapes() {
}
```

#### Switch(引入 yield 关键字到 Switch 中)
#### 增强 Switch(引入 yield 关键字到 Switch 中)

`Switch` 表达式中就多了一个关键字用于跳出 `Switch` 块的关键字 `yield`,主要用于返回一个值

Expand Down Expand Up @@ -645,7 +645,7 @@ ZGC 堆由一组称为 ZPages 的堆区域组成。在 GC 周期中清空 ZPages

Java Socket API 终于迎来了重大更新!

Java 13 将 Socket API 的底层进行了重写, `NioSocketImpl` 是对 ``PlainSocketImpl`` 的直接替代,它使用 `java.util.concurrent` 包下的锁而不是同步方法。如果要使用旧实现,请使用 `-Djdk.net.usePlainSocketImpl=true`。
Java 13 将 Socket API 的底层进行了重写, `NioSocketImpl` 是对 `PlainSocketImpl` 的直接替代,它使用 `java.util.concurrent` 包下的锁而不是同步方法。如果要使用旧实现,请使用 `-Djdk.net.usePlainSocketImpl=true`。

并且,在 Java 13 中是默认使用新的 Socket 实现,使其易于发现并在排除问题同时增加可维护性

Expand Down Expand Up @@ -675,120 +675,143 @@ $ java -XX:SharedArchiveFile=my_app_cds.jsa -cp my_app.jar

## Java14

### record 关键字

- 简化数据类的定义方式,使用 record 代替 class 定义的类,只需要声明属性,就可以在获得属性的访问方法,以及 toString,hashCode,equals 方法

- 类似于使用 Class 定义类,同时使用了 lomobok 插件,并打上了`@Getter,@ToString,@EqualsAndHashCode`注解

- 作为预览特性引入

```java
/**
* 这个类具有两个特征
* 1. 所有成员属性都是final
* 2. 全部方法由构造方法,和两个成员属性访问器组成(共三个)
* 那么这种类就很适合使用record来声明
*/
final class Rectangle implements Shape {
final double length;
final double width;

public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}

double length() { return length; }
double width() { return width; }
}
/**
* 1. 使用record声明的类会自动拥有上面类中的三个方法
* 2. 在这基础上还附赠了equals(),hashCode()方法以及toString()方法
* 3. toString方法中包括所有成员属性的字符串表示形式及其名称
*/
record Rectangle(float length, float width) { }
```

### 空指针异常精准提示

- 通过 JVM 参数中添加`-XX:+ShowCodeDetailsInExceptionMessages`,可以在空指针异常中获取更为详细的调用信息,更快的定位和解决问题
通过 JVM 参数中添加`-XX:+ShowCodeDetailsInExceptionMessages`,可以在空指针异常中获取更为详细的调用信息,更快的定位和解决问题

```java
a.b.c.i = 99; // 假设这段代码会发生空指针
```
```java
a.b.c.i = 99; // 假设这段代码会发生空指针
```

```java
Exception in thread "main" java.lang.NullPointerException:
Cannot read field 'c' because 'a.b' is null.
at Prog.main(Prog.java:5) // 增加参数后提示的异常中很明确的告知了哪里为空导致
```
Java 14 之前:

### switch 的增强终于转正
```java
Exception in thread "main" java.lang.NullPointerException
at NullPointerExample.main(NullPointerExample.java:5)
```

- JDK12 引入的 switch(预览特性)在 JDK14 变为正式版本,不需要增加参数来启用,直接在 JDK14 中就能使用
- 主要是用`->`来替代以前的`:`+`break`;另外就是提供了 yield 来在 block 中返回值
Java 14 之后:

_Before Java 14_
```java
// 增加参数后提示的异常中很明确的告知了哪里为空导致
Exception in thread "main" java.lang.NullPointerException:
Cannot read field 'c' because 'a.b' is null.
at Prog.main(Prog.java:5)
```

### switch 的增强(转正)

Java12 引入的 switch(预览特性)在 Java14 变为正式版本,不需要增加参数来启用,直接在 JDK14 中就能使用。

Java12 为 switch 表达式引入了类似 lambda 语法条件匹配成功后的执行块,不需要多写 break ,Java13 提供了 `yield` 来在 block 中返回值。

```java
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
break;
case TUESDAY:
System.out.println(7);
break;
case THURSDAY:
case SATURDAY:
System.out.println(8);
break;
case WEDNESDAY:
System.out.println(9);
break;
}
String result = switch (day) {
case "M", "W", "F" -> "MWF";
case "T", "TH", "S" -> "TTS";
default -> {
if(day.isEmpty())
yield "Please insert a valid day.";
else
yield "Looks like a Sunday.";
}

};
System.out.println(result);
```

_Java 14 enhancements_
### 预览新特性

#### record 关键字

简化数据类的定义方式,使用 `record` 代替 `class` 定义的类,只需要声明属性,就可以在获得属性的访问方法,以及 `toString()`,`hashCode()`, `equals()`方法

类似于使用 `class` 定义类,同时使用了 lomobok 插件,并打上了`@Getter,@ToString,@EqualsAndHashCode`注解

```java
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
/**
* 这个类具有两个特征
* 1. 所有成员属性都是final
* 2. 全部方法由构造方法,和两个成员属性访问器组成(共三个)
* 那么这种类就很适合使用record来声明
*/
final class Rectangle implements Shape {
final double length;
final double width;

public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}

double length() { return length; }
double width() { return width; }
}
/**
* 1. 使用record声明的类会自动拥有上面类中的三个方法
* 2. 在这基础上还附赠了equals(),hashCode()方法以及toString()方法
* 3. toString方法中包括所有成员属性的字符串表示形式及其名称
*/
record Rectangle(float length, float width) { }
```

### instanceof 增强
#### 文本块

Java14 中,文本块依然是预览特性,不过,其引入了两个新的转义字符:

- `\` : 表示行尾,不引入换行符
- `\s` :表示单个空格

```java
String str = "凡心所向,素履所往,生如逆旅,一苇以航。";

String str2 = """
凡心所向,素履所往, \
生如逆旅,一苇以航。""";
System.out.println(str2);// 凡心所向,素履所往, 生如逆旅,一苇以航。
String text = """
java
c++\sphp
""";
System.out.println(text);
//输出:
java
c++ php
```

#### instanceof 增强

依然是**预览特性** ,Java 12 新特性中介绍过。

### 其他特性
### Java14 其他特性

- 从 Java11 引入的 ZGC 作为继 G1 过后的下一代 GC 算法,从支持 Linux 平台到 Java14 开始支持 MacOS 和 Window(个人感觉是终于可以在日常开发工具中先体验下 ZGC 的效果了,虽然其实 G1 也够用)
- 移除了 CMS 垃圾收集器(功成而退)
- 移除了 CMS(Concurrent Mark Sweep) 垃圾收集器(功成而退)
- 新增了 jpackage 工具,标配将应用打成 jar 包外,还支持不同平台的特性包,比如 linux 下的`deb`和`rpm`,window 平台下的`msi`和`exe`

## 总结

### 关于预览特性

- 先贴一段 oracle 官网原文:`This is a preview feature, which is a feature whose design, specification, and implementation are complete, but is not permanent, which means that the feature may exist in a different form or not at all in future JDK releases. To compile and run code that contains preview features, you must specify additional command-line options.`
- 这是一个预览功能,该功能的设计,规格和实现是完整的,但不是永久性的,这意味着该功能可能以其他形式存在或在将来的 JDK 版本中根本不存在。 要编译和运行包含预览功能的代码,必须指定其他命令行选项。
- 就以`switch`的增强为例子,从 Java12 中推出,到 Java13 中将继续增强,直到 Java14 才正式转正进入 JDK 可以放心使用,不用考虑后续 JDK 版本对其的改动或修改
- 一方面可以看出 JDK 作为标准平台在增加新特性的严谨态度,另一方面个人认为是对于预览特性应该采取审慎使用的态度。特性的设计和实现容易,但是其实际价值依然需要在使用中去验证
先贴一段 oracle 官网原文:`This is a preview feature, which is a feature whose design, specification, and implementation are complete, but is not permanent, which means that the feature may exist in a different form or not at all in future JDK releases. To compile and run code that contains preview features, you must specify additional command-line options.`

这是一个预览功能,该功能的设计,规格和实现是完整的,但不是永久性的,这意味着该功能可能以其他形式存在或在将来的 JDK 版本中根本不存在。 要编译和运行包含预览功能的代码,必须指定其他命令行选项。

就以`switch`的增强为例子,从 Java12 中推出,到 Java13 中将继续增强,直到 Java14 才正式转正进入 JDK 可以放心使用,不用考虑后续 JDK 版本对其的改动或修改

一方面可以看出 JDK 作为标准平台在增加新特性的严谨态度,另一方面个人认为是对于预览特性应该采取审慎使用的态度。特性的设计和实现容易,但是其实际价值依然需要在使用中去验证

### JVM 虚拟机优化

- 每次 Java 版本的发布都伴随着对 JVM 虚拟机的优化,包括对现有垃圾回收算法的改进,引入新的垃圾回收算法,移除老旧的不再适用于今天的垃圾回收算法等
- 整体优化的方向是**高效,低时延的垃圾回收表现**
- 对于日常的应用开发者可能比较关注新的语法特性,但是从一个公司角度来说,在考虑是否升级 Java 平台时更加考虑的是**JVM 运行时的提升**
每次 Java 版本的发布都伴随着对 JVM 虚拟机的优化,包括对现有垃圾回收算法的改进,引入新的垃圾回收算法,移除老旧的不再适用于今天的垃圾回收算法等

整体优化的方向是**高效,低时延的垃圾回收表现**

对于日常的应用开发者可能比较关注新的语法特性,但是从一个公司角度来说,在考虑是否升级 Java 平台时更加考虑的是**JVM 运行时的提升**

## 参考信息
## 参考资料

- JDK Project Overview : <https://openjdk.java.net/projects/jdk/ >
- IBM Developer Java9 <https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-9/>
- Guide to Java10 <https://www.baeldung.com/java-10-overview>
- Java 10 新特性介绍<https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-10/index.html>
Expand All @@ -800,4 +823,5 @@ switch (day) {
- New Java13 Features <https://www.baeldung.com/java-13-new-features>
- Java13 新特性概述 <https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-13/index.html>
- Oracle Java14 record <https://docs.oracle.com/en/java/javase/14/language/records.html>
- java14-features <https://www.techgeeknext.com/java/java14-features>
- java14-features <https://www.techgeeknext.com/java/java14-features>
- Java 14 Features : <https://www.journaldev.com/37273/java-14-features>