电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Java10新特性解讀

瀏覽:99日期:2022-08-17 09:55:49

Java10是Java版本23年歷史上最快的版本。Java因其緩慢的增長和進化而受到批評,但Java10打破了這一概念。Java10是一個具有許多未來變化的版本,其范圍和影響可能并不明顯,但卻很牽強。

在本文中,我們將討論Java10發(fā)行版中添加的各種特性。在此之前,讓我們回顧一下java發(fā)布模型中引入的一些更改。

長期支持模式

從2017年開始,Oracle&Java社區(qū)宣布將向為期6個月的Java新節(jié)奏轉(zhuǎn)變。它轉(zhuǎn)向了oracle javase產(chǎn)品的長期支持(LTS)模型。

LTS版本的產(chǎn)品將提供甲骨文卓越和持續(xù)的支持,并將每3年瞄準一次。

每個Java發(fā)行版都是以一個或兩個主要特性為模型的,這些特性驅(qū)動發(fā)行版。任何障礙都會推遲發(fā)布和推遲上市。Jigsaw項目是Java9的一個主要特性,它將發(fā)布日期推遲了幾次,發(fā)布時間推遲了1.5年以上。6個月的cadence發(fā)布將遵循發(fā)布序列。放行列車每6個月有一個時間表。使切口上車的特征;否則它們等待下一列預(yù)定的火車。

Oracle JDK與Open JDK之比較

為了對開發(fā)人員更加友好,Oracle&Java社區(qū)現(xiàn)在將OpenJDK作為主要JDK來推廣。這與早些時候相比是一個很大的解脫,當(dāng)時JDK是適當(dāng)?shù)模⒂蒓racle授權(quán),Oracle對重新分發(fā)有各種限制。不過,Oracle將繼續(xù)生產(chǎn)JDK,但只針對長期支持版本。這是朝著更加云和容器友好的方向發(fā)展,因為開放的JDK庫可以作為容器的一部分分發(fā)。

openjdk將每6個月發(fā)布一次,而Oracle JDK將每3年發(fā)布一次(LTS版本)。

將采用哪些JDK?

大型組織需要時間在不同的版本之間移動;他們會緊緊抓住版本直到他們能做到為止。行業(yè)對Java6的采用超過了Java7,然后行業(yè)逐漸轉(zhuǎn)向Java8。在我看來,LTS版本將是最受企業(yè)青睞的。然而,究竟是oraclejdk的LTS版本還是openjdk還不清楚,部分原因是云計算領(lǐng)域正在進行大量工作。

Java9和Java10是非LTS版本。定于2018年9月發(fā)布的Java11將是LTS版本。

Java10功能

讓我們來看看Java10中可用的特性。

基于時間的版本控制(JEP 322)

隨著基于時間的發(fā)布周期的采用,Oracle改變了javase平臺和JDK的版本字符串方案,以及相關(guān)的版本控制信息,用于當(dāng)前和未來基于時間的發(fā)布模型。

版本號的新模式是:

$FEATURE.$INTERIM.$UPDATE.$PATCH

$FEATURE:counter將每6個月遞增一次,并且將基于功能發(fā)布版本,例如:JDK 10、JDK 11。

$INTERIM: counter 對于包含兼容的錯誤修復(fù)和增強但沒有不兼容更改的非功能版本,計數(shù)器將增加。通常,這將是零,因為六個月內(nèi)不會有臨時發(fā)布。這是為了將來對發(fā)布模型進行修訂而保留的。

$UPDATE:counter對于修復(fù)新特性中的安全問題、退化和bug的兼容更新版本將增加。此功能發(fā)布后一個月更新,以后每3個月更新一次。2018年4月的版本是JDK10.0.1,7月的版本是JDK10.0.2,以此類推

$PATCH:counter將在緊急版本中增加,以修復(fù)關(guān)鍵問題。

添加了新的API以編程方式獲取這些計數(shù)器值。讓我們看看;

Version version = Runtime.version();version.feature();version.interim();version.update();version.patch();

現(xiàn)在,讓我們看看返回版本信息的Java launcher:

$ java -versionjava version '10' 2018-03-20Java(TM) SE Runtime Environment 18.3 (build 10+46)Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)

