即將改變軟體開發的5個Java9新特性
预计发布的Java 9中,最令人兴奋的特性是什么?
有关Java9的消息最近显得有些沉寂,不要被它迷惑了。JDK开发者正在努力朝着下一个版本迈进,计划2015年12月前完成所有功能开发。之后,它会经历严格测试和bug修复以准备它的全面上市,按计划会在2016年9月发布。
今天我们已经对Java 9中所期待的特性有了一个很清晰的图景。如果Java 8可以被描述为主要是lambdas表达式、streams和API变化的话,那么Java 9就是关于Jigsaw、额外的实用工具和内部的变化。在这篇文章中,收集了一些我们认为是Java 9中最期待的特性——除了通常的猜测之外,Jigsaw项目,承担了打破JRE并对Java核心组件模块化的使命。
这里有一些特性是Java 9中绝对必要了解的,其中的一些已经在早期的发布版本中为你捣鼓做好了准备。
1.Java + REPL = jshell
是的。之前我们怀疑Kulla项目是否会在Java 9中准时发布,但现在已得到了官方确认。下一版发布的Java将会有称为jshell的新命令行工具,它会添加本地支持和以Java方式对REPL(交互式解释器)进行推广。意思是说,如果你想只运行几行Java代码,你不必把它包装进一个单独的工程或者方法。
噢,你可以忘掉那些分号了:
-> 2 + 2 | 表达式的值是4 | 将临时变量$1的类型设为int
还有一些像REPL加载项一样的替代品会增加到流行的IDE和解决方案中,就像Java REPL网页控制台。但目前为止,还没有官方的或者合适的方式来这么做。jshell在早期的版本中已经可以用了,等着你给它来个测试运行。
2、微基准测试要来了
由Alexey Shipilev开发的Java微基准测试套件(Java Microbenchmarking Harness)正在其进化的下一阶段,并加入Java作为官方基准解决方案。我们真的很喜欢在Takipi做基准,所以一套标准化的执行方式是我们期待的。
JHM是一组用来编译、运行和分析nano/micro/milli/macro基准的套件。当涉及到精确基准评估,对结果产生很大影响的能力将备受关注,比如预热时间和优化。当你以微秒或纳秒计时的情况下尤其如此。所以,如果你想要更加精确的结果来帮助跟踪基准以做出正确的决定,JMH是你的最佳选择——并且现在它已经成为Java 9的同义词了。
3、G1会成为新的默认垃圾收集器吗?
我们经常听说的一个误解是:Java只有一个垃圾收集器,而事实上它有4个。Java 9中,仍有一个运行提议,关于替换由Java 7引入的G1默认垃圾收集器(并行/吞吐量收集)的讨论。不同收集器之间差别精简概述,可以查看这篇里的文章。
通常来说,G1被设计来更好地支持大于4GB的堆,并且不会造成频繁的GC暂停,但当暂停发生时,往往会处理更长时间。最近我们和Outbrain的性能专家Haim Yadid讨论了关于GC的方方面面,来帮助你了解更多各收集器之间不同的权衡。同样,如果你想要深入了解相关讨论,那么hotspot-dev和jdk9-dev的邮件组是个开始学习不错的地方。
4、未来是HTTP 2.0
官方的HTTP 2.0标准是几个月之前被批准的,基于Google的SPDY算法构建。SPDY已经展示了相对HTTP 1.1巨大的速度提升,范围在11.81%到47.7%之间,并且它已经存在于大多数现代的浏览器中了。Java 9将全面支持HTTP 2.0,并且为Java配备一个全新的HTTP客户端来替代HttpURLConnection,并且同时还实现HTTP 2.0和websockets。
5、进程API得到了巨大的推动
到目前为止,通过Java来控制和管理操作系统进程能力有限。例如在早期版本的Java中,为了做一些简单的事情,像得到进程PID,要么访问本机代码,要么用某种神奇的临时解决方法。此外,还可能需要一个对于每个平台提供不同实现来保证你得到正确的结果。
在Java 9中,除了获取Linux PID的代码,现在都像这样来获取:
public static void main(String[] args) throws Exception { Process proc = Runtime.getRuntime().exec(new String[]{ "/bin/sh", "-c", "echo $PPID" }); if (proc.waitFor() == 0) { InputStream in = proc.getInputStream(); int available = in.available(); byte[] outputBytes = new byte[available]; in.read(outputBytes); String pid = new String(outputBytes); System.out.println("Your pid is " + pid); } }
转向像这样的代码(同样也支持所有的操作系统):
System.out.println("Your pid is" + Process.getCurrentPid());
这一更新将扩展Java与操作系统交互的能力:全新的直接操作PID、进程名和状态的方法,操作JVM线程和进程等等能力。
你不会在Java 9中见到什么?
我们以为两个有趣的特性会作为即将到来的Java发布版本中的一部分——但现在我们知道它们将不会出现在这次发布的版本。
1、一个标准的轻量级JSON API
在我们进行的一项对350名开发人员的调查中,JSON API就像Jigsaw一样被大肆宣传,但看起来它好像没在发布版本中,原因可能是资金问题。Mark Reinhold,Java平台的首席架构师,在JDK 9的邮件列表中写到:
“这个JEP对于平台来说是个有益的补充,但长远来看,考虑到资金的因素以及Oracle资助的其它特性,它并不如其它特性一样重要。我们考虑可能在JDK 10或者之后的版本再发布这个JEP。”
2、金钱和货币API
有一条新闻,似乎看起来金钱和货币API也缺少Oracle的支持。这是我们从Anatole Tresch那里得到的答案,这个API的产品推广师:
@tkfxin 目前不会。从Oracle那里没得到支持。取而代之的,我们将提高Java EE支持并且spring也将支持它 :)
– Anatole Tresch (@atsticks) 2015年6月16日

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP8.3發布:新功能一覽隨著技術的不斷發展和需求的不斷變化,程式語言也不斷更新和改進。作為一種廣泛應用於網頁開發的腳本語言,PHP一直在不斷進步,為開發者提供更強大和高效的工具。最近發布的PHP8.3版本帶來了許多期待已久的新功能和改進,以下讓我們來看看這些新特性的一覽。非空屬性的初始化在過去的PHP版本中,如果一個類別的屬性沒有明確賦值,它的值

