日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Java:未來(lái)已來(lái)這些炫酷特性你確定不看嗎?

在10月22的 Oracle Codeone大會(huì)上,Java平臺(tái)的***架構(gòu)師 Mark Reinhold 做了The Future of Java is Today的演講, 回顧了最近Java的幾個(gè)版本的新的功能,Java的每年兩次的發(fā)布周期, 澄清了關(guān)于發(fā)布流程和Java版本的幾個(gè)誤區(qū),***花了很大的篇幅介紹了未來(lái)Java幾個(gè)令人非常期待的幾個(gè)孵化中項(xiàng)目,可以為Java帶來(lái)更好的生產(chǎn)力、性能和可擴(kuò)展性。我整理了這四個(gè)項(xiàng)目相關(guān)的知識(shí),你可以提前了解到Java未來(lái)的這些酷炫的特性。

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括洛南網(wǎng)站建設(shè)、洛南網(wǎng)站制作、洛南網(wǎng)頁(yè)制作以及洛南網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,洛南網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到洛南省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

Java各版本的發(fā)布時(shí)間點(diǎn)和LTS版本

Mark Reinhold 我不多介紹了, 之前要了解Java的未來(lái)動(dòng)向看Java之父James Gosling, 他離開(kāi)Oracle之后想了解Java的動(dòng)向就看 Mark Reinhold。

[[247533]]

Project Amber

提供面向生產(chǎn)力的Java特性, 比如字符串字面值、switch表達(dá)式、模式匹配、record等

這個(gè)項(xiàng)目包含很多Java語(yǔ)言特性的新功能。

包括:

