Archive for 3月, 2014
【祝】Java SE 8 正式リリース
2014 年 3 月 18 日正午 (日本時間 3 月 19 日:午前 4時) 、予定通り Java の開発者待望のJava SE 8 が正式にリリースされました。当日は、多くのメディアでも取り上げられた他、Twitter 上でも非常に多くのお祝いメッセージや期待するメッセージを見受けました。
Publickey :[速報]Java 8が正式公開。ラムダ式、新しい日時API、JavaFX8など。NetBeans 8.0も登場
日経 IT Pro : 2年8カ月ぶりの Javaの新版「Java SE 8」が公開
インターネットコム:Java 8 が一般公開、ラムダ式を採用
マイナビニュース:Java 8が正式リリース – ラムダ式採用、新型導入など大幅強化
インプレス:Oracle、約3年 ぶりとなる「Java SE」のメジャーバージョン「Java SE 8」を正式公開
また、2014 年 3 月 21 日 (金)日本 Java ユーザ・グループ主催の Java SE 8 正式リリースお祝いイベント「祝☆Java 8 Launch」が開催されました。
ここで、私は Java SE 8 がリリースされるまでの歴史や概要を紹介しました。
(お祝いの意味も込めて、今私が持っている Duke 画像を全て使いました。)
その他、5 月に開催する Java のイベントについても紹介しました。今年も JavaDay Tokyo 2014を開催致します。皆様どうぞ楽しみにしてください。
5 月の Java 祭り
5 月 18 日(日) JJUG CCC Spring 2014 場所:ベルサール西新宿
5 月 22 日(木) Java Day Tokyo 2014 場所:品川プリンスホテル
5 月 23 日(金) Java SE 8 & Raspberry Pi ハンズオン 場所:オラクル青山センター
5 月 24 日(土) Java Bike Ride (サイクリング)
最後に、私が本日使用したプレゼン資料の最後に Java SE 8 の主要な機能(Lambda, Date & Time API, JavaFX) 以外の細かな機能変更を 100 ページ程にまとめました。主要機能以外で Java SE 8 でどのような機能が加わったのかをご確認されたい方はご参照頂ければ幸いです。
※ この資料は本イベントでの発表にあわせて急ピッチで作成したため、Lambda, Date & Time API, JavaFX の説明は手を抜いています(主要機能は他の発表者が詳しく説明してくださるので)。また間違いが無いように気をつけたつもりですが、間違いが含まれているかもしれません。もし間違い等を見つけた方は是非、コメント欄にコメントをお寄せいただければ幸いです。
本参考資料が決して全ての変更点ではございません。実際に Java SE 8 で追加された クラスやメソッドの一覧は、高橋 徹さん が昨年末に執筆してくださった、「Java Advent Calendar 2013 11日目 – Java SE 8の新クラス・メソッド一覧」 をご参考にいただけますし、私が調べた所では、上記以外にもオリジナル・ドキュメント自身の since 1.8 の記載漏れで上記にリストされていないクラス等もあります。
ただ、この資料が Java SE 8 で追加された新機能の把握にお役立ち頂ければ幸いです。
Happy Java SE 8 Life !!
そして、JJUG CCC, JavaDay Tokyo でまた宜しくお願いします。
Java SE 8 に Lambda 式や Stream API を導入した背景から、どのように実装すべきかの説明資料。
Java SE 8 で Charset の改良
Java SE 8 の新機能、改善点の一つに Charset の実装の改善があります。
これは charset のサイズを小さくし、エンコード、デコードのパフォーマンスを改善する事を目的としています。
実際、Java SE 7 の charset と Java SE 8 のサイズを比較してみると、下記コマンド実行例のように約 3.7 M ほどあったファイルが、3.1 M までスリム化しています。
追記 (2014 年 3 月 18 日):
山中 淳彦さん から本件に関して追加情報を頂きましたので、その内容を下記に共有いたします。
以降、山中 淳彦さんから頂いた情報:
横からすいません。私も興味があったのでチラッと調べてみました。言及されてる変更はJEP 112: Charset Implementation Improvements[1] で記述されてるもので、具体的な issue としては、JDK-6653797[2]、JDK-7183053[3]が挙げられてますね。
前者、
By re-implemen/organize JDK’s charset implementation package
sun.nio.cs to achive the following goals
(1) decrease the size of the charsets.jar by 50% (from current 3.4M to below 1.7M).
(2) ease the maintenance cost (most charset implementation to be generated during
JDK build time from text based mapping tables)
(3) improve the performance (speed up the nio encoding/decoding performance)
(4) replace the current sun.io.* converters with an “adaptor” to re-direct the
sun.io encoding/decoding to nio.charset implementation t finally remove the
burden of maintain sun.io.
によって、十年来の目標だった JDK-4948149[4] での、sun.io.* の機能の sun.nio.cs.* への移管が達成され、やっと sun.io.* が削除されたということだと思われます。
後者は、“Faster new String(bytes, cs/csn) and String.getBytes(cs/csn)”[5]
によると、Java7 で single-byte の new String(bytes, cs/csn) のパフォーマンスが改善されたので、Java8 では、同様の hack が UTF-8 charset 文字にも施され、single byte、multi-byte 文字全てで、new String(bytes, cs/csn)、String.getBytes(cs/csn) のパフォーマンスが改善されたという話のようです。
[1] http://openjdk.java.net/jeps/112
[2] https://bugs.openjdk.java.net/browse/JDK-6653797
[3] https://bugs.openjdk.java.net/browse/JDK-7183053
[4] https://bugs.openjdk.java.net/browse/JDK-4948149
[5] https://blogs.oracle.com/xuemingshen/entry/faster_new_string_bytes_cs
追記2
JDK-7183053に関する変更[1]で、test/sun/nio/cs/StrCodingBenchmarkDB.java[2] が追加されてますが、codereview request for 7183053[3] でその効果が紹介されてました。
The results of the “non -scientific” benchmark StrCodingBenchmarkDB
running on client
and server vm on my linux machine are included in docs_c (client) and
docs_s(server)
below.
http://cr.openjdk.java.net/~sherman/7183053/dbcs_c
http://cr.openjdk.java.net/~sherman/7183053/dbcs_s
よくわかってませんが、確かに速くなってるようです。
[1] http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/c76ad79a5a2f
[2] http://cr.openjdk.java.net/~sherman/dbcs_array/webrev/test/sun/nio/cs/StrCodingBenchmarkDB.java.html
[3] http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-July/010806.html
山中 淳彦さんから頂いた情報はここまで……
> ls -l /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar -rw-rw-r– 1 root wheel 3696271 12 19 12:13 /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar > ls -l /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk//Contents/Home/jre/lib/charsets.jar |
実際に jar を展開して比較した所、sun.io.* が全て削除されている事が分かりました。また、その他にも日本語に関連した部分も含め改良が加わっている事が分かりました。比較の内容の詳細を下記にアップしましたのでどうぞご参照ください。