成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java: 未來已來 這些炫酷特性你確定不看嗎?

開發 后端
在10月22的 Oracle Codeone大會上,Java平臺的首席架構師 Mark Reinhold 做了The Future of Java is Today的演講, 回顧了最近Java的幾個版本的新的功能,Java的每年兩次的發布周期。

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

 

Java各版本的發布時間點和LTS版本
Java各版本的發布時間點和LTS版本

Mark Reinhold 我不多介紹了, 之前要了解Java的未來動向看Java之父James Gosling, 他離開Oracle之后想了解Java的動向就看 Mark Reinhold。

 

[[247533]]

Project Amber

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

這個項目包含很多Java語言特性的新功能。

包括:

正在實現的:

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

 

  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.     }; 

數據類,一行定義,省去了字段、字段訪問方法和hash、equals、toString等方法,定義ValueObject簡化到家了:

 

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

 

  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): 這個很多語言中都實現了,可以更好的書寫字符串字面值, 尤其在正則表達式中處理很多轉義符的時候,和Go類似:

 

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

 

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

已發布的:

  • JEP 286 Local-Variable Type Inference (var) (JDK 10): 本地變量的類型推斷, 也就是使用var定義變量,有些同學已經用起來了,非常的方便,有點類似動態類型的語言,感覺雖然還沒有達到Scala那么靈活,已經很不錯了
  • JEP 323 Local-Variable Syntax for Lambda Parameters (JDK 11): 對本地變量的類型推斷的加強,用在Lambda表達式中。

暫時擱置的:

  • JEP 301 Enhanced Enums.

總之,每一個特性都可以大大簡化我們的開發,讓Java更像一個"現代的"編程語言。

Project Loom

提供一個輕量級的用戶態的纖程,叫做fiber,更加簡化并發編程,而且更有效

這個特性多年前我介紹過: https://colobu.com/2016/08/01/talk-about-quasar-again/,當時它還像一個玩具,開發的時候很麻煩,而且有一些坑。作者后來負責這個jep,可以很好的從java實現的角度去實現fiber,所以很是期待。

 

[[247534]]

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

 

例子使用jetty做服務器,線程池執行命令的時候讓fiber去調度,這種方式對現有的代碼改動很小。

 

我比較關注的是如果它的內部調度算法怎么實現的,另外,一個包含復雜業務完成時間較長的fiber是否能被調度器自動調度,以便使用有限的線程調度其它的fiber, 類似goroutine在系統調用的時候自動插入檢查點。

Project Panama

提升JVM和外部(非java)代碼和數據聯系

當然,這個項目不僅僅是簡化JNI的開發,而且提供了很多的特性:

  • 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在演講中舉了兩個例子,首先是為 POSIX 操作系統 API 的頭文件unistd.h中的函數生成Java的可訪問代碼。

 

jextract工具會生成一堆的函數和類型,關鍵這些是從c的頭文件中自動生成的,你不必費勁心思去自己設計類型和方法了。這一點比Go語言中的CGO要方便多了,快捷度可以和C#互操作性相媲美。

所以以后你要是想從Java中訪問C的鏈接庫,可以使用jextract一步生成,

 

調用方法也很方便。

另一個例子是調用C標準庫time.h中的clock_gettime函數,它的參數需要struct類型,使用上面相同的手段可以生成訪問類:

 

當然這兩個例子只演示了這個項目的一個功能,更多的功能我們可以持續關注。

Project Valhalla

包含兩個feature: 值類型和基本類型的泛型。

  • 值類型:提供不可變類型和非引用類型的支持。不可變類型在Scala中很常用,java中也會引進這中類型。使用這種類型有很多好處,一個就是可以顯著地提高性能,因為數據不可變,你也不必擔心同步更新的問題。
  • 基本類型的泛型: 為primitive type提供泛型的支持,不必再進行裝箱開箱操作。

 

Mark Reinhold用一個復數矩陣相乘的例子來測試,測試工具使用JMH。

首先是正常的public class Complex {...}類,然后改成值類型public value class Complex{...}再次測試,結果顯示,

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

目前這些特性還在開發之中,Mark Reinhold用java12 + 這些項目已經能跑一些例子了,我們可以期待不遠的將來能在Java中使用到這些美妙的特性。

責任編輯:未麗燕 來源: 鳥窩
相關推薦

2015-09-08 15:37:08

2018-04-02 10:28:10

iOSPWA蘋果

2019-09-03 14:53:11

醫療機器人智慧醫療

2011-03-28 17:58:17

ibmdwHTML5

2019-08-23 18:40:54

機器人人工智能

2015-08-24 09:59:19

dt

2018-01-16 20:14:37

OpenPOWERAIIBM

2021-03-05 18:38:45

ESvue項目

2014-05-21 16:03:45

敏捷網絡華為

2015-10-19 13:16:57

能源互聯網

2020-07-20 10:40:52

Linux命令Ubuntu

2021-06-24 07:54:20

vite 靜態處理public

2021-06-04 10:11:07

鴻蒙安卓操作系統

2021-02-06 09:44:35

存儲

2021-02-05 07:06:03

AI人工智能

2015-10-20 15:58:28

彈力菜單android源碼

2015-05-20 16:57:13

2017-07-18 16:00:09

炫酷動畫開源框架APP

2020-07-09 18:48:59

5G網絡技術

2023-12-07 08:13:58

Java開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久入口 | 亚洲国产精品99久久久久久久久 | 91人人视频在线观看 | 三级在线免费 | 久久久国产一区二区三区四区小说 | 亚洲国产中文字幕 | 日本二区在线观看 | 精品日韩一区二区 | 手机看片1 | 日韩在线资源 | 中文字幕一区二区三区精彩视频 | 我想看一级黄色毛片 | 黄色91在线 | 91亚洲国产 | 日韩国产免费观看 | 欧美激情精品久久久久 | 日韩不卡一二区 | 色婷婷一区二区三区四区 | 久久精品一区二区三区四区 | 久久综合久 | 成人国产精品久久久 | 亚洲精选一区二区 | 最新av在线网址 | 欧美一区二区三区在线观看视频 | 中文字幕久久久 | 精品欧美一区二区三区久久久 | 久久精品成人 | 黄色三级毛片 | 一级毛片观看 | 日韩精品一区在线观看 | 精品九九久久 | 欧美一级在线视频 | 国产999精品久久久影片官网 | 在线播放国产一区二区三区 | 国产日韩欧美在线播放 | 1204国产成人精品视频 | 91精品国产手机 | 自拍偷拍中文字幕 | 亚洲一区二区视频 | 久久亚洲一区二区三区四区 | 国产精品18毛片一区二区 |