正在實(shí)現(xiàn)的:

  • JEP 302 Lambda Leftovers: 對(duì)lambda功能的補(bǔ)強(qiáng), 比如下劃線(xiàn)變量等BiFunction biss = (i, _) -> String.valueOf(i);, lambda參數(shù)的Shadowing,消除一些歧義等修補(bǔ)工作
  • JEP 305 Pattern Matching: 這個(gè)功能非常好,Scala和kotlin中的模式匹配非常強(qiáng)大,這個(gè)jep提供了類(lèi)似的功能,配合switch和record,可以大大簡(jiǎn)化條件分支的處理,如:

 

 
 
 
  1. int eval(Node n) { 
  2.     switch(n) { 
  3.         case IntNode(int i): return i; 
  4.         case NegNode(Node n): return -eval(n); 
  5.         case AddNode(Node left, Node right): return eval(left) + eval(right); 
  6.         case MulNode(Node left, Node right): return eval(left) * eval(right); 
  7.         default: throw new IllegalStateException(n); 
  8.     }; 

數(shù)據(jù)類(lèi),一行定義,省去了字段、字段訪(fǎng)問(wèn)方法和hash、equals、toString等方法,定義ValueObject簡(jiǎn)化到家了:

 
 
 
  1. record Point(int x, int y); 
  • JEP 325 Switch Expressions (preview, JDK 12): 當(dāng)前的switch是什么, 語(yǔ)句。這個(gè)jep擴(kuò)展switch,并且可以作為表達(dá)式使用:

 

 
 
 
  1. int numLetters = switch (day) { 
  2.     case MONDAY, FRIDAY, SUNDAY -> 6; 
  3.     case TUESDAY                -> 7; 
  4.     case THURSDAY, SATURDAY     -> 8; 
  5.     case WEDNESDAY              -> 9; 
  6. }; 
  • JEP 326 Raw String Literals (preview, JDK 12): 這個(gè)很多語(yǔ)言中都實(shí)現(xiàn)了,可以更好的書(shū)寫(xiě)字符串字面值, 尤其在正則表達(dá)式中處理很多轉(zhuǎn)義符的時(shí)候,和Go類(lèi)似:

 

 
 
 
  1. String s = ` 
  2. this is my 
  3.     embedded string 
  4. `; 
  • JEP draft 8209434 Concise Method Bodies: 正常的方法定義以大括號(hào)包裹,這個(gè)特性提供了類(lèi)似Lambda表達(dá)式簡(jiǎn)化方式的形式,直接單行定義方法體, 類(lèi)似C#和kotlin的特性:

 

 
 
 
  1. class MyList implements List { 
  2.     private List aList; 
  3.     public int size() = aList::size; 
  4.     public T get(int index) = aList::get; 
  5.     ... 

已發(fā)布的:

  • JEP 286 Local-Variable Type Inference (var) (JDK 10): 本地變量的類(lèi)型推斷, 也就是使用var定義變量,有些同學(xué)已經(jīng)用起來(lái)了,非常的方便,有點(diǎn)類(lèi)似動(dòng)態(tài)類(lèi)型的語(yǔ)言,感覺(jué)雖然還沒(méi)有達(dá)到Scala那么靈活,已經(jīng)很不錯(cuò)了
  • JEP 323 Local-Variable Syntax for Lambda Parameters (JDK 11): 對(duì)本地變量的類(lèi)型推斷的加強(qiáng),用在Lambda表達(dá)式中。

暫時(shí)擱置的:

  • JEP 301 Enhanced Enums.

總之,每一個(gè)特性都可以大大簡(jiǎn)化我們的開(kāi)發(fā),讓Java更像一個(gè)"現(xiàn)代的"編程語(yǔ)言。

Project Loom

提供一個(gè)輕量級(jí)的用戶(hù)態(tài)的纖程,叫做fiber,更加簡(jiǎn)化并發(fā)編程,而且更有效

這個(gè)特性多年前我介紹過(guò): https://colobu.com/2016/08/01/talk-about-quasar-again/,當(dāng)時(shí)它還像一個(gè)玩具,開(kāi)發(fā)的時(shí)候很麻煩,而且有一些坑。作者后來(lái)負(fù)責(zé)這個(gè)jep,可以很好的從java實(shí)現(xiàn)的角度去實(shí)現(xiàn)fiber,所以很是期待。

[[247534]]

Mark Reinhold 首先使用jshell演示了fiber的使用,一兩行程序就可以做到,我覺(jué)得方便性可以和goroutine相媲美了。他接著使用一個(gè)restful的例子比較了Thread和Fiber的性能, restful服務(wù)收到請(qǐng)求后暫停100毫秒,模擬一個(gè)慢的io操作,結(jié)果顯示Thread很很多幾百毫秒的尖峰,而fiber在預(yù)熱之后一直穩(wěn)定在100毫秒。 這絕對(duì)是Java程序員值的關(guān)注一個(gè)新特性。

例子使用jetty做服務(wù)器,線(xiàn)程池執(zhí)行命令的時(shí)候讓fiber去調(diào)度,這種方式對(duì)現(xiàn)有的代碼改動(dòng)很小。

我比較關(guān)注的是如果它的內(nèi)部調(diào)度算法怎么實(shí)現(xiàn)的,另外,一個(gè)包含復(fù)雜業(yè)務(wù)完成時(shí)間較長(zhǎng)的fiber是否能被調(diào)度器自動(dòng)調(diào)度,以便使用有限的線(xiàn)程調(diào)度其它的fiber, 類(lèi)似goroutine在系統(tǒng)調(diào)用的時(shí)候自動(dòng)插入檢查點(diǎn)。

Project Panama

提升JVM和外部(非java)代碼和數(shù)據(jù)聯(lián)系

當(dāng)然,這個(gè)項(xiàng)目不僅僅是簡(jiǎn)化JNI的開(kāi)發(fā),而且提供了很多的特性:

  • native function calling from JVM (C, C++), specifically per JEP 191
  • native data access from JVM or inside JVM heap
  • new data layouts in JVM heap
  • native metadata definition for JVM
  • header file API extraction tools (see below)
  • native library management APIs
  • native-oriented interpreter and runtime “hooks”
  • class and method resolution “hooks”
  • native-oriented JIT optimizations
  • tooling or wrapper interposition for safety
  • exploratory work with difficult-to-integrate native libraries

 

Mark Reinhold在演講中舉了兩個(gè)例子,首先是為 POSIX 操作系統(tǒng) API 的頭文件unistd.h中的函數(shù)生成Java的可訪(fǎng)問(wèn)代碼。

jextract工具會(huì)生成一堆的函數(shù)和類(lèi)型,關(guān)鍵這些是從c的頭文件中自動(dòng)生成的,你不必費(fèi)勁心思去自己設(shè)計(jì)類(lèi)型和方法了。這一點(diǎn)比Go語(yǔ)言中的CGO要方便多了,快捷度可以和C#互操作性相媲美。

所以以后你要是想從Java中訪(fǎng)問(wèn)C的鏈接庫(kù),可以使用jextract一步生成,

調(diào)用方法也很方便。

另一個(gè)例子是調(diào)用C標(biāo)準(zhǔn)庫(kù)time.h中的clock_gettime函數(shù),它的參數(shù)需要struct類(lèi)型,使用上面相同的手段可以生成訪(fǎng)問(wèn)類(lèi):

當(dāng)然這兩個(gè)例子只演示了這個(gè)項(xiàng)目的一個(gè)功能,更多的功能我們可以持續(xù)關(guān)注。

Project Valhalla

包含兩個(gè)feature: 值類(lèi)型和基本類(lèi)型的泛型。

  • 值類(lèi)型:提供不可變類(lèi)型和非引用類(lèi)型的支持。不可變類(lèi)型在Scala中很常用,java中也會(huì)引進(jìn)這中類(lèi)型。使用這種類(lèi)型有很多好處,一個(gè)就是可以顯著地提高性能,因?yàn)閿?shù)據(jù)不可變,你也不必?fù)?dān)心同步更新的問(wèn)題。
  • 基本類(lèi)型的泛型: 為primitive type提供泛型的支持,不必再進(jìn)行裝箱開(kāi)箱操作。

 

Mark Reinhold用一個(gè)復(fù)數(shù)矩陣相乘的例子來(lái)測(cè)試,測(cè)試工具使用JMH。

首先是正常的public class Complex {...}類(lèi),然后改成值類(lèi)型public value class Complex{...}再次測(cè)試,結(jié)果顯示,

正常測(cè)試花費(fèi)3.6秒內(nèi)存分配3.7G;值類(lèi)型則只需要0.3秒花費(fèi)3.8M左右,效果驚人!

目前這些特性還在開(kāi)發(fā)之中,Mark Reinhold用java12 + 這些項(xiàng)目已經(jīng)能跑一些例子了,我們可以期待不遠(yuǎn)的將來(lái)能在Java中使用到這些美妙的特性。


文章名稱(chēng):Java:未來(lái)已來(lái)這些炫酷特性你確定不看嗎?
URL地址:http://www.dlmjj.cn/article/dpgscij.html