深入解析PHP8的新特性,幫助您掌握最新技術隨著時間的推移,PHP程式語言一直在不斷演進和改進。最近發布的PHP8版本為開發者提供了許多令人興奮的新功能和改進,為我們的開發工作帶來了更多便利和效率。在本文中,我們將深入解析PHP8的新特性,並提供具體的程式碼範例,旨在幫助您更好地掌握這些最新的技術。 JIT編譯器PHP8引進了JIT(Just-In-Time)編

php8新特性有JIT 編譯器、型別推導、命名參數、聯合型別、屬性、錯誤處理改進、非同步程式支援、新的標準函式庫函數和匿名類的擴充等。詳細介紹:1、JIT編譯器,PHP8引入了JIT編譯器,這是一個重要的效能改進,JIT編譯器可以對一些高頻執行的程式碼進行即時編譯和最佳化,從而提高運行速度;2、類型推導,PHP8引入了類型推導功能,允許開發者在宣告變數時自動推導出變數的類型等等。

【Go語言新特性解讀:讓程式設計更有效率,需要具體程式碼範例】近年來,Go語言在軟體開發領域備受關注,其簡潔、高效的設計理念吸引了越來越多的開發者。作為一種靜態類型的程式語言,Go語言不斷推出新的功能以提高開發效率,簡化程式碼編寫過程。本文將深入解讀Go語言最新的特性,探討如何透過具體的程式碼範例來體驗這些新特性帶來的便利性。模組化開發(GoModules)Go語言從1

CSS3的新功能一覽:如何使用CSS3實現過渡效果CSS3作為CSS的最新版本,在眾多新功能中,最有趣和實用的應該是過渡效果(transition)。過渡效果可以讓我們的頁面在互動時更加平滑、更漂亮,為使用者帶來良好的視覺體驗。本文將介紹CSS3過渡效果的基本用法,並附有對應的程式碼範例。 transition-property屬性:指定需要過渡的CSS屬性過渡效果

CSS3的新功能一覽:如何使用CSS3實現水平居中佈局在網頁設計和佈局中,水平居中佈局是一項常見的需求。過去,我們經常使用複雜的JavaScript或CSS技巧來實現此目的。然而,CSS3引入了一些新的特性,使得水平居中佈局更加簡單和靈活。本文將介紹一些CSS3的新特性,並提供一些程式碼範例,示範如何使用CSS3實現水平居中佈局。一、使用flexbox佈局fle

PHP8.1引進的新的Redis擴充隨著網路的快速發展,大量的資料需要儲存和處理。為了提高資料處理的效率和效能,快取成為了一個不可或缺的部分。而在PHP開發中,Redis作為一種高效能的鍵值對儲存系統,被廣泛應用於快取和資料儲存的場景。為了進一步提升Redis在PHP的使用體驗,PHP8.1引進了新的Redis擴展,本文將介紹這項擴展的新增功能,並給予

CSS3的新特性一覽:如何應用CSS3動畫效果引言:隨著網路的發展,CSS3逐漸取代了CSS2成為前端開發中最常用的樣式語言。 CSS3提供了許多新的特性,其中最受歡迎的是動畫效果。透過使用CSS3動畫,可以為網頁添加令人驚豔的互動效果,提升使用者體驗。本文將介紹一些CSS3常用的動畫特性,並提供相關的程式碼範例。一、過渡動畫(TransitionAnimat