版本號格式是“10”,因為除了0之外沒有其他計數(shù)器。添加發(fā)布日期。18.3可以理解為2018年和第3個月,版本10+46是版本10的第46個版本。對于JDK10.0.1的假設(shè)構(gòu)建93,構(gòu)建將是10.0.1+93

局部變量類型推斷(JEP 286)

局部變量類型推斷是Java10中為開發(fā)人員提供的最大的新特性。它將類型推斷添加到帶有初始值設(shè)定項的局部變量聲明中。局部類型推斷只能在以下情況下使用:

僅限于具有初始值設(shè)定項的局部變量 增強for循環(huán)的索引 在for循環(huán)中聲明的本地

我們來看看它的用法:

var numbers = List.of(1, 2, 3, 4, 5); // inferred value ArrayList<String>// Index of Enhanced For Loopfor (var number : numbers) {System.out.println(number);}// Local variable declared in a loopfor (var i = 0; i < numbers.size(); i++) {System.out.println(numbers.get(i));}實驗性基于Java的JIT編譯器(JEP 317)

這個特性使基于Java的JIT編譯器Graal能夠在Linux/x64平臺上作為一個實驗性的JIT編譯器使用。到目前為止,這是Java10特性列表中最具未來感的內(nèi)容。

Graal是在java9中引入的。它是我們已經(jīng)習(xí)慣的JIT編譯器的替代品。它是JVM的一個插件,這意味著JIT編譯器沒有綁定到JVM,它可以動態(tài)地插入JVMCI兼容的任何其他插件(Java級JVM編譯器接口)。它還帶來了java世界中的提前編譯(AOT)。它還支持多語言翻譯。

“一個用Java編寫的基于Java的實時編譯器,用于將Java字節(jié)碼轉(zhuǎn)換為機器碼?!边@讓人困惑嗎?如果JVM是用Java編寫的,那么您不需要JVM來運行JVM嗎?JVM可以通過AOT編譯,然后JIT編譯器可以在jvmit中使用,通過實時代碼優(yōu)化來提高性能。

Graal是用Java從頭開始的對JIT編譯器的完全重寫。以前的JIT編譯器是用c++編寫的。它被認為是任何編程語言進化的最后階段。

您可以使用以下jvm參數(shù)切換到Graal:

-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler應(yīng)用程序級數(shù)據(jù)共享(JEP 310)

此功能有助于改善啟動占用空間,擴展現(xiàn)有的類數(shù)據(jù)共享(“CDS”)功能,以允許將應(yīng)用程序類放置在共享存檔中。

JVM在啟動時執(zhí)行一些初步步驟,其中一個步驟是在內(nèi)存中加載類。如果有幾個jar有多個類,那么第一個請求中的延遲就很明顯了。這成為無服務(wù)器體系結(jié)構(gòu)的一個問題,其中引導(dǎo)時間至關(guān)重要。為了縮短應(yīng)用程序啟動時間,可以使用應(yīng)用程序類數(shù)據(jù)共享。其思想是通過在不同的Java進程之間共享公共類元數(shù)據(jù)來減少占用空間??赏ㄟ^以下3個步驟實現(xiàn):

確定要存檔的類:使用java啟動器創(chuàng)建要存檔的文件列表,這可以通過以下參數(shù)實現(xiàn):

$java -Xshare:off -XX:+UseAppCDS -XX:DumpLoadedClassList=hello.lst -cp hello.jar HelloWorld

創(chuàng)建AppCDS存檔:使用java launcher創(chuàng)建要用于應(yīng)用程序cd的文件列表的存檔,這可以通過以下參數(shù)實現(xiàn):

$java -Xshare:dump -XX:+UseAppCDS -XX:SharedClassListFile=hello.lst -XX:SharedArchiveFile=hello.jsa -cp hello.jar

使用AppCDS存檔:使用帶有以下參數(shù)的Java啟動器來使用應(yīng)用程序cd。

$java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar HelloWorldG1并行Full GC(JEP 307)

G1垃圾收集器在jdk9中是默認的。G1垃圾收集器避免了任何完全的垃圾收集,但是當(dāng)用于收集的并發(fā)線程不能足夠快地恢復(fù)內(nèi)存時,用戶的體驗就會受到影響。

此更改通過使完全GC并行來改善G1最壞情況下的延遲。G1收集器的mark-sweep compact算法作為此更改的一部分被并行化,當(dāng)用于收集的并發(fā)線程不能足夠快地恢復(fù)內(nèi)存時,它將被觸發(fā)。

垃圾收集器接口(JEP 304)

這個JEP是未來的變化。它通過引入一個通用的垃圾收集器接口來改進不同垃圾收集器的代碼隔離。

此更改為內(nèi)部GC代碼提供了更好的模塊化。它將有助于將來添加新的GC而不改變現(xiàn)有的代碼基,也有助于刪除或管理以前的GC。

附加Unicode語言標記擴展(JEP 314)

此功能增強了java.util.Locale語言環(huán)境以及相關(guān)的API來實現(xiàn)BCP 47語言標記的額外Unicode擴展。從JavaSE9開始,支持的BCP47U語言標記擴展是“ca”和“nu”。此JEP將添加對以下附加擴展的支持:

cu(貨幣類型) fw(每周第一天) rg(區(qū)域覆蓋) tz(時區(qū))

為了支持這些附加擴展,對各種api進行了更改,以提供基于U或附加擴展的信息。

java.text.DateFormat::get*Instancejava.text.DateFormatSymbols::getInstancejava.text.DecimalFormatSymbols::getInstancejava.text.NumberFormat::get*Instancejava.time.format.DateTimeFormatter::localizedByjava.time.format.DateTimeFormatterBuilder::getLocalizedDateTimePatternjava.time.format.DecimalStyle::ofjava.time.temporal.WeekFields::ofjava.util.Calendar::{getFirstDayOfWeek,getMinimalDaysInWeek}java.util.Currency::getInstancejava.util.Locale::getDisplayNamejava.util.spi.LocaleNameProvider根證書(JEP 319)

為了推廣OpenJDK并使其對社區(qū)用戶更具吸引力,此功能在JDK中提供了一組默認的根證書頒發(fā)機構(gòu)(CA)證書。這也意味著Oracle和openjdk二進制文件在功能上是相同的。

關(guān)鍵的安全組件(如TLS)將在OpenJDK構(gòu)建中默認工作。

Thread-Local 線程本地握手(JEP 312)

這是一個用于提高性能的內(nèi)部JVM特性。

握手操作是在每個JavaThread處于safepoint狀態(tài)時對其執(zhí)行的回調(diào)?;卣{(diào)要么由線程本身執(zhí)行,要么由VM線程執(zhí)行,同時保持線程處于阻塞狀態(tài)。

此功能提供了一種在線程上執(zhí)行回調(diào)而不執(zhí)行全局VM safepoint的方法。使停止單個線程,而不僅僅是停止所有線程或不停止任何線程既可能又便宜。

替代內(nèi)存設(shè)備上的堆分配(JEP 316)

應(yīng)用程序已經(jīng)變得內(nèi)存匱乏,云本地應(yīng)用程序、內(nèi)存數(shù)據(jù)庫、流式應(yīng)用程序都在增加。為了滿足這些服務(wù),有各種可用的內(nèi)存體系結(jié)構(gòu)。此功能增強了HotSpot VM在用戶指定的備用內(nèi)存設(shè)備(如NV-DIMM)上分配Java對象堆的能力。

此JEP針對具有與DRAM相同的語義(包括原子操作的語義)的替代內(nèi)存設(shè)備,因此,可以在不更改現(xiàn)有應(yīng)用程序代碼的情況下代替DRAM用于對象堆。

刪除Native-Header生成工具Javah(Jep313)

這是一個從JDK中刪除javah工具的內(nèi)務(wù)管理更改。javac中添加的工具功能是jdk8的一部分,它提供了在編譯時編寫Native-Header文件的能力,從而使javah變得無用。

將JDK林整合到單個存儲庫中(JEP 296)

多年來,在JDK代碼庫中有各種Mercurial存儲庫。不同的存儲庫確實提供了一些優(yōu)勢,但它們也有不同的操作缺點。作為此更改的一部分,JDK的許多存儲庫被合并到一個存儲庫中,以簡化開發(fā)。

API更改

Java10已經(jīng)添加和刪除了API(是的,它不是一個拼寫錯誤)。

Java9引入了增強的棄用,其中某些API被標記為在將來的版本中刪除。

添加了API:Java10中添加了73個新API。

讓我們看一些補充:

List、Map和Set接口是通過靜態(tài)copyOf(Collection)方法添加的。它返回一個不可修改的列表、映射或集合,其中包含所提供的條目。對于列表,如果給定的列表隨后被修改,則返回的列表將不會反映這些修改。

Optional&它的原語變體獲取一個方法orelsetrow()。這與get()完全相同,但是javadoc聲明它是get()的首選替代方法

Collectors類獲取用于收集不可修改集合(Set、List、Map)的各種方法

List<String> actors = new ArrayList<>();actors.add('Jack Nicholson');actors.add('Marlon Brando');System.out.println(actors); // prints [Jack Nicholson, Marlon Brando]// New API added - Creates an UnModifiable List from a List.List<String> copyOfActors = List.copyOf(actors);System.out.println(copyOfActors); // prints [Jack Nicholson, Marlon Brando]// copyOfActors.add('Robert De Niro'); Will generate an// UnsupportedOperationExceptionactors.add('Robert De Niro');System.out.println(actors);// prints [Jack Nicholson, Marlon Brando, Robert De Niro]System.out.println(copyOfActors); // prints [Jack Nicholson, Marlon Brando]String str = '';Optional<String> name = Optional.ofNullable(str);// New API added - is preferred option then get() methodname.orElseThrow(); // same as name.get() // New API added - Collectors.toUnmodifiableListList<String> collect = actors.stream().collect(Collectors.toUnmodifiableList());// collect.add('Tom Hanks'); // Will generate an// UnsupportedOperationException

以上就是Java10新特性總結(jié)的詳細內(nèi)容,更多關(guān)于Java10新特性的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 至顶网| 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 大白菜官网,大白菜winpe,大白菜U盘装系统, u盘启动盘制作工具 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | 郑州大巴车出租|中巴车租赁|旅游大巴租车|包车|郑州旅游大巴车租赁有限公司 | 微波萃取合成仪-电热消解器价格-北京安合美诚科学仪器有限公司 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | 无锡不干胶标签,卷筒标签,无锡瑞彩包装材料有限公司 | SPC工作站-连杆综合检具-表盘气动量仪-内孔缺陷检测仪-杭州朗多检测仪器有限公司 | 冷油器,取样冷却器,热力除氧器-连云港振辉机械设备有限公司 | 智能型高压核相仪-自动开口闪点测试仪-QJ41A电雷管测试仪|上海妙定 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 中宏网-今日新闻-财经新闻| 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 2025福建平潭岛旅游攻略|蓝眼泪,景点,住宿攻略-趣平潭网 | 潍坊大集网-潍坊信息港-潍坊信息网| 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | 振动传感器,检波器-威海广达勘探仪器有限公司 | 北京模型公司-军事模型-工业模型制作-北京百艺模型沙盘公司 | 好笔杆子网 - 公文写作学习交流分享平台| 航拍_专业的无人机航拍摄影门户社区网站_航拍网 | 散热器厂家_暖气片_米德尔顿散热器 | 一体化预制泵站-一体化提升泵站-一体化泵站厂家-山东康威环保 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 加中寰球移民官网-美国移民公司,移民机构,移民中介,移民咨询,投资移民 | 篷房|仓储篷房|铝合金篷房|体育篷房|篷房厂家-华烨建筑科技官网 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 常州减速机_减速机厂家_常州市减速机厂有限公司| 合肥角钢_合肥槽钢_安徽镀锌管厂家-昆瑟商贸有限公司 | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 双齿辊破碎机-大型狼牙破碎机视频-对辊破碎机价格/型号图片-金联机械设备生产厂家 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 杭州成人高考_浙江省成人高考网上报名 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 电表箱-浙江迈峰电力设备有限公司-电表箱专业制造商 | 四合院设计_四合院装修_四合院会所设计-四合院古建设计与建造中心1 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 路斯特伺服驱动器维修,伦茨伺服驱动器维修|万骏自动化百科 |